Możesz użyć line-height: 50px;, nie będziesz vertical-align: middle;tam potrzebować .
Próbny
Powyższe nie powiedzie się, jeśli masz wiele linii, więc w takim przypadku możesz zawinąć tekst za pomocą spani, a następnie użyć display: table-cell;i display: table;wraz z vertical-align: middle;, nie zapomnij również użyć width: 100%;dla#abc
Próbny
#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;
}
Innym rozwiązaniem, które przychodzi mi do głowy, jest użycie transformwłaściwości translateY()gdzie Yoczywiście oznacza oś Y. To całkiem proste ... Wszystko, co musisz zrobić, to ustawić pozycję elementów na absolutei później pozycję 50%od topi przesunąć od osi z ujemnym-50%
div {
height: 100px;
width: 100px;
background-color: tomato;
position: relative;
}
p {
position: absolute;
top: 50%;
transform: translateY(-50%);
}
Próbny
Pamiętaj, że nie będzie to obsługiwane w starszych przeglądarkach, na przykład IE8, ale możesz utworzyć IE9 i inne starsze wersje przeglądarek Chrome i Firefox, używając -ms, -mozi-webkit odpowiednio prefiksów .
Więcej informacji na temat transformmożna znaleźć tutaj .