¿Cuál es la mejor manera de centrar verticalmente el contenido de un div cuando la altura del contenido es variable? En mi caso particular, la altura del contenedor div es fija, pero sería genial si hubiera una solución que funcione en los casos en que el contenedor también tenga una altura variable. Además, me encantaría una solución sin o con muy poco uso de hacks CSS y / o marcado no semántico.
css
vertical-alignment
jessegavin
fuente
fuente
Respuestas:
Solo agrega
a la div interior.
Lo que hace es mover el borde superior del div interno a la mitad de la altura del div externo (
top: 50%;
) y luego el div interno hacia arriba a la mitad de su altura (transform: translateY(-50%)
). Esto funcionará conposition: absolute
orelative
.Tenga en cuenta eso
transform
ytranslate
tenga prefijos de proveedor que no están incluidos por simplicidad.Codepen: http://codepen.io/anon/pen/ZYprdb
fuente
transform
las cosas relacionadas tienen el-webkit-
prefijo y ahora funciona. Así que solo como recordatorio: no olvides agregar el-webkit-
prefijo también.position: absolute
, ¿no?translate
, todo se volverá borroso al intentar manejar .5px de altura en todo.Esta parece ser la mejor solución que he encontrado para este problema, siempre que su navegador admita el
::before
pseudo elemento: CSS-Tricks: Centrarse en lo desconocido .No requiere ningún marcado adicional y parece funcionar extremadamente bien. No pude usar el
display: table
método porque lostable
elementos no obedecen a lamax-height
propiedad.fuente
.block { white-space: nowrap; font-size: 0; line-height: 0; }
y dejar el margen derecho negativo en el pseudo elemento, solo tiene que restablecer fs y lh en .centrado ... de esta manera se asegura de que el elemento se colocará correctamente incluso si es más ancho que la ventana gráfica (y no No tengo que usar el IMO un margen negativo un poco desordenado).Esto es algo que he necesitado hacer muchas veces y una solución consistente aún requiere que agregue un pequeño marcado no semántico y algunos hacks específicos del navegador. Cuando obtengamos compatibilidad con el navegador para CSS 3, obtendrá su centrado vertical sin pecar.
Para una mejor explicación de la técnica, puede consultar el artículo del que lo adapté , pero básicamente implica agregar un elemento adicional y aplicar diferentes estilos en IE y navegadores que admiten
position:table\table-cell
elementos que no son de tabla.Hay muchas formas (hacks) para aplicar estilos en conjuntos específicos de navegadores. Utilicé comentarios condicionales, pero mire el artículo vinculado anteriormente para ver otras dos técnicas.
Nota: Existen formas simples de obtener un centrado vertical si conoce algunas alturas de antemano, si está tratando de centrar una sola línea de texto o en varios otros casos. Si tiene más detalles, tírelos porque puede haber un método que no requiera hacks del navegador o marcado no semántico.
Actualización: Estamos comenzando a obtener una mejor compatibilidad del navegador para CSS3, incorporando tanto la caja flexible como las transformaciones como métodos alternativos para obtener un centrado vertical (entre otros efectos). Consulte esta otra pregunta para obtener más información sobre los métodos modernos, pero tenga en cuenta que la compatibilidad con el navegador aún es incompleta para CSS3.
fuente
Usando el selector de niños, tomé la increíble respuesta de Fadi anterior y la reduje a una sola regla CSS que puedo aplicar. Ahora todo lo que tengo que hacer es agregar el
contentCentered
nombre de la clase a los elementos que quiero centrar:CodePen bifurcado: http://codepen.io/dougli/pen/Eeysg
fuente
*
selector funcionará peor que la respuesta aceptada. Puede que no sea un problema, pero vale la pena señalarlo. stevesouders.com/blog/2009/06/18/simplifying-css-selectors> div
lugar. calendar.perfplanet.com/2011/…El mejor resultado para mí hasta ahora:
div para centrarse:
fuente
Puede usar margen automático. Con flex, el div también parece estar centrado verticalmente.
fuente
Para mí, la mejor manera de hacer esto es:
La ventaja es no tener que hacer explícita la altura
fuente
Esta es mi increíble solución para una
div
altura dinámica (porcentual).CSS
HTML
Intenta esto por ti mismo.
fuente
puede usar la pantalla flexible, como el siguiente código:
fuente