Quiero centrar div
verticalmente con CSS. No quiero tablas ni JavaScript, sino solo CSS puro. Encontré algunas soluciones, pero a todas ellas les falta el soporte de Internet Explorer 6.
<body>
<div>Div to be aligned vertically</div>
</body>
¿Cómo puedo centrar div
verticalmente en todos los principales navegadores, incluido Internet Explorer 6?
css
cross-browser
alignment
vertical-alignment
centering
Burak Erdem
fuente
fuente
tables
diseños aquí?Respuestas:
A continuación se muestra la mejor solución completa que podría construir para centrar vertical y horizontalmente un cuadro de contenido de altura fija y ancho fijo . Fue probado y funciona para versiones recientes de Firefox, Opera, Chrome y Safari.
Ver un ejemplo de trabajo con contenido dinámico
Creé contenido dinámico para probar la flexibilidad y me encantaría saber si alguien ve algún problema con él. También debería funcionar bien para superposiciones centradas: lightbox, pop-up, etc.
fuente
.outer {position:absolute;width:100%;height:100%}
No es necesario, están aquí simplemente para demostrar. Todo lo que necesitamos esdisplay:table
, si alguien está confundido como yo..outer
emiddle
ignorar claramente el.inner
estilo y su estilo. No sé cuál es el puntomargin-left
,margin-right
establecer en auto ya que eso no centra el elemento horizontalmente.width: 100%;
y agregarmargin: 0 auto
a.outer
permite también un ancho variable.top: 0; left 0;
falta, al menos en Chrome, que establece el valor predeterminado en 1.Uno más que no puedo ver en la lista:
height
debe declararse (ver Altura Variable )overflow: auto
para evitar el derrame de contenido (ver Desbordamiento)Fuente: Centrado absoluto horizontal y vertical en CSS
fuente
margin: auto;
La forma más sencilla sería las siguientes 3 líneas de CSS:
1) posición: relativa;
2) superior: 50%;
3) transformar: traducirY (-50%);
El siguiente es un EJEMPLO :
fuente
height
de exteriordiv
es100%
. Entonces solo funciona conposition: absolute;
.-webkit-transform
variante en particular, que necesitaba para que este método funcionara en phantomjs ... ¡Terminé horas de lucha, así que gracias!En realidad, necesitas dos div para el centrado vertical. El div que contiene el contenido debe tener un ancho y un alto.
Aquí está el resultado.
fuente
Ahora la solución flexbox es una forma muy fácil para los navegadores modernos, por lo que te recomiendo esto:
fuente
navbar
, puedes ajustar la altura usandoheight: calc(100% - 55px)
o lo que sea la altura de tu alturanavbar
.float
. Gracias.Editar 2020: solo use esto si necesita admitir navegadores antiguos como IE8 (que debe negarse a hacer 😉). Si no, use flexbox.
Este es el método más simple que encontré y lo uso todo el tiempo ( jsFiddle demo aquí )
Gracias a Chris Coyier de CSS Tricks por este artículo .
El soporte comienza con IE8.
fuente
Después de mucha investigación, finalmente encontré la solución definitiva. Funciona incluso para elementos flotantes. Ver fuente
fuente
50%
funcionó para mí (no-50%
)Solución Flexbox
fuente
justify-content: center
también centrará los elementos horizontalmentePara centrar el div en una página, verifique el enlace del violín .
Otra opción es usar el cuadro flexible, verifique el enlace de violín .
Otra opción es usar una transformación CSS 3:
fuente
%
,em
syrem
s. Los valores absolutos o fijos son píxeles o puntos. A lo que te refieres es "solo funciona con una altura declarada". Sin embargo, aunque este método descrito por Moes requiere una altura, cuando lo declaras en unidades relativas, el porcentaje es el mejor, no importa cuánto contenido esté dentro del DIV centrado, ese DIV se expandirá verticalmente para ajustarse a su contenido. Esa es la belleza de este método. Lo otro bueno es que este método funciona en IE8 / 9/10 en caso de que alguien todavía necesite soportar esos navegadores.transform: translate(-50%, -50%);
técnica. Para IE8, simplemente lo dejaría alineado arriba / centro y seguir adelante.La solución más fácil está a continuación:
fuente
Desafortunadamente, pero no es sorprendente, la solución es más complicada de lo que uno desearía. También desafortunadamente, necesitará usar divs adicionales alrededor del div que desea centrado verticalmente.
Para los navegadores que cumplen con los estándares como Mozilla, Opera, Safari, etc., debe configurar el div externo para que se muestre como una tabla y el div interno para que se muestre como una celda de tabla , que luego puede centrarse verticalmente. Para Internet Explorer, debe colocar el div interno absolutamente dentro del div externo y luego especificar la parte superior como 50% . Las siguientes páginas explican bien esta técnica y también proporcionan algunos ejemplos de código:
Centrado vertical en CSS con altura desconocida (compatible con Internet Explorer 7)(ya no está activo)También hay una técnica para hacer el centrado vertical usando JavaScript. La alineación vertical del contenido con JavaScript y CSS lo demuestra.
fuente
Si alguien se preocupa solo por Internet Explorer 10 (y posterior), use
flexbox
:Soporte de Flexbox: http://caniuse.com/flexbox
fuente
align-items: center;
!Una forma moderna de centrar un elemento verticalmente sería usar
flexbox
.Necesita un padre para decidir la altura y un niño para centrar.
El siguiente ejemplo centrará un div en el centro dentro de su navegador. Lo que es importante (en mi ejemplo) es fijar
height: 100%
abody
yhtml
y luegomin-height: 100%
a su contenedor.fuente
Centrado solo verticalmente
Si no le importa Internet Explorer 6 y 7, puede usar una técnica que involucra dos contenedores.
El contenedor exterior:
display: table;
El contenedor interior:
display: table-cell;
vertical-align: middle;
El cuadro de contenido:
display: inline-block;
¡Puede agregar cualquier contenido que desee al cuadro de contenido sin preocuparse por su ancho o alto!
Manifestación:
Ver también este violín !
Centrado horizontal y verticalmente
Si desea centrar tanto horizontal como verticalmente, también necesita lo siguiente.
El contenedor interior:
text-align: center;
El cuadro de contenido:
text-align: left;
otext-align: right;
, a menos que desee que el texto esté centradoManifestación:
Ver también este violín !
fuente
Relacionado: Centrar una imagen
fuente
Esto es siempre a donde voy cuando tengo que volver a este problema .
Para aquellos que no quieren dar el salto:
position:relative
oposition:absolute
.position:absolute
ytop:50%
en el contenedor secundario para mover la parte superior hacia abajo hasta el centro del elemento primario.Un ejemplo de esto en el código:
fuente
Usando la propiedad flex de CSS.
o usando
display: flex;
ymargin: auto;
Mostrar fragmento de código
mostrar centro de texto
Mostrar fragmento de código
Usando porcentaje (%) de altura y ancho.
Mostrar fragmento de código
fuente
Acabo de escribir este CSS y para saber más, vaya a: Este artículo con vertical alinee cualquier cosa con solo 3 líneas de CSS .
fuente
CSS Grid
fuente
Para los recién llegados por favor intente
fuente
div
.<div style="display:flex"><div style="margin:auto">Inner</div></div>
La respuesta de Billbad solo funciona con un ancho fijo del
.inner
div. Esta solución funciona para un ancho dinámico agregando el atributotext-align: center
al.outer
div.fuente
El uso de las tres líneas de código
transform
funciona prácticamente en los navegadores modernos e Internet Explorer:Estoy agregando esta respuesta ya que encontré algo incompleto en la versión anterior de esta respuesta (y Stack Overflow no me permitirá simplemente comentar).
El 'posición' relativa desordena el estilo si el div actual está en el cuerpo y no tiene un contenedor div. Sin embargo, 'arreglado' parece funcionar, pero obviamente corrige el contenido en el centro de la ventana gráfica
También usé este estilo para centrar algunos divs superpuestos y descubrí que en Mozilla todos los elementos dentro de este div transformado habían perdido sus bordes inferiores. Posiblemente un problema de renderizado. Pero agregar solo el mínimo relleno a algunos de ellos lo hizo correctamente. Chrome e Internet Explorer (sorprendentemente) renderizaron las cajas sin necesidad de relleno
fuente
El siguiente enlace presenta una forma simple de hacerlo con solo 3 líneas en su CSS:
Alinee verticalmente cualquier cosa con solo 3 líneas de CSS .
Sé que la pregunta ya tiene una respuesta, sin embargo, vi la utilidad en el enlace por su simplicidad.
fuente
Sin responder por la compatibilidad del navegador, sino también mencionar la nueva cuadrícula y la no tan nueva función Flexbox.
Cuadrícula
De: Mozilla - Documentación de cuadrícula - Alinear Div verticalmente
Soporte de navegador: Soporte de navegador de cuadrícula
CSS:
HTML:
Flexbox
Soporte de navegador: Soporte del navegador Flexbox
CSS:
fuente
Creo que una solución sólida para todos los navegadores sin usar flexbox - "align-items: center;" es una combinación de display: table y vertical-align: middle ;.
CSS
HTML
‣Demo: https://jsfiddle.net/6m640rpp/
fuente
Lo hice con esto (cambie el ancho, la altura, el margen superior y el margen izquierdo en consecuencia):
fuente
El contenido puede centrarse fácilmente mediante el uso de flexbox. El siguiente código muestra el CSS para el contenedor dentro del cual se debe centrar el contenido:
fuente
Especialmente para los padres divs con altura relativa (desconocida), el centrado en la solución desconocida funciona muy bien para mí. Hay algunos ejemplos de código realmente agradables en el artículo.
Fue probado en Chrome, Firefox, Opera e Internet Explorer.
fuente
Solo hazlo: agrega la clase en tu
div
:Y lea este artículo para obtener una explicación. Nota:
Height
es necesariofuente
Hay un truco que descubrí recientemente: necesitas usar
top 50%
y luego haces untranslateY(-50%)
fuente