Você pode usar line-height: 50px;
, você não precisará de vertical-align: middle;
lá.
Demo
O exemplo acima falhará se você tiver várias linhas, portanto, nesse caso, você pode agrupar seu texto usando span
e depois usar display: table-cell;
e display: table;
junto com vertical-align: middle;
, além disso, não se esqueça de usar width: 100%;
para#abc
Demo
#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;
}
Outra solução que posso pensar aqui é usar a transform
propriedade translateY()
onde, Y
obviamente, significa Y Axis. É bem simples ... Tudo o que você precisa fazer é definir a posição dos elementos para absolute
e depois posicionar 50%
a top
partir do eixo e traduzir com o eixo negativo-50%
div {
height: 100px;
width: 100px;
background-color: tomato;
position: relative;
}
p {
position: absolute;
top: 50%;
transform: translateY(-50%);
}
Demo
Observe que isso não será suportado em navegadores mais antigos, por exemplo, o IE8, mas você pode criar o IE9 e outras versões mais antigas do navegador Chrome e Firefox usando -ms, -moz
e -webkit
prefixos, respectivamente.
Para mais informações transform
, você pode consultar aqui .