Hey Tweakers!
Ik ben een css-menu in elkaar aan het zetten volgens deze jsfiddle: http://jsfiddle.net/YXT7j/63/
De korte versie van mijn vraag is: Hoe kan ik dit resultaat krijgen zonder een expliciete width te geven aan de ul.sub (nu met inline styles gedaan).
De langere versie: Onder item 1 in het menu zie je 2 lijsten naast elkaar. In de html zie je een inline style waarin ik de width declareer van dat submenu. Als ik die width zou weglaten (inline of css) worden de lijsten onder elkaar weergegeven.( http://jsfiddle.net/YXT7j/64/ ).
Het aantal lijsten in een submenu is dynamisch en daarmee ook de gewenste breedte van het submenu. Daarom moet ik hem nu (mbv php) inline toevoegen. Dat is natuurlijk niet netjes. Het zou mooier zijn als het submenu in breedte meerekt met zijn kinderen (li's) zoals elk ander element. Helaas neemt hij zijn parent als uitgangspunt voor zijn breedte en past dat alleen maar aan met expliciet gezette breedtes of de maximum breedte van 1 van zijn kinderen.
Ik heb zelf veel gegoogled, op stackoverflow gezocht en gepost, gefiddled op jsfiddle en nog eens de specificaties van positioning goed doorgenomen maar helaas nog niets kunnen vinden wat me verder helpt.
Zien jullie een oplossing hiervoor?
Ik ben een css-menu in elkaar aan het zetten volgens deze jsfiddle: http://jsfiddle.net/YXT7j/63/
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
| <ul id="nav"> <li><a>item 1</a> <ul class="sub" style="width: 200px;"> <li><a>item 1.1</a> <ul> <li><a>item 1.1.1</a></li> <li><a>item 1.1.2</a></li> <li><a>item 1.1.3</a></li> </ul> </li> <li><a>item 1.2</a> <ul> <li><a>item 1.1.1</a></li> <li><a>item 1.1.2</a></li> <li><a>item 1.1.3</a></li> </ul> </li> </ul> </li> <li><a>item 2</a> <ul class="sub"> <li><a>item 2.1</a></li> <li><a>item 2.2</a></li> <li><a>item 2.3</a></li> </ul> </li> <li><a>item 3</a> <ul class="sub"> <li><a>item 3.1</a></li> <li><a>item 3.2</a></li> <li><a>item 3.3</a></li> </ul> </li> </ul> |
Cascading Stylesheet:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| #nav>li { float: left; margin: 0 10px; position: relative; } .sub { display: none; position: absolute; top: 1em; left: 0; } .sub>li { width: 100px; float: left; } #nav>li:hover .sub { display: block; } |
De korte versie van mijn vraag is: Hoe kan ik dit resultaat krijgen zonder een expliciete width te geven aan de ul.sub (nu met inline styles gedaan).
De langere versie: Onder item 1 in het menu zie je 2 lijsten naast elkaar. In de html zie je een inline style waarin ik de width declareer van dat submenu. Als ik die width zou weglaten (inline of css) worden de lijsten onder elkaar weergegeven.( http://jsfiddle.net/YXT7j/64/ ).
Het aantal lijsten in een submenu is dynamisch en daarmee ook de gewenste breedte van het submenu. Daarom moet ik hem nu (mbv php) inline toevoegen. Dat is natuurlijk niet netjes. Het zou mooier zijn als het submenu in breedte meerekt met zijn kinderen (li's) zoals elk ander element. Helaas neemt hij zijn parent als uitgangspunt voor zijn breedte en past dat alleen maar aan met expliciet gezette breedtes of de maximum breedte van 1 van zijn kinderen.
Ik heb zelf veel gegoogled, op stackoverflow gezocht en gepost, gefiddled op jsfiddle en nog eens de specificaties van positioning goed doorgenomen maar helaas nog niets kunnen vinden wat me verder helpt.
Zien jullie een oplossing hiervoor?
[ Voor 32% gewijzigd door Jap_ op 30-10-2012 12:13 . Reden: jsFiddle code in topic gezet ]