2011-12-23 17 views
12

He visto que al desarrollar sitios web, centrar verticalmente un contenedor (de altura fija) dentro de un contenedor de altura aleatoria siempre viene como una pesadilla para el desarrollador web (al menos, yo) mientras que se trata de centrar horizontalmente un contenedor (de ancho fijo) dentro de un contenedor de ancho aleatorio, el margin:0px auto; tiende a servir una salida fácil en el modelo estándar.

Cuando las cosas pueden ser tan simples como eso, ¿por qué CSS no funciona con el margin:auto 0px; cuando se trata de centrar un contenedor de altura fija dentro de un contenedor de altura aleatoria? ¿Hay alguna razón específica para hacerlo? Gracias por sus ideas de antemano.¿Por qué el atributo automático para el margen no funciona verticalmente mientras funciona horizontalmente?

+3

http://phrogz.net/css/vertical-align/index.html ofrece una idea: "diseño HTML tradicionalmente no fue diseñado para especificar el comportamiento vertical. Por su propia naturaleza, se amplía en ancho, y el contenido fluye a una altura adecuada en función del ancho disponible. Tradicionalmente, el tamaño y el diseño horizontal es fácil; el tamaño vertical y el diseño se derivaron de eso. " – justis

+0

cierto, pero aun así, tengo la intuición de que podría mejorarse mucho. Se siente incómodo al no poder usar vertical-align: medio, a menos que el contenedor se muestre como una mesa- celular. – ptriek

+2

@jblasco: Ya había leído la página a la que se había referido, pero parece que no encontré la respuesta satisfactoria. Motivo: HTML tradicionalmente solo tenía la intención de mostrar/compartir datos de texto simples cuando se idearon en el CERN, pero luego se han producido tantos cambios cuando se compara el HTML tradicional con el HTML5. Entonces, ¿no es hora de adaptar lo que promueve la facilidad de acceso? – ikartik90

Respuesta

13

Es realmente menos de una pesadilla de lo que piensas, simplemente no uses márgenes. vertical-align es realmente lo que debe confiar para el centrado vertical de altura de fluido. Tiré juntos una demostración rápida para demostrar mi punto:

HTML:

<span></span><div id="any-height"></div> 

CSS:

* { margin: 0; padding: 0; } 
html, body { 
    height: 100%; 
    text-align: center; } 
span { 
    height: 100%; 
    vertical-align: middle; 
    display: inline-block; } 
#any-height { 
    background: #000; 
    text-align: left; 
    width: 200px; 
    height: 200px; 
    vertical-align: middle; 
    display: inline-block; } 

Ver: http://jsfiddle.net/Wexcode/jLXMS/

+1

bien, tienes un punto. la alineación vertical no es necesariamente la pesadilla, IE7 es, como era IE6. – ptriek

+0

He usado alineación vertical, pero no sirve una solución satisfactoria en la mayoría de los lugares. Motivo: el problema con 'vertical-align' es que no es compatible con todos los navegadores. Para referencia [consulte este enlace] (http://reference.sitepoint.com/css/vertical-align#compatibilitysection). Así que no hay puntos amigos. :( – ikartik90

+1

[Hay herramientas que pueden verificar si algo funciona en otros navegadores] (https://browserlab.adobe.com/en-us/index.html), por lo que no tiene que depender de gráficos que etiquetar arbitrariamente las cosas como errores ... Estoy bastante seguro de que esto funciona en todos los principales navegadores, y si está buscando una compatibilidad extendida, debe consultar [este artículo] (http://blog.mozilla.com/webdev/2009/02/20/cross-browser-inline-block /). – Wex

6

La respuesta correcta para su pregunta es que margin: auto 0 doesn No funciona de la misma manera que margin: 0 auto funciona porque width: auto no funciona de la misma manera height: auto do es.

Margen automático vertical funciona para elementos absolutamente posicionados con una altura conocida.

.parent { 
    position: relative; 
} 

.child { 
    position: absolute; 
    top: 0; right: 0; bottom: 0; left: 0; 
    width: 150px; 
    height: 150px; 
    margin: auto; 
} 
2

css ----------------

.aligncenter{ 
     display: -webkit-box; 
     display: -moz-box; 
     display: box; 
     -webkit-box-align: center; 
     -moz-box-align: center; 
     flex-align: center; 
     -webkit-box-pack: center; 
     -moz-box-pack: center; 
     flex-pack: center; 
} 

html ------------------ -------

<div class="aligncenter">

---your content appear at the middle of the parent div----

</div>

nota ----------- este trabajo clase CSS con casi todos los navegadores

Cuestiones relacionadas