Ik ben voor mijn site een menu aan het maken.
Het wordt een horizontaal menu en is opgebouwd via een lijst.
Zoiets:

<ul id="menu">
<li><a href="#">home</a></li>
<li><a href="#">nieuws</a></li>
<li><a href="#">info</a></li>
<li><a href="#">blaat</a></li>
</ul>

Het probleem is dat een <li>-tag een block-tag is.
Daardoor zullen alle items onder elkaar staan en krijg je dus een verticaal menu.
Daar heb ik 2 oplossingen voor gevonden:

1. De li-tags de style display: inline; meegeven
2. De li-tags de style float: left; meegeven.

Bij 1 heb ik het probleem dat ik de <a>-tag die er in genest zit niet display: block kan meegeven (zodat ik width en height kan gebruiken in de <a>-tag) omdat de li-tag dan ook weer een blockelement wordt.

Bij 2 is het probleem dat het menu links komt te staan, en ik wil hem gecentreerd hebben.

Ik hoop dat jullie dit verhaal een beetje kunnen volgen (ik weet dat ik soms onduidelijk kan schrijven;-))
Weet iemand hier een oplossing voor?
Velen zullen blij kijken bij het zien van deze code, want dit is toch wat we al heel de tijd proberen? Nou nee, dat is het niet. DIV is kort voor division, een sectie, een gedeelte. Het is bedoelt om verschillende elementen te groeperen. Dit betekent dus niet dat je geen divs moet gebruiken, in de originele broncode van mijn bedrijf staan ze ook, zie hieronder:

...

Moet toegeven dat die code ook nog niet optimaal is, maar dat komt binnenkort goed. Nu, kijk eens naar de website van dit webdevelopmentbedrijf, ziet de <h2 /> er uit als een 'gewone' <h2 />?

Inderdaad niet. Dit komt door het gebruik van CSS. Met CSS kun je namelijk elk element stylen, niet alleen divs.

Zo kun je voor je navigatie een lijst gebruiken (en kijk nog maar eens, dat horizontale menu zonder rare bolletjes is echt een lijst!), omdat het eigenlijk een lijst met links is. Op deze manier werkt alles ook goed in speech browsers, textbrowsers en als we IE (Internet Explorer) even in quirksmode zetten, ook nog eens crossbrowser.


Nu duidelijk?;-)

[edit]en als ik div's zou gebruiken zou ik niet deze code gebruiken. Maar meer zoiets:


<div id="menu" style="text-align: center;"> 

[/edit]
Getest en werkend in IE, FF en Opera:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<html>
<head>
	<title>Horizontaal menu, gecentreerd</title>
	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
	<style type="text/css">
		ul {
			margin: 0px auto;
			width: 306px;
			list-style: none;
			padding: 0px;
		}
		li {
			float: left;
			width: 100px;
			border: 1px solid #ddd;
			margin: 0px;
			padding: 0px;
			text-align: center;
		}
	</style>
</head>

<body>
	<ul>
		<li>item1</li>
		<li>item2</li>
		<li>item3</li>
	</ul>
</body>
</html>
Jan Koehoorn schreef op 29.09.2006 17:47
Getest en werkend in IE, FF en Opera:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<html>
<head>
	<title>Horizontaal menu, gecentreerd</title>
	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
	<style type="text/css">
		ul {
			margin: 0px auto;
			width: 306px;
			list-style: none;
			padding: 0px;
		}
		li {
			float: left;
			width: 100px;
			border: 1px solid #ddd;
			margin: 0px;
			padding: 0px;
			text-align: center;
		}
	</style>
</head>

<body>
	<ul>
		<li>item1</li>
		<li>item2</li>
		<li>item3</li>
	</ul>
</body>
</html>


Hij wil met divs..
Helemaal geweldig!
Hier heb je helemaal gelijk in: code === kunst:P
Alleen 1 nadeel: Je zult iedere keer als je een item toevoegd of verwijdert de width van het ul-element moeten veranderen.
Als je daar nog een oplossing voor weet is het helemaal perfect!, maar anders pas ik dat wel gewoon iedere keer aan:O
Klopt, je moet de width van de <li> en <ul> op elkaar afstemmen. Als je die <lu> namelijk geen width meegeeft, centreert hij niet.
Djemo schreef op 29.09.2006 17:58
Hij wil met divs..

Waarom zou je dat willen als het zonder kan?
@Jan Koehoorn: Naja, dat maakt dan eigenlijk ook niet zoveel uit want ik ben van plan om het menu dynamisch te genereren uit een database, en als ik dan gewoon het aantal menuitems tel en dat keer Xaantal px doe en dat in de width zet is het ook perfect.

@Djemo: Ik geloof niet dat je mijn post boven de eerste post van Jan hebt gelezen.
Lasse schreef op 29.09.2006 18:06
@Jan Koehoorn: Naja, dat maakt dan eigenlijk ook niet zoveel uit want ik ben van plan om het menu dynamisch te genereren uit een database, en als ik dan gewoon het aantal menuitems tel en dat keer Xaantal px doe en dat in de width zet is het ook perfect.

Wat nog zou kunnen, is dat je de <ul> in een div zet die text-align: center heeft. Niet uitgeprobeerd, maar is een test waard.
Ik heb nog even iets voor je uitgezocht:

#mainmenu {
	/*float:left;*/
	width: 100%;
	vertical-align: bottom;
	background-position: bottom left;
	height: 39px;
	vertical-align: middle;
	line-height: 39px;
	text-align: left;
	text-transform: uppercase; 
	color: #ffffff; 
	font: bold 10px verdana;
	/*clear: both;*/
}

#mainmenu ul {
	margin: 0 0 0 5px;
	padding: 0;
	list-style: none;
	/*clear: both;*/
}

#mainmenu li {
	float: left;
	margin: 0;
	padding: 0;
	height: 39px !important;
	height /**/: 27px;
	height: 39px;
}

#mainmenu li #leftspacer {
	float: left;
	width: 12px;
	padding: 0;
	margin: 0;
}

#mainmenu li a {
	float: left;
                display: block;
	height: 39px !important;
	height /**/: 27px;
	height: 33px;
	text-decoration:none;
	font-weight: bold;
	color: #fff;
	line-height: 39px;
	padding: 0 8px 0 0 !important;
	padding /**/: 10px 8px 0 0;
	padding: 6px 8px 0 0;
}

#mainmenu li a img {
	vertical-align: middle;
	padding: 0 !important;
	padding /**/: 4px 0 0 0;
	padding: 4px 0 0 0;
}

#mainmenu li#active a {
	color: #000;
	height: 39px	!important;
	height /**/: 27px;
	height: 33px;
	padding: 0 8px 0 0 !important;
	padding /**/: 10px 8px 0 0;
	padding: 6px 8px 0 0;
}


Hiermee geef je de ul en li's ook een horizontale lijn. ;)
Heb t uit de bron van een site gekopieerd waar ze dat gebruikte. Ik weet niet of alles nodig is, maar het zal. :P
@ All : mooi gemaakt ik was hier ook naar opzoek voor een kleine site van mezelf :)

Reageren