175 votes

Comment puis-je centrer une div à l'intérieur d'une autre div ?

Je suppose que le #container sera centré dans #main_content. Cependant, ce n'est pas le cas. Pourquoi cela ne fonctionne-t-il pas et comment puis-je le corriger?

#main_content {
  top: 160px;
  left: 160px;
  width: 800px;
  min-height: 500px;
  height: auto;
  background-color: #2185C5;
  position: relative;
}

#container {
  width: auto;
  height: auto;
  margin: 0 auto;
  padding: 10px;
  position: relative;
}

0 votes

Essaie d'obtenir la position:relative;dans ton #container

2 votes

Sur quels navigateurs effectuez-vous vos tests? Voici un exemple avec votre code qui fonctionne bien sur la dernière version de Chrome : jsfiddle.net/mFwCp

1 votes

Horizontalement, verticalement ou les deux?

149voto

ShuklaSannidhya Points 1943

Vous devez définir la largeur du conteneur (auto ne fonctionnera pas) :

#container {
    width: 640px; /* Peut aussi être en pourcentage. */
    height: auto;
    margin: 0 auto;
    padding: 10px;
    position: relative;
}

La référence CSS par MDN l'explique parfaitement.

Consultez ces liens :

En action sur jsFiddle.

22 votes

Ceci n'est pas la solution. Cela centre uniquement le conteneur horizontalement. Pas verticalement!

10 votes

Utiliser flex avec "justify-content: center; align-items: center;" est une autre option.

0 votes

Mais vous devez afficher : flex; si vous voulez utiliser la solution mentionnée directement ci-dessus.

47voto

Jeremiah Points 124

Techniquement, votre DIV interne (#container) est centré horizontalement. La raison pour laquelle vous ne pouvez pas le dire est que avec la propriété CSS width: auto, le DIV interne s'étend à la même largeur que son parent.

Voir cet exemple: http://jsfiddle.net/UZ4AE/

#container {
    width: 50px;
    height: auto;
    margin: 0 auto;
    padding: 10px;
    position: relative;
    background-color: red;
}

Dans cet exemple, j'ai simplement défini la largeur de #container à 50px et défini l'arrière-plan en red pour que vous puissiez voir qu'il est centré.

Je pense que la vraie question est "Comment centrer des éléments horizontalement avec CSS ?" et la réponse est (roulement de tambour s'il vous plaît) : cela dépend !

Je ne ferai pas un rappel complet des nombreuses façons de centrer des choses avec CSS lorsque W3Schools le fait si bien ici : http://www.w3schools.com/css/css_align.asp mais l'idée de base est que pour les éléments de niveau bloc, vous spécifiez simplement la largeur souhaitée et définissez les marges gauche et droite à auto.

.centre {
    margin-left: auto;
    margin-right: auto;
    width: 50px;
}

Veuillez noter : Cette réponse ne s'applique qu'aux éléments de niveau bloc ! Pour positionner un élément inline, vous devrez utiliser la propriété text-align: center sur le premier parent bloc.

15voto

Zilberman Rafael Points 675

Vous pouvez centrer le float div avec ce petit code:

#div {
    width: 200px;
    height: 200px;
    position: absolute;
    left: 50%;
    top: 50%;

    margin-top: -100px;
    margin-left: -100px;
}

3 votes

Il s'agit en fait de la seule solution correcte. Tous les autres centrent à peine la division interne horizontalement. C'est ainsi que vous centrez également la division interne verticalement. La seule correction : position : absolute; // pas d'affichage...

0 votes

@PeterMortensen Je ne suis pas d'accord avec cette édition; je pense que l'auteur voulait dire 'centre float' comme simplement 'centrer' une div de manière flottante, plutôt que de centrer une div qui a déjà des propriétés de float attribuées. Bien plus important, les réponses à cette question ne devraient vraiment pas être éditées du tout.

13voto

Rohit Azad Points 15893

Maintenant, il suffit de définir votre

#main_content text-align:center et définir votre #container display:inline-block;

comme ceci :

#main_content {
    text-align: center;
}

#container{
    display: inline-block;
    vertical-align: top;
}

0 votes

Il devrait ajouter text-align: center au conteneur et display:inline-block à la division enfant ou au main_content.

3voto

jhunlio Points 1110

Essayez d'obtenir la position:relative; dans votre #container. Ajoutez une largeur exacte à #container:

#main_content {
    top: 160px;
    left: 160px;
    width: 800px;
    min-height: 500px;
    height: auto;
    background-color: #2185C5;
    position: relative;
}

#container {
    width: 600px;
    height: auto;
    margin: auto;
    padding: 10px;
}

Démo fonctionnelle

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X