FORUM Tom's Hardware » Programmation » HTML / Javascript » Centrer un menu <ul>
 

Centrer un menu <ul>

Il y a 386 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici
Ajouter une réponse



 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : Centrer un menu <ul>
 
85x85 : le comble du ridicule :o
Plus d'informations

Bonjour,
Je galère pour centrer mon menu <ul>. J'ai beau le mettre dans une box à laquelle j'impose le centrage de son contenu, rien à faire. J'ai meme essayé de le mettre dans une case de tableau et lui dire de me centrer tout ca, rien à y faire non plus. Je ne sais plus quoi faire !!!
Merci.


---------------
GLOIRE A :o | Trompi PPC-IDN
n00b intergalactique invincible :o
MEMBRE DU GROUPUSCULE DES AVATARS EN COLERE [:dartyduck:6]

Inside my own Second Life

Code :
  1. ul {
  2.   display: block; // peut être utile pour le centrage avec des marges latérales à 'auto'
  3.   margin: 0 auto; // marges haut / bas à '0' (par exemple) et gauche / droite à 'auto'
  4.   }


Ainsi, il sera centré dans ta box.. Après, ce n'est qu'une piste et en CSS il faut parfois bidouiller, vu que tous les objets sont plus ou moins interdépendants ;).
 
Mais le mieux reste de mettre ta liste <ul> dans une box <div> qui, elle, se chargera du centrage.. Vu que le <div> est un conteneur "générique" qui peut se comporter autant en 'display: bloc' qu'en 'display: inline'.. Sans compter que ça passera bien mieux côté validité du code : <ul> n'est pas "naturellement" un conteneur à son sens direct : c'est plutôt un délimiteur, un peu comme d'autres du style <a>, <form> etc.....
 
Code XHTML :

Code :
  1. <div>
  2.   <ul>
  3.     <li>item 1</li>
  4.     <li>item 2</li>
  5.   </ul>
  6. </div>


CSS correspondante :

Code :
  1. div {  // ici, c'est le <div> qui "porte" le centrage
  2.   display: block;
  3.   margin: 0 auto;
  4.   width: xxxx; // la largeur voulue pour ta liste <ul>
  5.   }


Il n'y a que l'ancien IE 5.x qui ne sait pas gérer ce type de centrage et qui applique l'alignement du texte à tout contenu (parfois très marrant !).. Mais IE 5.x est en passe de devenir franchement marginal et ne reste en vigueur que sur des ordis qui n'ont pas effectué la mise à niveau vers IE 6 (dans certaines entreprises chez lesquelles certaines applis "maison" ne sont pas toujours certifiées 100% OK avec IE 6, par exemple : quelques antiques postes sous Win98 ou des plus récents le plus souvent avec Win2000pro ; beaucoup moins chez les particuliers qui, même avec Win98 ou Me, appliquent Windows Update le plus souvent de manière automatique)..
 
:jap:


Message édité par Johan_et_P irlouit le 25-08-2006 à 22:22:40

---------------
Retrouvez moi sur mon blog : http://www.nicolasullern.net/leblog/
Et aussi sur :
http://www.linkedin.com/in/nicolasullern
http://www.viadeo.com/fr/profile/nicolas.ullern
http://www.copaing.net/johanpirlouit/
85x85 : le comble du ridicule :o
Plus d'informations

L'ajout de "auto" ne fonctionne pas. Je t'explique: mon menu <ul> est contenu dans une boite <div id="menu"> et dont voici le code.

Code :
  1. #menu {
  2.     margin: 0;
  3.     padding: 3px 0 0 0;
  4.     width: 100%;
  5.     height: 22px;
  6.     color: 3FFF;
  7.     font-size: 12px;
  8.     font-weight: normal;
  9.     position: absolute;
  10.     liste-style-type: none;
  11.     border-bottom: 1px solid #000;
  12.     background: #F00;
  13. }
  14. #menu ul {
  15.     margin: 0;
  16.     padding: 0;
  17.     list-style-type: none;
  18.     float: left;
  19. }
  20. #menu li {
  21.     margin: 0;
  22.     padding: 0;
  23.     width: 9em;
  24.     float: left;
  25.     text-align: center;
  26.     list-style-type: none;
  27. }
  28. #menu ul li {
  29.     margin: 0 1em 0 0;
  30.     padding: 0;
  31.     color: #FFF;
  32.     float: left;
  33.     text-align: center;
  34.     background: #F00;
  35. }
  36. #menu ul li ul {
  37.     margin: 0;
  38.     padding: 0;
  39.     width: 9em;
  40.     position: absolute;
  41.     list-style-type: none;
  42.     display: none;
  43. }
  44. #menu ul li ul li {
  45.     margin: 0;
  46.     padding: 0 1px 0 0;
  47.     width: 9em;
  48.     display: block;
  49.     list-style-type: none;
  50.     background: #F00;
  51. }
  52. #menu ul li:hover ul {
  53.     display: block;
  54. }
  55. #menu ul li:hover ul, #menu ul li ul:hover {
  56.     display: block;
  57. }
  58. #menu a, #menu a:active, #menu a:visited {
  59.     margin: 0;
  60.     padding: 0;
  61.     display: block;
  62.     width: 9em;
  63.     color: #FFF;
  64.     text-decoration: none;
  65.     height: 17px;
  66.     border: 1px solid #FFF;
  67. }
  68. #menu a:hover {
  69.     margin: 0;
  70.     padding: 0;
  71.     text-decoration: none;
  72.     color: #000;
  73.     background: #FFF;
  74.     border: 1px solid #000;
  75. }


Ou est mon erreur?


---------------
GLOIRE A :o | Trompi PPC-IDN
n00b intergalactique invincible :o
MEMBRE DU GROUPUSCULE DES AVATARS EN COLERE [:dartyduck:6]
Inside my own Second Life

J'en ai oublié un morceau : pour que le paramètre 'auto' fonctionne avec l'attribut 'margin', il faut que le conteneur et l'objet contenu aient chacun des dimensions latérales définies, ou au moins l'objet contenu et que sa largeur soit inférieure à celle de son conteneur.. Sinon, le contenu prend la largeur du conteneur, c'est le principe de l'héritage des propriétés..
 
Et gare aux 'margin: 0;' qui se promènent ici et là : en plus du principe de l'héritage, les règles CSS sont additives et un objet peut être défini à travers autant de règles et de feuilles CSS qu'il peut parfois être nécessaire.. Dans tes règles CSS, tu en as 2 qui risquent d'être en conflit : #Menu li et #Menu ul li. C'est à priori le même objet, puisqu'un <li> ne peut être contenu que dans un <ul> ou un <ol>..
 
De plus, la règle 'float' ne permet aucun centrage ou autre : elle "retire" l'objet du flux principal (comme le ferait 'position: absolute;') et le colle sans conditions à gauche ou à droite.. La règle 'margin' fonctionne, mais pas le paramètre 'auto'.. Le truc "en plus" du 'float' sur le 'position: absolute;', c'est que le 'float' provoque le décalage du contenu voisin dans la box.. Pour le reste, il se comporte pareil..
 
Mais comme 'float' est de la famille des 'position: absolute;', son abus pour du positionnement peu provoquer des misères au niveau de la hauteur du bloc conteneur : si le contenu dans le flux "normal" est insuffisant et que le conteneur n'a pas de hauteur définie (recommandé pour des blocs adaptables au contenu), l'objet en 'float' va dépasser du conteneur et les objets qui suivent ce conteneur seront de toutes façons positionnés par rapport au conteneur, ignorant le 'float'.. Sauf que IE ne fait pas tout à fait ça : il n'isole pas complètement le 'float' comme le veut la recommendation CSS.. Le soucis est flagrant avec tous les navigateurs respectueux des recommendations..
 
Donc, pour ton <ul>, essaie de ne pas mettre pas de règle 'float' et essaie le 'margin: 0 auto;' à la place..
 
:jap:


---------------
Retrouvez moi sur mon blog : http://www.nicolasullern.net/leblog/
Et aussi sur :
http://www.linkedin.com/in/nicolasullern
http://www.viadeo.com/fr/profile/nicolas.ullern
http://www.copaing.net/johanpirlouit/

Aller à :
Ajouter une réponse
  FORUM Tom's Hardware » Programmation » HTML / Javascript » Centrer un menu <ul>
 

Annonces Google
Publicité