Naar aanleiding van een artikel op www.alistapart.com (http://www.alistapart.com/articles/horizdropdowns/) probeer ik het menu nu horizontaal te maken en zo cross-browser mogelijk. Nu heb ik met de onderstaande code alles redelijk op orde (ja ik gebruik wat hacks en javascript).
In IE 5.x en 6.0 werkt het prima. En ook Firefox 1.5 doet het goed:

Maar in Firefox 1.0.x gaat het submenu niet lekker.

De ul van het submenu wordt niet goed weergegeven.
Ik zou met id's aan de ul's een absolute breedte kunnen meegeven, dan is het opgelost.
Maar het liefste wil ik dit niet doen en de breedte automatisch laten goedzetten.
Dus toen dacht ik aan javascript.
Ik lees hiermee alle ul's uit. En loop de onderliggende li's af.
Ik dacht handig te zijn en dan per ul de breedste li te zoeken en de ul dan deze breedte + eventueel extra ruimte te geven. Maar blijkbaar kun je niet de breedte uitlezen van een li als deze niet is gedefinieerd.
Weet iemand een andere manier om de ul breed genoeg te krijgen, zodat de border mooi omsluit?
code:
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>menu test</title>
<style type="text/css" media="all">
ul#nav{
width: 600px;
}
ul {
margin: 0;
padding: 0;
list-style: none;
border: 1px solid #000000;
}
ul li {
position: relative;
float: left;
white-space: nowrap;
padding: 0px 10px 0px 10px;
}
li ul {
position: absolute;
top: 30px;
display: none;
border: 1px solid #cccccc;
}
li ul li{
width: auto;
clear: left;
}
ul li a {
display: block;
text-decoration: none;
color: #777;
background: #fff;
padding: 5px;
}
li:hover ul,
li.over ul{
display: block;
}
/* Fix IE. Hide from IE Mac \*/
* html ul li {
float: left;
height: 1%;
}
* html ul li a {
height: 1%;
}
/* End */
/*\*//*/
ul li{
width: 20%;
}
/**/
</style>
<!--[if lt IE 7]>
<style type="text/css" media="all">
ul li {
width: 1%;
}
</style>
<![endif]-->
<script type="text/javascript">
startList = function() {
if (document.all&&document.getElementById) {
navRoot = document.getElementById("nav");
for (i=0; i<navRoot.childNodes.length; i++) {
node = navRoot.childNodes[i];
if (node.nodeName=="LI") {
node.onmouseover=function() {
this.className+=" over";
}
node.onmouseout=function() {
this.className=this.className.replace(" over", "");
}
}
}
}
}
window.onload=startList;
</script>
</head>
<body>
<ul id="nav">
<li><a href="#">Home</a></li>
<li><a href="#">About</a>
<ul>
<li><a href="#">History</a></li>
<li><a href="#">Team</a></li>
<li><a href="#">Offices</a></li>
</ul>
</li>
<li><a href="#">Services</a>
<ul>
<li><a href="#">Web Design</a></li>
<li><a href="#">Internet Marketing</a></li>
<li><a href="#">Hosting</a></li>
<li><a href="#">Domain Names</a></li>
<li><a href="#">Broadband</a></li>
</ul>
</li>
<li><a href="#">Contact Us</a>
<ul>
<li><a href="#">United Kingdom</a></li>
<li><a href="#">France</a></li>
<li><a href="#">USA</a></li>
<li><a href="#">Australia</a></li>
</ul>
</li>
<div style="clear: both;"></div>
</ul>
</body>
</html> |
In IE 5.x en 6.0 werkt het prima. En ook Firefox 1.5 doet het goed:

Maar in Firefox 1.0.x gaat het submenu niet lekker.

De ul van het submenu wordt niet goed weergegeven.
Ik zou met id's aan de ul's een absolute breedte kunnen meegeven, dan is het opgelost.
Maar het liefste wil ik dit niet doen en de breedte automatisch laten goedzetten.
Dus toen dacht ik aan javascript.
Ik lees hiermee alle ul's uit. En loop de onderliggende li's af.
Ik dacht handig te zijn en dan per ul de breedste li te zoeken en de ul dan deze breedte + eventueel extra ruimte te geven. Maar blijkbaar kun je niet de breedte uitlezen van een li als deze niet is gedefinieerd.
Weet iemand een andere manier om de ul breed genoeg te krijgen, zodat de border mooi omsluit?