Bonjour,

je sais la question a été posée maintes fois mais j'ai épluché nombre de sites et forums et je n'arrive pas à obtenir le résultat escompté ...
J'ai donc un menu vertical (le même que sur alsacréations que j'ai récupéré sur css2 pratique du design web- tout mon site est actuellement en rollover javascript avec adobe imageready et un peu de code html, donc des tableaux) et j'ai comme tout le monde le soucis que lorsque le texte est sur une ligne tout va bien, s'il dépasse et se met sur deux lignes je n'ai plus d'alignement vertical. Deuxième problème lorsque j'ai un texte sur deux lignes, j'obtiens également un décalage léger de l'effet rollover. Le lien 2 avec la taille de la police dépasse et se met sur deux lignes, et par soucis de lisibilité je ne souhaite pas avoir une taille de police plus petite.
Le code :


 <!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" xml:lang="fr" lang="fr">
<head>
<title>Menu principal</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link href="menu_principal.css" rel="stylesheet" type="text/css" media="all" />
</head>
<body>
<ul>
	<li><a id="lien1" href="#"Informations générales</a></li>
	<li><a id="lien2" href="#"Informations institutionnelles</a></li>
	<li><a id="lien3" href="#">menu3</a></li>
	<li><a id="lien4" href="#">menu4</a></li>
	<li><a id="lien5" href="#">menu5</a></li>
	<li><a id="lien6" href="#">menu6</a></li>
	<li><a id="lien7" href="#">menu7</a></li>
	<li><a id="lien8" href="#">menu8</a></li>
	<!-- <li><a id="lien9" href="#">menu 9</a></li>
	<li><a id="lien10" href="#">menu10</a></li>  -->
</ul>

</body>
</html>

et le css qui va avec ....

ul, li {  /* Suppression des marges et des puces 
              des éléments <ul> et <li> */
list-style-type: none;
margin:0;
padding:0;
}
ul {
position: absolute; /* Positionnement pour IE5 et IE5.5 */
left: 25px;        /* Positionnement de l?élément <ul> 
                       par rapport à la gauche du conteneur */
top: 175px;         /* Positionnement de l?élément <ul> 
                       par rapport au sommet du conteneur */
background: transparent url(images/menu_principal_CSS.jpg) top left no-repeat; 
                    /* Arrière-plan général du menu */
height: 323px;
width: 150px;
padding-top: 0px;
text-align: center;
}
li {
display: inline;  /* Correction pour IE5 et IE5.5 */
}
li a {
border-bottom-style: solid; border-bottom-width: 1px; border-color: #32354E;
display: block;
height: 30px; 
width: 150px;
line-height: 15px;
color: #00014B; 		/*#B1B184;*/
font-size: 12px;
font-family: arial, serif;
text-decoration: none;
font-weight: bold;
font-style: italic;
vertical-align : middle; 
}

li a:hover {
color: #2F592B;				/*#033D36; */
background: transparent url(images/menu_principal_CSS.jpg) top left no-repeat;
}
a#lien1:hover {
background-position: 0% -323px;  /* Décalage de l?arrière-plan 
                                      pour chaque bouton */
}
a#lien2:hover {
background-position: 0% -354px;
}
a#lien3:hover {
background-position: 0% -385px;
}
a#lien4:hover {
background-position: 0% -416px;
}
a#lien5:hover {
background-position: 0% -447px;
}
a#lien6:hover {
background-position: 0% -478px;
}
a#lien7:hover {
background-position: 0% -509px;
}
a#lien8:hover {
background-position: 0% -540px;
}
a#lien9:hover {
background-position: 0% -571px;
}
a#lien10:hover {
background-position: 0% -602px;
}


Merci
J'ai de la difficulté à comprendre quel est ton problème, mais la correction de cette erreur dans ton code le règle-t-elle?

	<li><a id="lien1" href=[#red]"#">Infor[#black]mations générales</a></li>
	<li><a id="lien2" href=[#red]"#">Infor[#black]mations institutionnelles</a></li>
juste une erreur de copier/coller pour mettre le code sur le forum ... j'ai bien les fermetures de balises dans mon fichier ...

sinon je vais tenter de réexpliquer, ce code génère un menu, lorsque toutes les lignes sont sur une seule ligne tout va bien, les contenus de chaque "case menu" s'affichent bien centrés verticalement (le mieux même c'est de laisser dans ce cas line-height de la même hauteur que height -soit ici 30px-), lorsque le contenu d'une ligne de menu passe sur deux lignes il devient impossible de garder les contenus centrés verticalement, tout redevient aligné en haut.
J'ai bien essayé d'ajouter une classe #1ligne et #2lignes où il y aurait deux hauteurs de ligne (line-height) selon que le contenu tienne sur une ligne ou sur deux lignes (mais ça marche pas ...en tout cas j'ai pas réussi ...). J'ai cherché longuement et le problème est connu apparemment mais je n'ai pas trouvé sur le net (ni dans les bouquins à ma disposition) de solution ...

Je mets deux exemples du coup pour illustrer mon propos (cela sera peut être plus clair !)

upload/15188-uneligne.jpg

upload/15188-deuxlignes.jpg

Merci !
personne n'a donc de solution pour régler le problème de centrage vertical dans un menu ???

....
hmmm, moi je commencerais par faire deux choses :

1° passer la page au validateur et vérifier qu'il n'y a pas une erreur de balise quelque part
2° tester sans les hacks IE5 et IE5.5
Je viens de tester ton code et :

* il est valide
* les hacks IE5 ne changent pas grand chose
* Les textes des menus sont placés en haut, certes, mais quelle que soit la longueur du texte ! Même en enlevant "générales" et "constitutionnelles", c'est aligné en haut.

J'ai testé sur FF3.0.10 / Win XP Pro
mistike a écrit :
Les textes des menus sont placés en haut, certes, mais quelle que soit la longueur du texte ! Même en enlevant "générales" et "constitutionnelles", c'est aligné en haut.


Idem pour moi.
Salut,

Pour obtenir un centrage vertical quand les dimensions des éléments sont variables ou inconnues et qu'on veut un résultat compatible avec tous les navigateurs, il faut utiliser un tableau. C'est la seule solution robuste, et la plus simple, à ma connaissance et à l'heure actuelle.
bonsoir,

Le line-height peut-être aussi mis a contribution dans un cas simple graphiquement comme celui-ci .

Ceci est en admettant que l'on souhaite tous nos item de liste de même hauteur ...

donc li :

height:2.6em; et un line-height:2.6em; qui nous fait notre centrage vertical de base .

Puis li a : display:inline-block; avec une reinitialisation qui va bien du line-height a 1.2em;

Du coup , on centre bien verticalement notre balise a dans la balise li dimensionné en hauteur .

La modification du type d'affichage du lien permet de le cloisonner et de reinitialiser avantageusement son propre line-height.

Firefox 2 et inferieur ne prendra pas ce mode de formatage , on peut laisser courir , ou lui proposer le couple : display:table; (pour li) et display:table-cell; pour a .

Cette methode est plutot avantageuse quand les listes de menus sont generer par une class(script serveur) ... pas besoin donc de toucher au code pour obtenir un graphisme ponctuel.

url de test visuel pour les septiques : http://gcyrillus.free.fr/essai/ul-vertical-centrage.html

(page non testé dans ff2 et IE6 , mais il n'y a aucune raison pour que ça passe pas , c'est du css de base , qui necessite malgré tout un doctype valide Smiley smile ).

[hs 4tell= pas attendu vendredi , ça ne le merite pas ] c'est drole comme le vertical-align provoque toujours tant de confusions Smiley smile [/hs]
gc-nomade a écrit :
[hs 4tell= pas attendu vendredi , ça ne le merite pas ] c'est drole comme le vertical-align provoque toujours tant de confusions Smiley smile [/hs]
C'est vrai mais avec un nom pareil il le cherche un peu quand même ! Smiley lol