2010-12-11 30 views
14

Tengo un div que quiero centrar horizontal y verticalmente.¿Cómo centrar un div verticalmente?

Para el problema horizontal todo es genial, pero tengo un problema con la alineación vertical.

yo probamos este:

#parent { 
    display: table; 
} 

#child { 
    display: table-row; 
    vertical-align: middle; 
} 

pero esto no funciona.

+0

intenté google ...gracias por su ayuda – trrrrrrm

+0

verifique mi respuesta para ver si funciona para usted .. @ra_htial .... sí, una pregunta de hace siglos, pero aún una complicada que debería aclararse – juanm55

+0

posible duplicado de [Cómo centrar verticalmente un div para todos navegadores?] (http://stackoverflow.com/questions/396145/how-to-vertically-center-a-div-for-all-browsers) – Carpetsmoker

Respuesta

27

Si solo tiene que admitir navegadores que admitan transform (o sus versiones prefijadas de proveedor), use este viejo y extraño truco para alinear elementos verticalmente.

#child { 
    position: relative; 
    top: 50%; 
    transform: translateY(-50%); 
} 

Si tiene que soportar los navegadores más antiguos, se puede utilizar una combinación de éstos, sino que puede ser un dolor debido a las diferencias en la representación block vs table.

#parent { 
    display: table; 
} 

#child { 
    display: table-cell; 
    vertical-align: middle; 
} 

Si su altura es fija y que necesita para apoyar a los muy viejos, navegadores molestos ...

#parent { 
    position: relative; 
} 

#child { 
    height: 100px; 
    position: absolute; 
    top: 50%; 
    margin-top: -50px; 
} 

Si su altura no es fija, hay un workaround.

See it on jsFiddle.

+0

muchas gracias amigo, pero eso solo funciona si sé lo que es el # altura de niño ... pero no siempre es lo mismo, ¡pulgar ARRIBA! gracias por tu respuesta útil !! – trrrrrrm

+0

http://jsfiddle.net/RQznA/ verifique esto, por ejemplo, – trrrrrrm

+0

@ From.ME.to.YOU Vea la [solución provisional] (http://www.jakpsatweb.cz/css/css-vertical-center-solution. html). Desafortunadamente, IE6 + 7 hace que los contenedores adicionales sean necesarios. – alex

0

En primer lugar, tratar el marcado no table como tablas (con display: tabla y amigos) no es un navegador cruzado. No sé qué navegadores necesitas admitir, pero ciertamente IE6 no hará esto. Pero, si su navegador de destino hacer todos soporte pantalla: tabla puedo darle algunos consejos.

El enfoque de centrado vertical que está buscando (usando el diseño de la tabla) depende de tener un TD con alineación vertical: centro, y luego dentro de ese elemento de bloque único se centrará verticalmente. Así que creo que lo que desea es:

#parent { display:table-cell; vertical-align:middle; } 
#child { /* nothing necessary, assuming it's a DIV it's already display:block */ } 

Es aceptable utilizar table-cell sin table-row y mesa circundante, el navegador infiere los elementos necesarios mesa de embalaje para usted.

0

aquí es otra manera cuando no se conoce el tamaño div interior o lo que sea, puede usar% de aquí para allá para solucionar el "centrado" ....

la idea es que su valor es superior la mitad de la altura de su hijo como elemento para crear la ilusión de centrado

Aquí está el código:

<div id="parent"> 
    <div id="child"> 
      hello 
    </div> 
</div> 

y por el estilo:

#parent { 
    position: relative; 
    height: 300px; 
    width:200px; 
    background-color:green; 
} 

#child { 
    height: 50%; 
    width: 50%; 
    position:relative; 
    top:25%; 
    left:25%; 
    background-color:red; 
} 

Aquí se puede ver en acción http://jsfiddle.net/Wabxv/

+0

tenga en cuenta que esto centrará el div en el espacio disponible que le queda (si parent div tiene texto, de esta forma se centrará en el espacio restante, no en el tamaño de elemento principal ... para ese uso, posición absoluta) – juanm55

+0

Si bien este enlace puede responder a la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. – NathanOliver

+0

Corregido @NathanOliver ¡gracias por el aviso! – juanm55

3

que tiene la propiedad de los padres como, display:table y la propiedad niño como display: table-cell y vertical-align: middle trabajado para mí.

Cuestiones relacionadas