24 Oct, 2009

CSS Horizontaal drop-down (uitklap) navigatie

Categoriën: crossbrowser |hack |IE6 |javascript |menu |Navigation |template |valid

Een crossbrowser oplossing om een multi level drop down menu te maken, alhoewel er gebruik zal gemaakt worden van browser sniffer voor Internet Explorer 6, op basis daarvan zal een HTC bestand geladen worden om :hover ook op ander elementen te laten werken voor dit multi level drop down navigatie menu.

multi-level-drop-down-menu

Download eerst deze bestanden

  1. csshover.htc (203)
  2. navdown_white.gif (212)
  3. nav_white.gif (158)

HTML IE6 sniffer

Plak volgende code je <head>

<!--[if lt IE 7]>
<style type="text/css" media="screen">
#menuh{
float:none;
}
body{
behavior:url(csshover.htc);
font-size:100%;
}
#menuh ul li{
float:left;
width: 100%;
}
#menuh a{
height:1%;
font:bold 0.7em/1.4em arial, sans-serif;
}
</style>
<![endif]-->

HTML

<div id="menuh-container">
<div id="menuh">
<ul>
	<li><a class="top_parent" href="#">Item 1</a>
		<ul>
			<li><a href="#">Sub 1:1</a></li>
			<li><a class="parent" href="#">Sub 1:2</a>
			<ul>
				<li><a href="#">Sub 1:2:1</a></li>
				<li><a href="#">Sub 1:2:2</a></li>
				<li><a href="#">Sub 1:2:3</a></li>
				<li><a href="#">Sub 1:2:4</a></li>
			</ul>
			</li>
			<li><a href="#">Sub 1:3</a></li>
			<li><a class="parent" href="#">Sub 1:4</a>
			<ul>
				<li><a href="#">Sub 1:4:1</a></li>
				<li><a href="#">Sub 1:4:2</a></li>
				<li><a href="#">Sub 1:4:3</a></li>
				<li><a href="#">Sub 1:4:4</a></li>
			</ul>
			</li>
			<li><a class="parent" href="#">Sub 1:5</a>
			<ul>
				<li><a href="#">Sub 1:5:1</a></li>
				<li><a href="#">Sub 1:5:2</a></li>
				<li><a href="#">Sub 1:5:3</a></li>
				<li><a href="#">Sub 1:5:4</a></li>
				<li><a href="#">Sub 1:5:5</a></li>
			</ul>
			</li>
			<li><a href="#">Sub 1:6</a></li>
		</ul>
	</li>
</ul>
<ul>
	<li><a class="top_parent" href="#">Item 2</a>
		<ul>
			<li><a href="#">Sub 2:1</a></li>
			<li><a class="parent" href="#">Sub 2:2</a>
			<ul>
				<li><a href="#">Sub 2:2:1</a></li>
				<li><a href="#">Sub 2:2:2</a></li>
			</ul>
			</li>
			<li><a href="#">Sub 2:3</a></li>
			<li><a class="parent" href="#">Sub 1:4</a>
			<ul>
				<li><a href="#">Sub 2:4:1</a></li>
				<li><a href="#">Sub 2:4:2</a></li>
			</ul>
			</li>
			<li><a class="parent" href="#">Sub 2:5</a>
			<ul>
				<li><a href="#">Sub 2:5:1</a></li>
				<li><a href="#">Sub 2:5:2</a></li>
				<li><a href="#">Sub 2:5:3</a></li>
				<li><a href="#">Sub 2:5:4</a></li>
				<li><a href="#">Sub 2:5:5</a></li>
			</ul>
			</li>
		</ul>
	</li>
</ul>
<ul>
	<li><a class="top_parent" href="#">Item 3</a>
		<ul>
			<li><a class="parent" href="#">Sub 3:2</a>
			<ul>
				<li><a href="#">Sub 3:2:1</a></li>
				<li><a href="#">Sub 3:2:2</a></li>
				<li><a href="#">Sub 3:2:3</a></li>
				<li><a href="#">Sub 3:2:4</a></li>
			</ul>
			</li>
			<li><a class="parent" href="#">Sub 3:3</a>
			<ul>
				<li><a href="#">Sub 3:3:1</a></li>
				<li><a href="#">Sub 3:3:2</a></li>
				<li><a href="#">Sub 3:3:3</a></li>
				<li><a href="#">Sub 3:3:4</a></li>
			</ul>
			</li>
			<li><a class="parent" href="#">Sub 3:4</a>
			<ul>
				<li><a href="#">Sub 3:4:1</a></li>
				<li><a href="#">Sub 3:4:2</a></li>
				<li><a href="#">Sub 3:4:3</a></li>
				<li><a href="#">Sub 3:4:4</a></li>
				<li><a href="#">Sub 3:4:5</a></li>
			</ul>
			</li>
			<li><a href="#">Sub 3:5</a></li>
		</ul>
	</li>
</ul>
<ul>
	<li><a class="top_parent" href="#">Item 4</a>
		<ul>
			<li><a href="#">Sub 4:1</a></li>
			<li><a class="parent" href="#">Sub 4:2</a>
			<ul>
				<li><a href="#">Sub 4:2:1</a></li>
				<li><a href="#">Sub 4:2:2</a></li>
				<li><a href="#">Sub 4:2:3</a></li>
				<li><a href="#">Sub 4:2:4</a></li>
			</ul>
			</li>
			<li><a href="#">Sub 4:3</a></li>
			<li><a class="parent" href="#">Sub 4:4</a>
			<ul>
				<li><a href="#">Sub 4:4:1</a></li>
				<li><a href="#">Sub 4:4:2</a></li>
				<li><a href="#">Sub 4:4:3</a></li>
				<li><a href="#">Sub 4:4:4</a></li>
				<li><a href="#">Sub 4:4:5</a></li>
				<li><a href="#">Sub 4:4:6</a></li>
				<li><a href="#">Sub 4:4:7</a></li>
				<li><a href="#">Sub 4:4:8</a></li>
				<li><a href="#">Sub 4:4:9</a></li>
			</ul>
			</li>
		</ul>
	</li>
</ul>
<ul>
	<li><a href="#">Item 5</a></li>
</ul>
</div>
</div>

CSS

#menuh-container {
	position: absolute;
	top: 1em;
	left: 1em;
}
#menuh {
	font-size: small;
	font-family: arial, helvetica, sans-serif;
	width:100%;
	float:left;
	margin:2.0em;
	margin-top: 1.0em;
}
#menuh a {
	text-align: center;
	display:block;
	border: 1px solid #555;
	white-space:nowrap;
	margin:0;
	padding: 0.3em;
}
/* menu at rest */
#menuh a:link, #menuh a:visited, #menuh a:active {
	color: white;
	background-color: royalblue;
	text-decoration:none;
}
/* menu on mouse-over  */
#menuh a:hover {
	color: #fff;
	background-color: cornflowerblue;
	text-decoration:none;
}
/* attaches down-arrow to all top-parents */
#menuh a.top_parent, #menuh a.top_parent:hover {
	background-image: url(navdown_white.gif);
	background-position: right center;
	background-repeat: no-repeat;
}
/* attaches side-arrow to all parents */
#menuh a.parent, #menuh a.parent:hover {
	background-image: url(nav_white.gif);
	background-position: right center;
	background-repeat: no-repeat;
}
#menuh ul {
	list-style:none;
	margin:0;
	padding:0;
	float:left;
	width:9.0em; /* width of all menu boxes */
-/* NOTE: For adjustable menu boxes you can
comment out the above width rule.
However, you will have to add padding in the
"#menh a" rule so that the menu boxes
will have space on either side of the text -- try it */
}
#menuh li {
	position:relative;
	min-height: 1px;
	vertical-align: bottom;
}
#menuh ul ul {
	position:absolute;
	z-index:500;
	top:auto;
	display:none;
	padding: 1.0em;
	margin:-1em 0 0 -1em;
}
#menuh ul ul ul {
	top:0;
	left:100%;
}

div#menuh li:hover {
	cursor:pointer;
	z-index:100;
}
div#menuh li:hover ul ul,
div#menuh li li:hover ul ul,
div#menuh li li li:hover ul ul,
div#menuh li li li li:hover ul ul
{display:none;}
div#menuh li:hover ul,
div#menuh li li:hover ul,
div#menuh li li li:hover ul,
div#menuh li li li li:hover ul
{display:block;}

Gerelateerde Snippets

5 Reacties op "CSS Horizontaal drop-down (uitklap) navigatie"

Wim Guiking

November 18th, 2009 at 00:24

1

Mooi stukje werk!
Nu ben ik vooral benieuwd naar een variant hierop: een vertikale navigatie. Die heb ik nu op mijn site, maar de arme mensen met IE6, tja…..

eylul akay

April 1st, 2010 at 18:15

2

ik heb een probleem met mijn html site wat ik voor school moet maken, mijn submenu’s kan ik niet onder elkaar krijgen. dat lukt wel weer bij firefox maar daar gaat mijn achtergrond etc. weg

Rudi

June 3rd, 2010 at 15:28

3

Het stukje van #menuh a.parent, #menuh a.parent:hover
werkt niet bij mij :S
heb niks aan dat stukje veranderd
maar als ik over een sub menu “hover” dan gebeurt er niks aan de pijl of de background de main knoppen werken wel goed

Raymond

June 10th, 2011 at 10:16

4

1. csshover.htc (168) gedownload
2. navdown_white.gif (177) Witte pagina geen download
3. nav_white.gif (132) Witte pagina geen download

Mark

June 10th, 2011 at 16:32

5

@Raymond: je opent eigenlijk de afbeeldingen eens je geklikt hebt voor de 2 laatste downloads.
Maar inderdaad, een witte afbeelding op witte achtergrond is moeilijk te vinden.
Probeer eens rechter muis => gelinkte gegevens opslaan als … of doel opslaan als …

Reactie formulier


Advertenties

Volgende nieuwe Snippet:

  • Momenteel niks gepland.