Me había estado estrujando el cerebro creando una alineación vertical en CSS usando lo siguiente
.base{
background-color:green;
width:200px;
height:200px;
overflow:auto;
position:relative;
}
.vert-align{
padding-top:50%;
height:50%;
}
<!-- and used the following div structure. -->
<div class="base">
<div class="vert-align">
Content Here
</div>
</div>
Si bien esto parecía funcionar para este caso, me sorprendió que cuando aumentaba o disminuía el ancho de mi div base, la alineación vertical se rompería. Esperaba que cuando estableciera la propiedad padding-top, tomaría el relleno como un porcentaje de la altura del contenedor principal, que es la base en nuestro caso, pero el valor anterior del 50 por ciento se calcula como un porcentaje del anchura. :(
¿Hay alguna manera de establecer el relleno y / o el margen como un porcentaje de la altura, sin recurrir al uso de JavaScript?
fuente
top
funciona muy bien para cambiar el tamaño según la altura del navegador / ventana. ¿Qué tal tener un div debajo de ese div? ¿Cómo puedeclear
el segundo div estar debajo del div que se desplaza hacia abajo por untop:50%
??top: 50%
no es muy útil si necesita alinear los contenidos por su propio centro.Una respuesta a una pregunta ligeramente diferente: puede usar
vh
unidades para rellenar elementos en el centro de la ventana gráfica :fuente
vh
es casi lo mismo que los porcentajes ... incluso peor en algunos casos. Esta respuesta es irrelevante para la preguntaAquí hay dos opciones para emular el comportamiento necesario. No es una solución general, pero puede ayudar en algunos casos. El espacio vertical aquí se calcula sobre la base del tamaño del elemento externo, no de su elemento primario, pero este tamaño en sí mismo puede ser relativo al elemento primario y de esta manera el espacio también será relativo.
Primera opción: usar pseudoelementos, aquí el espaciado vertical y horizontal es relativo al exterior. Manifestación
Mover el espacio horizontal al elemento externo lo hace relativo al padre del exterior. Manifestación
Segunda opción: usar posicionamiento absoluto. Manifestación
fuente
Para hacer que el elemento secundario se posicione absolutamente desde su elemento primario, debe establecer la posición relativa en el elemento primario Y la posición absoluta en el elemento secundario.
Luego, en el elemento hijo, 'top' es relativo a la altura del padre. Por lo tanto, también debe 'traducir' hacia arriba al niño el 50% de su altura.
Hay otra solución usando flex box.
Encontrará ventajas / desventajas para ambos.
fuente
Esto se puede lograr con la
writing-mode
propiedad. Si configura un elementowriting-mode
en un modo de escritura vertical, comovertical-lr
los valores porcentuales de sus descendientes para el relleno y el margen, en ambas dimensiones, se vuelven relativos a la altura en lugar del ancho.De la especificación :
La definición de tamaño en línea :
Ejemplo, con un elemento redimensionable, donde los márgenes horizontales son relativos al ancho y los márgenes verticales son relativos a la altura.
El uso de un modo de escritura vertical puede ser particularmente útil en circunstancias en las que desea que la relación de aspecto de un elemento permanezca constante, pero desea que su tamaño se escale en correlación con su altura en lugar de su ancho.
fuente
-webkit-
prefijo, pero según caniuse no ha requerido el prefijo desde Safari 11. ¿Lo probó con algún navegador en el que no funcionó?Otra forma de centrar el texto de una línea es:
o solo
fuente
Un relleno del 50% no centrará a su hijo, lo colocará debajo del centro. Creo que realmente quieres un relleno superior del 25%. ¿Tal vez te estás quedando sin espacio a medida que tu contenido se hace más alto? ¿También ha intentado configurar el margen superior en lugar de relleno superior?
EDITAR: Nevermind, dice el sitio w3schools
Entonces, ¿tal vez siempre usa ancho? Nunca me había dado cuenta.
Lo que está haciendo se puede lograr usando display: table aunque (al menos para los navegadores modernos). La técnica se explica aquí .
fuente
line-height
, es decir, hacer que la altura de la línea sea de 200 px?Este es un error muy interesante. (En mi opinión, es un error de todos modos) ¡Buen descubrimiento!
En cuanto a cómo configurarlo, recomendaría la respuesta de Camilo Martin. Pero en cuanto a por qué , me gustaría explicar esto un poco si no les importa.
En las especificaciones de CSS encontré:
... lo cual es raro, pero está bien.
Entonces, con un padre
width: 210px
y un hijopadding-top: 50%
, obtengo un valor calculado / calculado depadding-top: 96.5px
, que no es el esperado105px
.Esto se debe a que en Windows (no estoy seguro acerca de otros sistemas operativos), el tamaño de las barras de desplazamiento comunes es por defecto
17px × 100%
(o100% × 17px
para las barras horizontales). Esos17px
se restan antes de calcular el50%
, por lo tanto50% of 193px = 96.5px
.fuente