Je sais que le réglage margin: 0 auto;
d'un élément est utilisé pour le centrer (gauche-droite). Cependant, je sais que l'élément et son parent doivent répondre à certains critères pour que la marge automatique fonctionne, et je n'arrive jamais à faire le bon choix.
Ma question est donc simple: quelles propriétés CSS doivent être définies sur un élément et son parent pour margin: 0 auto;
centrer l'enfant de gauche à droite?
margin: 0 auto;
correctement qu'en mode standard, vous avez donc besoin d'un doctype (comme si vous n'en aviez pas besoin auparavant).Réponses:
Du haut de ma tête:
display: block
oudisplay: table
Du haut de la tête des autres:
width
qui n'est pasauto
2Notez que toutes ces conditions doivent être vraies pour que l'élément soit centré pour qu'il fonctionne.
1 Il y a une exception à cela: si votre élément fixe ou absolument positionné a
left: 0; right: 0
, il sera centré avec des marges automatiques .2 Techniquement,
margin: 0 auto
fonctionne avec une largeur automatique, mais la largeur automatique a priorité sur les marges automatiques, et les marges automatiques sont mises à zéro en conséquence, donnant l'impression qu'elles "ne fonctionnent pas".la source
ol start
attribut me manque (et il n'est pas possible de retirer dans Markdown) :(Du haut de ma tête, il a besoin d'un
width
. Vous devez spécifier la largeur du conteneur que vous centrez (pas la largeur parent).la source
Règle complète pour CSS:
display: block
ETwidth
pas automatique) OUdisplay: table
float: none
position: relative
la source
Du haut de ma tête, si l'élément n'est pas un élément de bloc - faites-le.
puis donnez-lui une largeur.
la source
Cela fonctionnera également avec display: table - une propriété d'affichage utile dans ce cas car elle ne nécessite pas de largeur. (Je sais que ce message a 5 ans, mais il est toujours pertinent pour les passants;)
la source
Du haut de la tête de mon chat, assurez-
div
vous que celui que vous essayez de centrer n'est pas réglé surwidth: 100%
.Si c'est le cas, alors les règles établies sur les divs enfants seront ce qui importera.
la source
Veuillez consulter cet exemple rapide que j'ai créé jsFiddle . Espérons que c'est facile à comprendre. Vous pouvez utiliser un
wrapper
div avec la largeur du site pour centrer l'alignement. La raison que vous devez mettrewidth
est que le navigateur sait que vous n'allez pas pour une mise en page liquide.la source
Voici ma suggestion:
la source
Il est peut-être intéressant que vous n'ayez pas à spécifier la largeur d'un
<button>
élément pour le faire fonctionner - assurez-vous simplement qu'il adisplay:block
: http://jsfiddle.net/muhuyttr/la source
Pour quiconque vient de frapper cette question et ne peut pas résoudre
margin: 0 auto
, voici quelque chose que j'ai découvert que vous pourriez trouver utile: untable
élément sans largeur spécifiée doit avoirdisplay: table
et pasdisplay: block
pourmargin: auto
faire du travail. Cela peut être évident pour certains, car la combinaison dedisplay: block
et lawidth
valeur par défaut donnera une table qui se développe pour remplir son conteneur, mais si vous voulez que la table prenne sa largeur "naturelle" et soit centrée, vous avez besoindisplay: table
la source
display: block
ne remplira pas la condition 4 de la réponse acceptée)margin: 0 auto
) et je ne pouvais pas non plus spécifier la largeur du tableau, car son contenu pouvait avoir des largeurs différentes. Dans ce cas, la seule solution qui fonctionne (c.-à-d. Rend la table normale mais la centre) n'est pas une règle de largeur,display: table
etmargin: 0 auto