Vous pouvez utiliser line-height: 50px;
vous n'aurez pas besoin vertical-align: middle;
là.
Démo
La méthode ci-dessus échouera si vous avez plusieurs lignes, dans ce cas vous pouvez envelopper votre texte en utilisant span
et ensuite utiliser display: table-cell;
y display: table;
ainsi que vertical-align: middle;
n'oubliez pas non plus d'utiliser width: 100%;
pour #abc
Démo
#abc{
font:Verdana, Geneva, sans-serif;
font-size:18px;
text-align:left;
background-color:#0F0;
height:50px;
display: table;
width: 100%;
}
#abc span {
vertical-align:middle;
display: table-cell;
}
Une autre solution à laquelle je pense ici est d'utiliser transform
avec translateY()
donde Y
représente évidemment l'axe Y. C'est assez simple... Tout ce que vous devez faire est de définir la position des éléments à absolute
et la position ultérieure 50%
de la top
et se déplace par rapport à son axe avec une valeur négative -50%
div {
height: 100px;
width: 100px;
background-color: tomato;
position: relative;
}
p {
position: absolute;
top: 50%;
transform: translateY(-50%);
}
Démo
Notez que cela ne sera pas supporté sur les anciens navigateurs, par exemple IE8, mais vous pouvez rendre IE9 et d'autres anciennes versions de Chrome et Firefox en utilisant -ms, -moz
y -webkit
préfixes respectivement.
Pour plus d'informations sur transform
vous pouvez vous référer à aquí .