28111 sujets

CSS et mise en forme, CSS3

Bonjour à tous et toutes,

J'ai créé un menu horizontal et on m'a répondu hier en m'expliquant comment centrer verticalement dans un bouton un texte sur 1 ligne ou 2 lignes avec line-height et le rajout d'une classe.

Aujourd'hui j'ai un autre problème avec ce menu, car j'aimerais qu'il soit centré dans ma page et non décalé à gauche comme aujourd'hui... J'ai bien trouvé quelques posts sur le sujet (avec une div notamment, mais je n'arrive pas à l'adapter à mon menu...)

Je vous repasse mon code pour info et modif si cele est possible :
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<style type="text/css">

body {
 font: 12px verdana, sans-serif;
 text-align : center;
 margin: 0;
 padding: 0;
}

#menu
{
    position: absolute; 
    width:85%;
	height:auto;
	list-style-type: none;
    margin:auto;
	padding:auto; 
	border: 0;
    text-align: center;
}

#menu > li
{
	float: left;
	width: 105px;
    font: 13px Garamond;
    font-weight: bold;
    margin: 1px;
	padding: 0;
	border: 0;

}
#menu li a{
	display: block;
	color: white;  
	background-color: #FF7519;
	margin: 0;
	height:25px;
	line-height:25px;
	padding: 3px 3px;
	border:1px solid #FFFFFF;
	border-radius:12px;
	box-shadow:4px 4px 8px #999;
	text-decoration: none;
}

#menu li a.ligne2{
	line-height:13px;
}

#menu li a:hover {
    background-color: rgb(175, 214, 1);
    background-color: #EEE8AA;
    font-weight: bold;
    border:1px solid;
    color: #8B4513;
}

#menu .menuderoulant
{
	display: none;
	list-style-type: none;
	margin: 0;   
	padding: 0;
	border: 0;
}
#menu .menuderoulant li
{
	float: none;
	margin: 0;
	padding: 0;
	width: 105px;
    height: 28px;
    font-weight: normal;
    border-top: 1px solid;
	border-right: 1px solid;
    border-left: 1px solid;
}
#menu .menuderoulant li a
{
	display: block;
	color: #8B4513;
	margin: 0;
	border: 0;
    border-radius:0px;
	text-decoration: none;       
    background-color: #EEE8AA;

}
#menu .menuderoulant li a:hover
{
	color: white;  
    font-weight: bold;
    background-color: #FF7519;

}

#menu .menuderoulant li a:visited {
  
    background-color: white;
}

#menu li:hover > .menuderoulant { display: block; }
</style></head>

<body><ul id="menu">

<li><a href="http://www.pierres-info.fr/la_vision/index.html">LA VISION </a>
<ul class="menuderoulant">	
</ul></li>

<li><a href="http:/www.pierres-info.fr/les_outils/index.html">LES OUTILS</a>
<ul class="menuderoulant">			      
</ul></li>

<li><a href="http:/www.pierres-info.fr/la_taille_directe/index.html" class="ligne2">LA TAILLE DIRECTE</a>
<ul class="menuderoulant">			      
</ul></li>

<li><a href="http:/www.pierres-info.fr/le_modele/index.html">LE MODELE</a>
<ul class="menuderoulant">
<li><a href="#auréole">Les croquis</a></li>
<li><a href="#auréole">Le modèle vivant</a></li>
<li><a href="#auréole">Le modelage</a></li>
<li><a href="#auréole">Le moulage</a></li>
</ul></li			      
</ul></li>

<li><a href="http:/www.pierres-info.fr/copie_compas/index.html" class="ligne2">COPIE COMPAS</a>
<ul class="menuderoulant">			      
</ul></li>

<li><a href="http:/www.pierres-info.fr/copie_machine/index.html" class="ligne2">COPIE MACHINE</a>
<ul class="menuderoulant">	
</ul></li>

<li><a href="http:/www.pierres-info.fr/le_statut_d_artiste/index.html" class="ligne2">LE STATUT D'ARTISTE</a>
<ul class="menuderoulant">			      
</ul></li>
</body></html>


Merci d'avance pour votre aide Smiley smile
Patpierre
Modérateur
Bonjour,

Sur tes <li> je te propose d'utiliser :
display:inline-block;
vertical-align:top;

plutot que float:left;
De cette façon le text-align:center; du parent va tout naturellement centrer tes <li> (attention au padding-left qui décalera le centrage : il faut l'enlever pour que ce soit bien centré.
Modérateur
Et je rajouterai même de gérer tes sous-menu en position:absolute; afin qu'ils n'ai pas d'impact sur la hauteur de ton menu (sinon ça va décaler tout le reste de ton site vers le bas à chaque fois).

Smiley murf
Un grand merci Laurent pour ta réponse.

Dans la première partie de ton message tu me dit d'utiliser :
display:inline-block;
vertical-align:top

Je l'ai fait et effectivement cela me décale mon menu sur la droite, mais il n'est toujours pas centré. Il doit y avoir quelques chose qui cloche...
Tu me dis de supprimer padding-left ... Mais je ne le vois pas dans mon code !!??...

Je redonne le code corrigé avec le display et le certical-align :

<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<style type="text/css">

body {
 font: 12px verdana, sans-serif;
 text-align : center;
 margin: 0;
 padding: 0;
}

#menu
{
    position: absolute; 
    width:85%;
	height:auto;
	list-style-type: none;
    margin:auto;
	padding:auto; 
	border: 0;
    text-align: center;
}

#menu > li
{
	display:inline-block;
    vertical-align:top;
	width: 105px;
    font: 13px Garamond;
    font-weight: bold;
    margin: 1px;
	padding: 0;
	border: 0;

}
#menu li a{
	display: block;
	color: white;  
	background-color: #FF7519;
	margin: 0;
	height:25px;
	line-height:25px;
	padding: 3px 3px;
	border:1px solid #FFFFFF;
	border-radius:12px;
	box-shadow:4px 4px 8px #999;
	text-decoration: none;
}

#menu li a.ligne2{
	line-height:13px;
}

#menu li a:hover {
    background-color: rgb(175, 214, 1);
    background-color: #EEE8AA;
    font-weight: bold;
    border:1px solid;
    color: #8B4513;
}

#menu .menuderoulant
{
	display: none;
	list-style-type: none;
	margin: 0;   
	padding: 0;
	border: 0;
}
#menu .menuderoulant li
{
	float: none;
	margin: 0;
	padding: 0;
	width: 105px;
    height: 28px;
    font-weight: normal;
    border-top: 1px solid;
	border-right: 1px solid;
    border-left: 1px solid;
}
#menu .menuderoulant li a
{
	display: block;
	color: #8B4513;
	margin: 0;
	border: 0;
    border-radius:0px;
	text-decoration: none;       
    background-color: #EEE8AA;

}
#menu .menuderoulant li a:hover
{
	color: white;  
    font-weight: bold;
    background-color: #FF7519;

}

#menu .menuderoulant li a:visited {
  
    background-color: white;
}

#menu li:hover > .menuderoulant { display: block; }
</style></head>

<body><ul id="menu">

<li><a href="http://www.pierres-info.fr/la_vision/index.html">LA VISION </a>
<ul class="menuderoulant">	
</ul></li>

<li><a href="http:/www.pierres-info.fr/les_outils/index.html">LES OUTILS</a>
<ul class="menuderoulant">			      
</ul></li>

<li><a href="http:/www.pierres-info.fr/la_taille_directe/index.html" class="ligne2">LA TAILLE DIRECTE</a>
<ul class="menuderoulant">			      
</ul></li>

<li><a href="http:/www.pierres-info.fr/le_modele/index.html">LE MODELE</a>
<ul class="menuderoulant">
<li><a href="#auréole">Les croquis</a></li>
<li><a href="#auréole">Le modèle vivant</a></li>
<li><a href="#auréole">Le modelage</a></li>
<li><a href="#auréole">Le moulage</a></li>
</ul></li			      
</ul></li>

<li><a href="http:/www.pierres-info.fr/copie_compas/index.html" class="ligne2">COPIE COMPAS</a>
<ul class="menuderoulant">			      
</ul></li>

<li><a href="http:/www.pierres-info.fr/copie_machine/index.html" class="ligne2">COPIE MACHINE</a>
<ul class="menuderoulant">	
</ul></li>

<li><a href="http:/www.pierres-info.fr/le_statut_d_artiste/index.html" class="ligne2">LE STATUT D'ARTISTE</a>
<ul class="menuderoulant">			      
</ul></li>
</body></html>


Et une image de ce que cela donne sur mon site (le menu est en bas) :
upload/56496-aspectsurs.gif
Modérateur
A utemps pour moi pour le padding-left ! C'est mon navigateur qui met bizarrement un margin-left par défaut dans le jsfiddle... bref ne t'occupe plus de ça hahaha ! Smiley lol

Par contre c'est très étrange que le menu parte sur la droite... Il doit y avoir du css d'autres éléments de ta page qui viennent mettre leurs grains de sable... cette page est en ligne ou tu dev en local ? Si elle est en ligne un lien serait le bienvenu et rendrait le debug plus simple Smiley cligne
Sinon on fera comme on peut...

J'ai regardé d'un peu plus prêt ton css... Pourquoi mettre ton menu en absolute ? Et s'il y a vraiment une raison, tu ne le positionne pas (avec top, left,bottom ou right...) c'est assez étrange.... Je te conseillerais pour TOUT tes éléments de garder au maximum le positionnement par défaut des éléments et le flux. Si tu veux qu'un élément soit avant un autre, plutôt que de le mettre après et le remonter en absolute, place le avant dans le html Smiley smile C'est l'ordre naturel des choses.

Bref également ton css est assé chargé ! Il y a plein de paramètres un peu inutiles du genre padding:auto; ou border:0; sur une div (qui n'a pas de border par défaut...) Ici un fiddle ou j'ai repris ton code et j'ai commenté tout ce qui me semble superflu. Dis moi si j'ai fait sauter des trucs dont tu as vraiment besoin Smiley smile http://jsfiddle.net/s7jrbgod/

Et pour éviter tout les padding:0; et margin:0; dans chaque classe je te conseille d'utiliser un "reset". C'est un code (compacté sur 1 seul ligne normalement) qui liste tout les éléments et remet tout à 0. Ca évite d'avoir a subir les déférences entre navigateur et de savoir exactement ce que fait ton css. Enfin je trouve.

Je me suis un peu étalé par rapport au sujet du post ^^' c'est l'effet weekend ! Désolé.
Et bien encore merci Laurent !...

Car le code que tu m'as corrigé fonctionne parfaitement sur mon site. Je ne l'ai pas encore édité mais à l'aperçu le menu est parfaitement centré, et il n'y a pas de raison que ça change.

Passe un bon weekend
Patpierre