Eu sei que a configuração margin: 0 auto;
de um elemento é usada para centralizá-lo (esquerda-direita). No entanto, eu sei que o elemento e seu pai devem atender a certos critérios para que a margem automática funcione, e eu nunca consigo acertar a mágica.
Portanto, minha pergunta é simples: quais propriedades CSS devem ser definidas em um elemento e em seu pai para margin: 0 auto;
que o filho fique no centro esquerdo-direito?
margin: 0 auto;
corretamente apenas no modo de padrões, assim você precisa de um doctype (como se não fosse necessário antes).Respostas:
Em cima da minha cabeça:
display: block
oudisplay: table
Em cima da cabeça de outras pessoas:
width
que não sejaauto
2Observe que todas essas condições devem ser verdadeiras se o elemento estiver centralizado para que ele funcione.
1 Há uma exceção a isso: se seu elemento fixo ou absolutamente posicionado tiver
left: 0; right: 0
, ele será centralizado com margens automáticas .2 Tecnicamente,
margin: 0 auto
funciona com uma largura automática, mas a largura automática tem precedência sobre as margens automáticas, e as margens automáticas são zeradas como resultado, fazendo parecer que elas "não funcionam".fonte
ol start
atributo (e não é possível obter no Markdown) :(Do alto da minha cabeça, ele precisa de um
width
. Você precisa especificar a largura do contêiner que você está centralizando (não a largura pai).fonte
Regra completa para CSS:
display: block
Ewidth
não automático) OUdisplay: table
float: none
position: relative
fonte
Em cima da minha cabeça, se o elemento não é um elemento de bloco - faça isso.
e depois dê uma largura.
fonte
Também funcionará com display: table - uma propriedade útil de exibição nesse caso, porque não requer que uma largura seja definida. (Eu sei que este post tem 5 anos, mas ainda é relevante para os transeuntes;)
fonte
Em cima da cabeça do meu gato, verifique se o que
div
você está tentando centralizar não está definidowidth: 100%
.Se for, as regras definidas nos divs filhos são o que importará.
fonte
Por favor, vá para este exemplo rápido que eu criei o jsFiddle . Espero que seja fácil de entender. Você pode usar uma
wrapper
div com a largura do site para alinhar ao centro. O motivo que você deve colocarwidth
é que, para que o navegador saiba que você não está optando por um layout líquido.fonte
Aqui está a minha sugestão:
fonte
Talvez seja interessante que você não precise especificar a largura de um
<button>
elemento para fazê-lo funcionar - apenas verifique se ele possuidisplay:block
: http://jsfiddle.net/muhuyttr/fonte
Para alguém que acabou de responder a essa pergunta e não conseguiu consertar
margin: 0 auto
, eis uma coisa que descobri que pode ser útil: umtable
elemento sem largura especificada deve terdisplay: table
e nãodisplay: block
paramargin: auto
poder funcionar. Isso pode ser óbvio para alguns, pois a combinação dedisplay: block
e owidth
valor padrão fornecerá uma tabela que se expande para preencher seu contêiner, mas se você deseja que a tabela pegue a largura "natural" e seja centralizada, será necessáriodisplay: table
fonte
display: block
ele não atenderá à condição 4 da resposta aceita)margin: 0 auto
) e também não pude especificar a largura da tabela, pois seu conteúdo poderia ter larguras diferentes. Nesse caso, a única solução que funciona (ou seja, processa a tabela da maneira normal, mas centraliza) não é regra de largura,display: table
emargin: 0 auto