Entonces sé que podemos centrar un div horizontalmente si usamos margin:0 auto;
. ¿Debería margin:auto auto;
funcionar como creo que debería funcionar? ¿Centrarlo verticalmente también?
¿Por qué tampoco vertical-align:middle;
funciona?
.black {
position:absolute;
top:0;
bottom:0;
left:0;
right:0;
background:rgba(0,0,0,.5);
}
.message {
background:yellow;
width:200px;
margin:auto auto;
padding:10px;
}
<div class="black">
<div class="message">
This is a popup message.
</div>
</div>
Respuestas:
Actualización agosto 2020
Aunque todavía vale la pena leer lo siguiente para obtener información útil, hemos tenido Flexbox desde hace algún tiempo, así que utilícelo, según esta respuesta .
No puedes usar:
vertical-align:middle
debido a que es no aplicable a los elementos en bloquemargin-top:auto
ymargin-bottom:auto
porque sus valores usados se calcularían como ceromargin-top:-50%
porque los valores de margen basados en porcentajes se calculan en relación con el ancho del bloque contenedorDe hecho, la naturaleza del flujo de documentos y los algoritmos de cálculo de la altura de los elementos hacen que sea imposible utilizar márgenes para centrar un elemento verticalmente dentro de su padre. Siempre que se cambie el valor de un margen vertical, se activará un recálculo de la altura del elemento principal (reflujo), que a su vez desencadenaría un nuevo centro del elemento original ... convirtiéndolo en un bucle infinito.
Puedes usar:
Algunas soluciones alternativas como esta que funcionan para su escenario; los tres elementos tienen que estar anidados así:
JSFiddle funciona bien según Browsershot.
fuente
#
Es un truco tener la regla con el prefijo solo interpretada por IE7 y menores. Es posible que prefiera en cambio incluir estas reglas en una hoja de estilo IE-específica mediante el uso de los comentarios condicionales , etc.position: absolute; top: 50%; transform: translateY(-50%);
también es factible y bastante popular ... (a diferencia detop:50%;margin: - $halfHeight
que no tienes que saber la altura de antemano ...)Dado que esta pregunta se hizo en 2012 y hemos recorrido un largo camino con la compatibilidad del navegador con flexboxes, sentí que esta respuesta era obligatoria.
Si la pantalla de su contenedor principal es
flex
, entonces sí ,margin: auto auto
(también conocido comomargin: auto
) funcionará para centrarlo tanto horizontal como verticalmente, independientemente de si es un elementoinline
oblock
.Tenga en cuenta que no es necesario especificar el ancho / alto de forma absoluta, como en este ejemplo, jfiddle, que usa el tamaño en relación con la ventana gráfica .
Aunque el soporte del navegador para flexboxes está en su punto más alto en el momento de la publicación, muchos navegadores aún no lo admiten o requieren prefijos de proveedor. Consulte http://caniuse.com/flexbox para obtener información actualizada sobre compatibilidad con el navegador.
Actualizar
Dado que esta respuesta recibió un poco de atención, también me gustaría señalar que no necesita especificar
margin
en absoluto si está usandodisplay: flex
y le gustaría centrar todos los elementos en el contenedor:fuente
Aquí está la mejor solución que he encontrado: http://jsfiddle.net/yWnZ2/446/ Funciona en Chrome, Firefox, Safari, IE8-11 y Edge.
Si ha declarado un
height
(height: 1em
,height: 50%
, etc.) o es un elemento en el que el navegador sabe la altura (img
,svg
ocanvas
por ejemplo), entonces todo lo que necesita para el centrado vertical es la siguiente:Por lo general, querrá especificar una
width
omax-width
para que el contenido no se extienda a lo largo de toda la pantalla / contenedor.Si está usando esto para un modal que desea siempre centrado en la ventana gráfica superponiendo otro contenido, use
position: fixed;
para ambos elementos en lugar deposition: absolute
. http://jsfiddle.net/yWnZ2/445/Aquí hay una descripción más completa: http://codepen.io/shshaw/pen/gEiDt
fuente
position: relative
al padre y el elemento se centrará dentro del padre. Hice un artículo mucho más extenso en Smashing Magazine sobre la técnica si desea leer más: coding.smashingmagazine.com/2013/08/09/…parent
... lo tengo. ¡Muchas gracias!display: table
para contenido de altura variable. De lo contrario, este método debería funcionar como se esperaba. Lea el artículo para obtener más detalles en general. También debería poder probar la vista completa en IE8 / 9 para ver si hay algún problema.Editar: es 2020, usaría flex box en su lugar.
Respuesta original:
HTML
CSS
fuente
Sé que la pregunta es de 2012, pero encontré la forma más fácil y quería compartirla.
HTML:
y CSS:
fuente
Si conoce la altura del div que desea centrar , puede colocarlo absolutamente dentro de su padre y luego establecer el
top
valor en50%
. Eso colocará la parte superior del div secundario en un 50% del camino hacia abajo de su padre, es decir, demasiado bajo. Vuelva a colocarlomargin-top
en la mitad de su altura. Así que ahora tiene el punto medio vertical del div hijo sentado en el punto medio vertical del padre, ¡centrado verticalmente!Ejemplo:
http://jsfiddle.net/yWnZ2/2/
fuente
margin-top
no se puede establecer en% relativo a la altura del elemento, por lo que terminará con una solución dependiente de las dimensionesmargin-top
.Esas dos soluciones requieren solo dos elementos anidados.
Primero - Posicionamiento relativo y absoluto si el contenido es estático (centro manual).
https://jsfiddle.net/GlupiJas/5mv3j171/
o para un diseño fluido : para el centro de contenido exacto, utilice el siguiente ejemplo:
https://jsfiddle.net/GlupiJas/w3jnjuv0/
Necesita establecer una 'altura mínima' en caso de que el contenido supere el 50% de la altura de la ventana. También puede manipular esta altura con la consulta de medios para dispositivos móviles y tabletas. Pero solo si juegas con un diseño receptivo.
Supongo que podría ir más allá y usar un script simple de JavaScript / JQuery para manipular la altura mínima o la altura fija si es necesario por alguna razón.
En segundo lugar , si el contenido es fluido , también puede usar las propiedades CSS de tabla y celda de tabla con alineación vertical y alineación de texto centrada:
y
Funciona y escala a la perfección, a menudo se utiliza como solución de diseño web receptivo con diseños de cuadrícula y consulta de medios que manipulan el ancho del objeto.
https://jsfiddle.net/GlupiJas/4daf2v36/
Prefiero la solución de tabla para el centrado exacto del contenido, pero en algunos casos el posicionamiento absoluto relativo funcionará mejor, especialmente si no queremos mantener la proporción exacta de alineación del contenido.
fuente
fuente
No hay una manera fácil de centrar div verticalmente que funcione en todas las situaciones.
Sin embargo, hay muchas formas de hacerlo según la situación.
Éstos son algunos de ellos:
También puede buscar en Google "centrado vertical CSS"
fuente
altura variable, margen superior e inferior automático
altura variable, margen superior e inferior automático
fuente
Usando Flexbox:
HTML:
CSS:
Ver resultado
fuente
fuente