Il ne centre pas l'élément verticalement car il s'agit d'un élément de niveau bloc dans le flux normal. Ainsi, le La règle suivante s'applique :
Si margin-top
ou margin-bottom
sont auto
leur valeur usuelle est de 0.
Il convient également de souligner que la règle ci-dessus s'applique également aux éléments suivants : (voir points 10.6.2 et 10.6.3 pour plus d'informations et de conditions).
- Éléments remplacés en ligne
- Éléments remplacés au niveau du bloc dans le flux normal
-
inline-block
éléments remplacés en flux normal
- Éléments remplacés flottants
- Éléments non remplacés au niveau du bloc dans le flux normal lorsque
overflow
se calcule en visible
Ceci étant dit, les éléments absolument positionnés, non remplacés et qui n'ont pas de top
, height
et bottom
valeurs de auto
constituent une exception à cette règle. Ce qui suit s'applique à partir de point 10.6.4 :
Si aucun des trois top
, height
et bottom
sont auto
et si les deux margin-top
et margin-bottom
sont auto
, résoudre l'équation sous la contrainte supplémentaire que les deux marges obtiennent des valeurs égales .
L'exemple ci-dessous montre comment un élément positionné de manière absolue est centré verticalement à l'aide de la fonction margin: auto
. Cela fonctionne parce qu'aucune des trois propriétés top
, height
et bottom
ont une valeur de auto
:
.box {
border: 1px solid red;
width: 100px;
height: 100px;
position: relative;
}
.center {
background: blue;
width: 50px;
height: 50px;
margin: auto;
position: absolute;
top: 0; right: 0;
bottom: 0; left: 0;
}
<div class="box">
<div class="center"></div>
</div>
En outre, il est sans doute utile de signaler que la règle suivante également :
Si l'un des margin-top
ou margin-bottom
est auto
résoudre l'équation pour cette valeur. Si les valeurs sont surcontraintes, ignorez la valeur de bottom
et résoudre cette valeur.
Cela signifie que si l'élément positionné de manière absolue a une valeur de margin-top
valeur de auto
et un margin-bottom
valeur de 0
(c'est-à-dire, margin: auto auto 0
), l'élément serait absolument positionné en bas par rapport au parent comme dans l'exemple ci-dessous :
.box {
border: 1px solid red;
width: 100px;
height: 100px;
position: relative;
}
.center {
background: blue;
width: 50px;
height: 50px;
margin: auto auto 0;
position: absolute;
top: 0; right: 0;
bottom: 0; left: 0;
}
<div class="box">
<div class="center"></div>
</div>
0 votes
Ce n'est pas le cas. Le cas d'utilisation pour centrer le contenu horizontalement était vraisemblablement beaucoup plus courant que pour le faire verticalement.
0 votes
@TZHX Techniquement, c'est peut centre verticalement. Voir cet exemple - jsfiddle.net/skdjhpo8
0 votes
L'alignement vertical en CSS est un mythe
2 votes
@FabioPoloni Flexbox ?
0 votes
@FabioPoloni ¯ \_ ()_/¯ Versions plus récentes d'IE soutiennent effectivement flexbox, avec certaines mises en garde.