Nenhum produto encontrado nessa seleção.
Centralizar elemento na horizontal e vertical com CSS pode ser bastante complicado dependendo do estilo de layout que você está criando, principalmente se for um layout responsivo, que não tem largura fixa e deve se adaptar a qualquer tamanho de tela.
Este problema poderia ser resolvido facilmente se todos os navegadores já suportassem flexbox, porém, como não estamos no mundo dos sonhos, ainda precisamos dar suporte a navegadores mais antigos.
O método que vou explicar utiliza pseudo-elementos e a propriedade vertical-align do CSS, portanto, funciona em todos os navegadores mais utilizados (IE8 e posteriores).
Vamos ver como funciona.
Método tradicional
Para alinhar qualquer elemento na vertical e horizontal com CSS, estávamos acostumados a posicionar tal elemento de forma absoluta. É um método bastante eficiente se você souber a largura e altura do elemento que será alinhado.
Funciona basicamente assim:
- Posicione o elemento de forma absoluta;
- Configure a propriedade top e left para 50%;
- Configure as propriedades margin-left e marting-top com números negativos para a metade do tamanho do elemento.
Veja como fica em CSS:
.elemento { width: 250px; height: 150px; background: purple; position: absolute; top: 50%; left: 50%; margin-top: -75px; /* Metade da altura */ margin-left: -125px; /* Metade da largura */ }
Simplesmente isso posiciona qualquer elemento no meio do elemento pai que tiver posição relativa. Se for o body, o elemento será posicionado no meio da tela.
Veja um exemplo aqui.
Método para layout fluído ou responsivo
O problema com o método anterior é que devemos saber a largura e altura do elemento para podermos posiciona-lo no meio da tela ou do elemento pai.
Para layouts responsivos ou fluídos, podemos utilizar a propriedade vertical-align juntamente com um pseudo-elemento no elemento pai. Veja como funciona:
html, body{ height: 100%; margin: 0; padding: 0; } .elemento-pai { width: 100%; height: 100%; background: yellow; text-align: center; } /* Aqui começa o alinhamento */ .elemento-pai:before { content: ''; display: inline-block; height: 100%; vertical-align: middle; } .elemento-filho { width: 50%; height: 50%; background: red; display: inline-block; vertical-align: middle; text-align: left; }
Perceba acima que estamos utilizando a propriedade “display: inline-block”, que vai habilitar a funcionalidade da função vertical-align. Outro fato interessante é que como estamos utilizando o body para calcular a altura completa da janela, é necessário configurar o seguinte:
html, body{ height: 100%; margin: 0; padding: 0; }
Isso faz com que nossa janela tenha 100% da altura da tela.
Caso queira testar o que acabei de descrever, faça-o pelo codepen abaixo.
- Demonstração e edição: http://codepen.io/luizomf/pen/snzrB
É bem legal, da para criar modais com largura adaptável e coisas do tipo.
Concluindo
Este método funciona com a maioria dos navegadores, até mesmo no Internet Explorer 8.
Caso tenha alguma dúvida, não hesite em deixar um comentário.