3
Feb

Veckans CSS-meny 3

Kategorier: (X)HTML CSS

Denna veckas CSS-meny bygger ut ytterligare lite jämfört med förra veckans. En expanderande meny enbart skriven i CSS och HTML. Tyvärr fungerar inte expanderingen i Internet Explorer 6 och lägre versioner eftersom CSS-stödet inte är tillräckligt bra. Däremot är menyn fortfarande funktionell även för de utan avancerat CSS-stöd.

Likt tidigare veckor börjar vi med en enkel lista. Skillnaden den här gången är att under varje li-element har vi en ny lista som är en undermeny (eng. submenu). HTML-koden för menyn ser ut såhär:

<ul id="nav">
<li>
Recept
<ul class="subNav">
<li><a href="kott.html" rel="nofollow">Kött</a></li>
<li><a href="fisk.html" rel="nofollow">Fisk</a></li>
<li><a href="fagel.html" rel="nofollow">Fågel</a></li>
</ul>
</li>
<li>
Ingredienser
<ul class="subNav">
<li><a href="gronsaker.html" rel="nofollow">Grönsaker</a></li>
<li><a href="frukt.html" rel="nofollow">Frukt</a></li>
<li><a href="spannmal.html" rel="nofollow">Spannmål</a></li>
</ul>
</li>
</ul>
Artikelbild

Alla rel="nofollow"-attribut i länkarna bör tas bort om du ska använda koden på din egen hemsida, då jag lagt till dem för att sökmotorer inte ska försöka följa länkarna eftersom de inte leder någonstans.

Vi börjar med lite kod för att få utseendet på listorna lite prydligare (om du inte hänger med på detta, vänligen läs här och här innan du fortsätter):

#nav, #nav .subNav, ul#nav li {
list-style-type: none;
padding: 0px;
margin: 0px;
}
ul#nav li {
width: 100px;
background-color: #7281a1;
color: white;
font-family: "Trebuchet MS", Arial, Sans-serif;
font-size: 12px;
}
ul#nav li ul.subNav li {
background-color: #3b4e75;
}
ul#nav li ul.subNav li a:link, ul#nav li ul.subNav li a:visited {
display: block;
height: 20px;
color: white;
text-decoration: none;
}
ul#nav li ul.subNav li a:hover, ul#nav li ul.subNav li a:active {
background-color: #2a3d64;
}

Nu har menyn fått ett mycket trevligare utseende.

Artikelbild
Det är här "magin" kommer. Vi lägger till följande CSS-kod:
ul#nav>li {
height: 20px;
overflow: hidden;
line-height: 20px;
}
ul#nav li:hover, ul#nav li:active {
height: auto;
overflow: auto;
}

Den första delen sätter höjden och radhöjden på varje li-element i listan "nav" till 20 pixlar. Dessa li-element är i vanliga fall högre än så, eftersom de innehåller en undermeny, men genom att sätta egenskapen overflow till hidden kommer allt innehåll som är utanför denna 20 pixlars höjd att döljas.

För att sedan få listan att expandera lägger vi till den andra delen. Den gör att när du för musen över listelementet, som nu bara är 20 pixlar högt, sätts höjden från 20 pixlar till auto och även overflow sätts till auto, d.v.s. innehållet bestämmer höjden på li-elementet. När musen förs utanför listelementet kommer egenskaperna att återgå till sina ursprungliga värden (height 20px och overflow hidden) vilket leder till att listelementet kollapsar igen.

Här finns den färdiga expanderande css-menyn.

TYCKTE DU OM ARTIKELN?

Pusha

KOMMENTARER

#1. Skriven av Sara den 13 Apr 2008

Hej!
Himla bra meny, jag fick den att funka. Dock inte i safari på mac. Är det så att det inte fungerar? Eller finns det något knep som man kan ta till alternativt en annan meny. Sen skulle jag också gärna vilja klicka fram undermenyerna istället för att det kommer automatiskt. Hur gör jag? Detta kanske inte är en sida man frågar på, men jag testar.

Tack för hjälpen!

/sara

#2. Skriven av Stefan den 14 Apr 2008

Hej Sara!

Fråga på, det är bara roligt! :)

Jag ska kika på sidan i Safari (dumt att jag inte gjort det) och se ifall det går att åtgärda.

Angående att klicka för att få fram undermenyerna kan det vara svårt att få till med enbart CSS, då behöver man nästan blanda in lite javascript också. Jag kan skriva en till artikel som visar hur man gör det. Håll ögonen öppna!

#3. Skriven av Stefan den 14 Apr 2008

Hej igen!

Jag provade exemplet i Safari 1.3.2 och det fungerade utan problem. Vilken version av Safari provade du i?

#4. Skriven av Sara den 28 Apr 2008

Hej hej!

Har en liten äldre version av Safari 3.1.1. Sitter även på mac.

Vore väldigt trevligt med en ny artikel med klickbarmeny:)

#5. Skriven av Ingrid den 7 May 2008

Hejsan!
Tackar så väldans för den finfina koden :)
Jag undrar mest hur man gör för att få menyerna att ligga vågrät. Alltså bara rubrikerna, inte innehållet. Har testat med "decoration: inline;" men inte fått det att fungera på ett vettigt sätt.
Vet du något sätt att kringgå att det inte funkar under explorer6? Måste man blanda in javascript då?

Tack än en gång :) Väldigt snygga och användbara menyer.

//Ingrid

#6. Skriven av Stefan den 7 May 2008

Hej Ingrid!
Om du lägger till "float: left;" i ul#nav>li ska du få rubrikerna att hamna bredvid varandra.

Tyvärr går det inte att få denna meny att fungera i IE6 utan att blanda in javascript. Anledningen är att CSS-väljaren ">" inte stöds av IE6.

#7. Skriven av Marcus den 15 Jul 2008

Hej,
Testade menyn ovan..jätte coolt.
Hur ser javascriptet ut för att menyn ovan ska kunna visas i IE6??

Jag har tidigare använt mig av DW Spry men då kommer det upp ett meddelande i IE7 att:

"För att skydda datorn förhindrar Internet Explorer att den här webbsidan kör skript eller ActiveX-kontroller som skulle kunna få tillgång till datorn."

Kan man komma runt detta meddelande??
För jag tror inte alla besökarna är pigga på att tillåta ActiveX eller javascript varje gång de ska besöka sidan.

#8. Skriven av Elin den 12 Jun 2009

Hej
En fin meny men jag får den inte att funka.
När jag klistrar in det här händer inget.
ul#nav>li {
height: 20px;
overflow: hidden;
line-height: 20px;
}
ul#nav li:hover, ul#nav li:active {
height: auto;
overflow: auto;
}


Vad kan jag ha gjort fel?

Tack för svar

Kommentera artikeln



RSS

SÖK BLAND ARTIKLAR

KATEGORIER

OM KLIENTSIDAN

Klientsidan.se är en privat site som skriver om klientdelen av webben. Här kan du hitta artiklar och information om HTML, XHTML, CSS, webbstandarder, semantik, AJAX, javascript, DOM och mycket annat. Har du några idéer eller synpunkter, tveka inte att skicka ett mail. Kontaktuppgifter finner du på kontaktsidan.