En primer lugar, tenga en cuenta que vertical-align
solo es aplicable a celdas de tabla y elementos de nivel en línea.
Hay dos formas de lograr alineaciones verticales que pueden o no satisfacer sus necesidades. Sin embargo, te mostraré dos métodos de mis favoritos:
1. Usando transform
ytop
.valign {
position: relative;
top: 50%;
transform: translateY(-50%);
/* vendor prefixes omitted due to brevity */
}
<div style="position: absolute; left: 50px; top: 50px;">
<div style="text-align: left; position: absolute;height: 56px;background-color: pink;">
<div class="valign" style="background-color: lightblue;">test</div>
</div>
</div>
El punto clave es que un valor de porcentaje en top
es relativo al del height
bloque contenedor; Mientras que un valor porcentual en transform
s es relativo al tamaño del cuadro en sí (el cuadro delimitador).
Si experimenta problemas de representación de fuente (fuente borrosa), la solución es agregar perspective(1px)
a la transform
declaración para que se convierta en:
transform: perspective(1px) translateY(-50%);
Vale la pena señalar que CSS transform
es compatible con IE9 + .
2. Usando inline-block
(pseudo-) elementos
En este método, tenemos dos inline-block
elementos hermanos que están alineados verticalmente en el medio por vertical-align: middle
declaración.
Uno de ellos tiene uno height
de 100%
sus padres y el otro es nuestro elemento deseado cuyo que queríamos alinear en el medio.
.parent {
text-align: left;
position: absolute;
height: 56px;
background-color: pink;
white-space: nowrap;
font-size: 0; /* remove the gap between inline level elements */
}
.dummy-child { height: 100%; }
.valign {
font-size: 16px; /* re-set the font-size */
}
.dummy-child, .valign {
display: inline-block;
vertical-align: middle;
}
<div style="position: absolute; left: 50px; top: 50px;">
<div class="parent">
<div class="dummy-child"></div>
<div class="valign" style="background-color: lightblue;">test</div>
</div>
</div>
Finalmente, debemos usar uno de los métodos disponibles para eliminar la brecha entre los elementos de nivel en línea .
position: absolute
todas partes?