2012-07-20 8 views
3

J'ai un en-tête div qui est fixé en haut de la fenêtre du navigateur à 100% de largeur. Dans le div de l'en-tête, il y a un div avec le texte du titre et il y a un div avec une liste horizontale. La div horizontale doit apparaître à droite du div.Comment centrer horizontalement deux div dans un div en-tête?

Voici mon CSS et HTML:

#header { 
 
    position:fixed; 
 
    top:0; 
 
    left:0; 
 
    right:0; 
 
    background-color:#333333; 
 
    padding:20px; 
 
} 
 

 
#title { 
 
    float:left; 
 
    color:#000000; 
 
    font-size:30px; 
 
    margin-right:24px; 
 
    background-color:#ffffff; 
 
    padding:8px; 
 
} 
 

 
#navigation ul { 
 
    padding:0; 
 
    margin:0; 
 
    list-style-type:none; 
 
} 
 

 
#navigation ul li { 
 
    display:inline; 
 
    margin-right:20px; 
 
    padding:3px; 
 
    background-color:#ffffff; 
 
} 
 

 
#navigation ul li a { 
 
    color:#000000; 
 
    text-decoration:none; 
 
}
<div id="header"> 
 
    <div id="title">Some Title Text</div> 
 
    <div id="navigation"><ul> 
 
    <li><a href="#">Home</a></li> 
 
    <li><a href="#">About</a></li> 
 
    <li><a href="#">Contact</a></li> 
 
    </ul></div> 
 
</div>

Donc maintenant les divs de titre et de navigation sont alignés à gauche à l'intérieur du div d'en-tête. Comment puis-je centrer horizontalement les divs de titre et de navigation?

Editer: Préférer une solution qui n'utilise pas une largeur codée en dur (par exemple width: 500px) car la taille de la liste n'est pas toujours la même.

+0

duplication possible de [centrer les divs flottants dans une autre div] (http://stackoverflow.com/questions/1269245/centering-floating-divs-within-another-div) – kay

Répondre

5

Une méthode qui fonctionne à l'évolution des largeurs de l'en-tête et/ou des deux divs (si le titre devient plus long ou plus court ou si des éléments de navigation sont ajoutés ou supprimés):

Set text-align: center sur le #header, et display: inline-block sur #title et #navigation - démo http://dabblet.com/gist/3151355

changements dans CSS:

#header { 
    position:fixed; 
    top:0; 
    left:0; 
    right:0; 
    background-color:#333333; 
    padding:20px; 
    text-align: center; /* added */ 
} 
#title { 
    color:#000000; 
    font-size:30px; 
    margin-right:24px; 
    display: inline-block; /* took out float:left and added this */ 
    background-color:#ffffff; 
    padding:8px; 
} 
#navigation { 
    display: inline-block; /* added */ 
} 

J'ai aussi ajouté #navigation ul li:last-child {margin-right:0} pour ne pas t o avoir 24px marge après le dernier élément de liste (ce qui donnerait l'impression qu'il y a plus d'espace sur le côté droit de la navigation)

+0

+1: merci Ana, ça marche parfaitement. – Zistoloen

2

Vous pouvez envelopper les divs de titre et de navigation dans un autre div, puis centrer ce div en utilisant margin: 0 auto.

HTML

<div id="header"> 
    <div id="center"> 
     <div id="title">Some Title Text</div> 
     <div id="navigation"> 
      <ul> 
      <li><a href="#">Home</a></li> 
      <li><a href="#">About</a></li> 
      <li><a href="#">Contact</a></li> 
      </ul> 
     </div> 
    </div> 
</div>​​​​​​​​ 

CSS

#center { 
    width: 500px; /* or any other width */ 
    margin: 0 auto; 
} 

JS Fiddle: http://jsfiddle.net/rJyuJ/

+0

Cela ne fonctionnera pas si vous voulez changer la largeur du menu, ou le faire dynamiquement redimensionner. –

+0

Je ne pense pas que ce soit une bonne solution car le nombre d'éléments de liste n'est pas toujours le même. Par exemple, si l'utilisateur est connecté, il peut y avoir plus d'éléments. Y at-il un moyen de le faire sans avoir à spécifier 'width: 500px'? – Ryan

+0

Voir: http://stackoverflow.com/questions/1269245/centering-floating-divs-within-another-div – JSW189

0

salut pourriez-vous s'il vous plaît essayer avec suivante pour #header css

#header { 
    position:fixed; 
    top:0; 
    left:0; 
    right:0; 
    background-color:#333333; 
    padding:20px; 
    text-align:center; 
}