Pagina inicial » Codificação » CSS - marginauto; - Como funciona

    CSS - marginauto; - Como funciona

    Usando margem: auto centralizar um elemento de bloco horizontalmente é uma técnica bem conhecida. Mas você já se perguntou por que ou como funciona? Para responder a isso, primeiro precisamos dar uma olhada em como margem: auto funciona. Também no mix é o que auto pode fazer nas margens, se funciona para centralização vertical, e alguns outros problemas.

    Mas primeiro, o que auto na verdade?

    A definição de auto varia com elementos, tipos de elementos e contexto. Nas margens, auto pode significar uma de duas coisas: ocupar o espaço disponível ou 0 px. Esses dois vão definir layouts diferentes para um elemento.

    "auto" ocupando espaço disponível

    Este é o uso mais comum de margem auto nos deparamos com freqüência. Atribuindo auto para as margens esquerda e direita de um elemento, elas ocupam o espaço horizontal disponível no contêiner do elemento igualmente - e assim o elemento fica centrado.

    No entanto, isso funcionará apenas para margens horizontais (mais porque mais tarde), e também não vai funcionar com flutuou e elementos inline e por si só, também Não pode trabalhar em absoluto e elementos posicionados fixos (no entanto, vamos ver como fazer esses trabalhos).

    Faux Float, ocupando espaço disponível

    Desde a auto nas margens direita e esquerda ocupam o espaço "disponível" igualmente, o que você acha que acontecerá quando o valor auto é dado a apenas um daqueles?

    Uma margem esquerda ou direita com auto ocupará todo o espaço "disponível" fazendo com que o elemento pareça ter sido liberado para a direita ou para a esquerda.

    “auto” Calculado para 0 px

    Como mencionado anteriormente, auto não funcionará em elementos flutuantes, inline e absolutos. Todos esses elementos já possuem decidiu em seus layouts, então não adianta usar auto para as margens e esperando que ele fique centrado apenas assim.

    Isso irá derrotar o propósito inicial de usar algo como flutuador. Conseqüentemente auto terá um valor de 0px nesses elementos.

    auto também não funcionará em um elemento de bloco típico se não tiver largura. Todos os exemplos que mostrei até agora têm larguras.

    Uma largura de valor auto terá 0px margens. A largura de um elemento de bloco normalmente cobre seu contêiner quando é auto ou 100% e, portanto, uma margem auto será computado para 0px nesse caso.

    O que acontece com as margens verticais com o valor auto?

    auto nas margens superior e inferior é sempre calculado para 0px (exceto para elementos absolutos). Especificação W3C diz assim:

    “E se “margem superior” ou “margem de fundo” é “auto”, o valor usado é 0 "

    O porquê, bem, isso é até agora um mistério. Pode ser por causa do fluxo de página vertical típico, onde tamanho da página aumenta altura-sábio. Portanto, centralizar um elemento verticalmente em seu contêiner não fará com que pareça centralizado, em relação à própria página, ao contrário de quando é feito horizontalmente (na maioria dos casos).

    E talvez seja por esse mesmo motivo, eles decidiram adicionar uma exceção para elementos absolutos que podem ser centralizados verticalmente ao longo de toda a altura da página..

    Também poderia ser por causa do efeito colapso da margem (um colapso de elementos adjacentes” margens), que é outra exceção para as margens verticais.

    No entanto, este último parece ser um caso improvável - desde elementos que não colapsam suas margens - como Floats, e elementos com transbordar outro que não seja visível, ainda atribuir 0px margens verticais para auto.

    Centrando Elementos Absolutamente Posicionados

    Como existe uma exceção para elementos absolutamente posicionados,”vou usar auto valor para centralizar um verticalmente e horizontalmente. Mas antes disso, precisamos descobrir quando margem: auto realmente funciona como queremos, em um elemento absolutamente posicionado.

    É aqui que entra outra especificação do W3C:

    "Se todos os três “esquerda”, “largura”, e “certo” está “auto”: Primeiro defina qualquer “auto” valores para “margem esquerda” e “margem direita” para 0… "

    "Se nenhum dos três é “auto”: Se ambos “margem esquerda” e “margem direita” está “auto”, resolva a equação sob a restrição extra de que as duas margens obtenham valores iguais "

    Isso praticamente diz que para horizontal auto margens para ocupar espaços iguais, o valores para esquerda, largura e certo não deveria ser auto , seu valor padrão. Então tudo o que temos a fazer é dar-lhes algum valor em um elemento absolutamente posicionado. esquerda e certo deveria valores iguais para uma centragem perfeita.

    A especificação também menciona algo similar para margens verticais.

    “Se todos os três “topo”, “altura”, e “inferior” são automáticos, definidos “topo” para a posição estática ... ”

    “Se nenhum dos três for “auto”: Se ambos “margem superior” e “margem de fundo” está “auto”, resolva a equação sob a restrição extra de que as duas margens obtenham valores iguais… ”

    Portanto, para um elemento absoluto ser centrado verticalmente, Está topo, altura, e inferior valores não devem ser auto.

    Agora, combinando tudo isso, isso é o que nós”vai ter:

    Conclusão

    Se você quiser liberar um elemento em sua página para a direita ou para a esquerda sem os elementos a seguir envolvidos (como acontece com o float), lembre-se de que há a opção de usar auto para margens.

    Converter um elemento em absoluto apenas para centralizá-lo verticalmente pode não ser uma boa ideia. Existem outras opções, como flexbox e CSS, que são mais adequadas para aqueles.