Página principal » Codificación » CSS - marginauto; - Cómo funciona

    CSS - marginauto; - Cómo funciona

    Utilizando margen: auto Centrar un elemento de bloque horizontalmente es una técnica bien conocida. Pero ¿alguna vez te has preguntado por qué o cómo funciona? Para responder a esto, primero debemos observar cómo funciona el margen: auto. También en la mezcla está lo que. auto posiblemente se puede hacer en los márgenes, si funciona para el centrado vertical, y algunos otros problemas.

    Pero primero, Que hace auto en realidad hacer?

    La definición de auto varía con elementos, tipos de elementos y contexto. En márgenes, auto puede significar una de dos cosas: ocupar el espacio disponible o 0 px. Estos dos voluntad Definir diferentes diseños para un elemento..

    "auto" ocupando espacio disponible

    Este es el uso más común del margen. auto nos encontramos a menudo. Asignando auto a los márgenes izquierdo y derecho de un elemento, ocupan el espacio horizontal disponible en el contenedor del elemento por igual, y así el elemento se centra.

    Sin embargo, esto funcionará solo para márgenes horizontales (más en el por qué después), y también no trabajará con flotado y elementos en linea y por sí mismo, también no puede trabajar en absoluto y elementos posicionados fijos (Sin embargo veremos cómo hacer que funcionen)..

    Flotador de Faux tomando espacio disponible

    Ya que auto tanto en el margen derecho como en el izquierdo ocupan el espacio "disponible" por igual, ¿qué creen que sucederá cuando el valor auto Solo se da a uno de esos.?

    Un margen izquierdo o derecho con auto ocupará todo el espacio "disponible" para que el elemento se vea como si se hubiera lavado a la derecha oa la izquierda.

    “auto” Calculado a 0px

    Como se mencionó anteriormente, auto No trabajará en elementos flotantes, en línea y absolutos. Todos estos elementos ya tienen. decidieron en sus diseños, así que no hay uso en usar auto para los márgenes y esperando que se centre al igual que.

    Eso derrotará el propósito inicial de usar algo como flotador. Por lo tanto auto Tendrá un valor de 0px en esos elementos..

    auto Tampoco funcionará en un elemento de bloque típico si no tiene un ancho. Todos los ejemplos que te mostré hasta ahora tienen anchos..

    Un ancho de valor auto tendrá 0px márgenes. El ancho de un elemento de bloque normalmente cubre su contenedor cuando está auto o 100% y por lo tanto un margen auto se computará a 0px En ese caso.

    Qué sucede con los márgenes verticales con el valor auto?

    auto tanto en el margen superior como en el inferior siempre se calcula a 0px (excepto para los elementos absolutos). La especificación W3C lo dice así:

    “Si “margen superior” o “margen inferior” es “auto”, su valor utilizado es 0 "

    El por qué, bueno, eso es hasta ahora, un misterio. Podría ser debido al flujo de página vertical típico, donde el tamaño de la página aumenta en altura. Por lo tanto, centrar un elemento verticalmente en su contenedor no lo hará aparecer centrado, en relación con la página en sí, a diferencia de cuando se hace horizontalmente (en la mayoría de los casos).

    Y tal vez por este mismo motivo, decidieron agregar una excepción para los elementos absolutos que pueden centrarse verticalmente a lo largo de la altura de toda la página..

    También podría ser debido al efecto colapso del margen (un colapso de elementos adyacentes” márgenes) que es otra excepción para los márgenes verticales.

    Sin embargo, este último parece ser un caso poco probable, ya que los elementos que no colapsan sus márgenes, como Flotadores y elementos con rebosar otro que visible, aún así asignar 0px márgenes verticales para auto.

    Centrado de elementos absolutamente posicionados

    Dado que sucede que hay una excepción para los elementos posicionados absolutamente, nosotros”usaré auto Valor para centrar uno vertical y horizontalmente. Pero antes de eso, tenemos que averiguar cuándo será margen: auto en realidad funciona como queremos en un elemento absolutamente posicionado.

    Aquí es donde entra otra especificación de W3C:

    "Si los tres de “izquierda”, “anchura”, y “Correcto” son “auto”: Primero establece cualquier “auto” valores para “margen izquierdo” y “margen derecho” a 0 ... "

    "Si ninguno de los tres es “auto”: Si ambos “margen izquierdo” y “margen derecho” son “auto”, resuelva la ecuación bajo la restricción adicional de que los dos márgenes obtienen valores iguales "

    Eso dice mucho para horizontal auto márgenes Para aprovechar espacios iguales, el valores para izquierda, anchura y Correcto no debería ser auto , su valor por defecto. Así que todo lo que tenemos que hacer es darles algo de valor en un elemento absolutamente posicionado. izquierda y Correcto debería tener iguales valores para un centrado perfecto.

    La especificación también menciona algo similar para márgenes verticales..

    “Si los tres de “parte superior”, “altura”, y “fondo” son automáticos, establecidos “parte superior” a la posición estática ... ”

    “Si ninguno de los tres son “auto”: Si ambos “margen superior” y “margen inferior” son “auto”, resuelva la ecuación bajo la restricción adicional de que los dos márgenes obtienen valores iguales ... ”

    Por lo tanto, para que un elemento absoluto sea centrado verticalmente, sus parte superior, altura, y fondo los valores no deberían ser auto.

    Ahora, combinando todo esto, esto es lo que nosotros”obtendrá:

    Conclusión

    Si alguna vez desea vaciar un elemento de su página hacia la derecha o hacia la izquierda sin los siguientes elementos que lo envuelven (como lo que sucede con flotar), recuerde que existe la opción de usar auto por márgenes.

    Convertir un elemento en absoluto para que pueda centrarse verticalmente puede no ser una gran idea. Hay otras opciones como flexbox y CSS transform que son más adecuadas para aquellos.