Можно использовать line-height: 50px;, там не нужно vertical-align: middle;.
демонстрация
Вышеупомянутое не удастся, если у вас несколько строк, поэтому в этом случае вы можете обернуть свой текст, используя spanи, чем использовать display: table-cell;и display: table;вместе с vertical-align: middle;, также не забудьте использовать width: 100%;для#abc
демонстрация
#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;
}
Другое решение, которое я могу придумать, - использовать transformсвойство, translateY()где, Yочевидно, означает ось Y. Это довольно просто ... Все, что вам нужно сделать, это установить положение элемента, absoluteа затем положение 50%от topоси и перевести от оси с отрицательным-50%
div {
height: 100px;
width: 100px;
background-color: tomato;
position: relative;
}
p {
position: absolute;
top: 50%;
transform: translateY(-50%);
}
демонстрация
Обратите внимание , что это не будет поддерживаться на старых браузерах, например , IE8, но вы можете сделать IE9 и другие версии старых браузеров , хромовых и Firefox с помощью -ms, -mozи -webkitпрефиксы соответственно.
Для получения дополнительной информации transformвы можете обратиться сюда .