Puedes usar line-height: 50px;, no necesitarás vertical-align: middle;allí.
Manifestación
Lo anterior fallará si tiene varias líneas, por lo que en ese caso puede ajustar su texto usando spany luego usar display: table-cell;y, display: table;junto con vertical-align: middle;, no olvide usar width: 100%;para#abc
Manifestación
#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;
}
Otra solución en la que puedo pensar aquí es usar la transformpropiedad con translateY()donde Yobviamente significa Y Eje. Es bastante sencillo ... Todo lo que necesita hacer es establecer la posición de los elementos absolutey luego la posición 50%desde el topeje y traducirlo desde su eje con negativo-50%
div {
height: 100px;
width: 100px;
background-color: tomato;
position: relative;
}
p {
position: absolute;
top: 50%;
transform: translateY(-50%);
}
Manifestación
Tenga en cuenta que esto no será compatible con los navegadores más antiguos, por ejemplo, IE8, pero puede hacer IE9 y otras versiones más antiguas de Chrome y Firefox usando los prefijos -ms, -mozy -webkitrespectivamente.
Para obtener más información sobre transform, puede consultar aquí .