Quero centralizar div
verticalmente com CSS. Não quero tabelas ou JavaScript, mas apenas CSS puro. Encontrei algumas soluções, mas todas estão sem suporte para o Internet Explorer 6.
<body>
<div>Div to be aligned vertically</div>
</body>
Como posso centralizar um div
verticalmente em todos os principais navegadores, incluindo o Internet Explorer 6?
css
cross-browser
alignment
vertical-alignment
centering
Burak Erdem
fonte
fonte
tables
layouts aqui?Respostas:
Abaixo está a melhor solução geral que eu poderia criar para centralizar vertical e horizontalmente uma caixa de conteúdo de altura fixa e largura fixa . Foi testado e está funcionando para versões recentes do Firefox, Opera, Chrome e Safari.
Veja um exemplo de trabalho com conteúdo dinâmico
Eu construí um conteúdo dinâmico para testar a flexibilidade e gostaria de saber se alguém vê algum problema com ele. Também deve funcionar bem para sobreposições centralizadas - mesa de luz, pop-up etc.
fonte
.outer {position:absolute;width:100%;height:100%}
não é necessário, eles estão aqui simplesmente para demonstrar. Tudo o que precisamos édisplay:table
se alguém está confuso como eu..outer
emiddle
ignora claramente o.inner
estilo. Não sei qual é o objetivo demargin-left
,margin-right
definido como automático, pois isso não centraliza o elemento horizontalmente ?? !!!width: 100%;
e adicionandomargin: 0 auto
a.outer
permite largura variável bem.top: 0; left 0;
está faltando, pelo menos no Chrome, que define o padrão como 1.Mais um que não consigo ver na lista:
height
deve ser declarado (consulte Altura variável )overflow: auto
para impedir a propagação de conteúdo (consulte Estouro)Fonte: Centralização horizontal e vertical absoluta em CSS
fonte
margin: auto;
A maneira mais simples seria as seguintes 3 linhas de CSS:
1) posição: relativa;
2) topo: 50%;
3) transformar: traduzirY (-50%);
A seguir está um exemplo :
fonte
height
do exteriordiv
é100%
. Então só funciona composition: absolute;
.-webkit-transform
variante em particular, que eu precisava para fazer esse método funcionar em phantomjs ... terminou horas de luta, então muito obrigado!Na verdade, você precisa de duas divs para centralização vertical. A div que contém o conteúdo deve ter largura e altura.
Aqui está o resultado
fonte
Agora, a solução flexbox é uma maneira muito fácil para navegadores modernos, então eu recomendo isso para você:
fonte
navbar
, você pode ajustar a altura usandoheight: calc(100% - 55px)
ou qualquer que seja a sua alturanavbar
.float
. Obrigado.Editar 2020: use isso somente se precisar oferecer suporte a navegadores antigos como o IE8 (que você deve recusar a fazer). Caso contrário, use o flexbox.
Este é o método mais simples que encontrei e o uso o tempo todo ( demonstração do jsFiddle aqui )
Obrigado Chris Coyier de CSS Tricks por este artigo .
O suporte começa com o IE8.
fonte
Depois de muita pesquisa, finalmente encontrei a solução definitiva. Funciona mesmo para elementos flutuantes. Exibir fonte
fonte
50%
trabalhou para mim (não-50%
)Solução Flexbox
fonte
justify-content: center
centrará itens horizontalmente bemPara centralizar a div em uma página, verifique o link do violino .
Outra opção é usar a caixa flexível, verifique o link do violino .
Outra opção é usar uma transformação CSS 3:
fonte
%
,em
s erem
s. Valores absolutos ou fixos são pixels ou pontos. O que você está se referindo é "ele funciona apenas com uma altura declarada". No entanto, embora esse método descrito por Moes exija uma altura, quando você o declara em unidades relativas, a porcentagem é a melhor, não importa quanto conteúdo esteja dentro do DIV centralizado que o DIV se expandirá verticalmente para se ajustar ao seu conteúdo. Essa é a beleza desse método. A outra coisa boa é que esse método funciona no IE8 / 9/10, caso alguém ainda precise oferecer suporte a esses navegadores.transform: translate(-50%, -50%);
técnica. Para o IE8, eu apenas deixava o topo / centro alinhados e seguia em frente.A solução mais fácil está abaixo:
fonte
Infelizmente - mas não surpreendentemente - a solução é mais complicada do que se poderia desejar. Infelizmente, você também precisará usar divs adicionais ao redor da div que deseja centralizar verticalmente.
Para navegadores compatíveis com padrões como Mozilla, Opera, Safari, etc., é necessário definir a div externa para ser exibida como uma tabela e a div interna para ser exibida como uma célula da tabela - que pode ser centralizada verticalmente. Para o Internet Explorer, você precisa posicionar a div interna absolutamente dentro da div externa e depois especificar a parte superior como 50% . As páginas a seguir explicam bem essa técnica e também fornecem alguns exemplos de código:
Centralização vertical em CSS com altura desconhecida (compatível com Internet Explorer 7)(não está mais ativo)Também existe uma técnica para fazer a centralização vertical usando JavaScript. O alinhamento vertical do conteúdo com JavaScript e CSS demonstra isso.
fonte
Se alguém se importa apenas com o Internet Explorer 10 (e posterior), use
flexbox
:Suporte para Flexbox: http://caniuse.com/flexbox
fonte
align-items: center;
!Uma maneira moderna de centralizar um elemento verticalmente seria usar
flexbox
.Você precisa de um pai para decidir a altura e um filho para o centro.
O exemplo abaixo centralizará uma div no centro do seu navegador. O que é importante (no meu exemplo) é definir
height: 100%
abody
ehtml
e, em seguida,min-height: 100%
para o seu recipiente.fonte
Centralizando apenas verticalmente
Se você não se importa com o Internet Explorer 6 e 7, pode usar uma técnica que envolve dois contêineres.
O recipiente externo:
display: table;
O recipiente interno:
display: table-cell;
vertical-align: middle;
A caixa de conteúdo:
display: inline-block;
Você pode adicionar qualquer conteúdo que desejar à caixa de conteúdo sem se preocupar com sua largura ou altura!
Demo:
Veja também este violino !
Centralizando horizontal e verticalmente
Se você deseja centralizar horizontal e verticalmente, também precisa do seguinte.
O recipiente interno:
text-align: center;
A caixa de conteúdo:
text-align: left;
outext-align: right;
, a menos que você queira que o texto seja centralizadoDemo:
Veja também este violino !
fonte
Relacionados: Centralizar uma imagem
fonte
É sempre aqui que eu vou quando tenho que voltar a esta questão .
Para quem não quer dar o salto:
position:relative
ouposition:absolute
.position:absolute
etop:50%
no contêiner filho para mover a parte superior para baixo até o meio do pai.Um exemplo disso no código:
fonte
Usando a propriedade flex do CSS.
ou usando
display: flex;
emargin: auto;
Mostrar snippet de código
mostrar centro de texto
Mostrar snippet de código
Usando porcentagem (%) de altura e largura.
Mostrar snippet de código
fonte
Acabei de escrever este CSS e, para saber mais, consulte: Este artigo com alinhamento vertical qualquer coisa com apenas 3 linhas de CSS .
fonte
Grade CSS
fonte
Para recém-chegados, tente
fonte
div
.<div style="display:flex"><div style="margin:auto">Inner</div></div>
A resposta de Billbad funciona apenas com uma largura fixa da
.inner
div. Esta solução funciona para uma largura dinâmica, adicionando o atributotext-align: center
à.outer
div.fonte
As três linhas de código usadas
transform
funcionam praticamente em navegadores modernos e no Internet Explorer:Estou adicionando esta resposta, pois encontrei alguma incompletude na versão anterior desta resposta (e o Stack Overflow não permitirá que eu simplesmente comente).
O parente 'position' altera o estilo se a div atual estiver no corpo e não tiver uma div de contêiner. No entanto, 'fixo' parece funcionar, mas obviamente corrige o conteúdo no centro da janela de visualização
Também usei esse estilo para centralizar algumas divs de sobreposição e descobri que no Mozilla todos os elementos dessa div transformada haviam perdido suas bordas inferiores. Possivelmente um problema de renderização. Mas adicionar apenas o preenchimento mínimo a alguns deles o renderizou corretamente. O Chrome e o Internet Explorer (surpreendentemente) renderizaram as caixas sem a necessidade de preenchimento
fonte
O link a seguir apresenta uma maneira simples de fazer isso com apenas 3 linhas no seu CSS:
Alinhar verticalmente qualquer coisa com apenas 3 linhas de CSS .
Eu sei que a pergunta já tem uma resposta, mas vi utilidade no link por sua simplicidade.
fonte
Não respondendo pela compatibilidade do navegador, mas também mencionando o novo Grid e o não tão novo recurso Flexbox.
Rede
De: Mozilla - Documentação em grade - Alinhar div verticalmente
Suporte ao navegador: Suporte ao navegador de grade
CSS:
HTML:
Flexbox
Suporte ao navegador: Suporte ao navegador Flexbox
CSS:
fonte
Eu acho uma solução sólida para todos os navegadores sem usar o flexbox - "align-items: center;" é uma combinação de display: table e vertical-align: middle ;.
CSS
HTML
Versão: https://jsfiddle.net/6m640rpp/
fonte
Fiz isso com isso (altere largura, altura, margem superior e margem esquerda adequadamente):
fonte
O conteúdo pode ser facilmente centralizado usando o flexbox. O código a seguir mostra o CSS do contêiner no qual o conteúdo precisa ser centralizado:
fonte
Especialmente para divs pais com altura relativa (desconhecida), a centralização na solução desconhecida funciona muito bem para mim. Existem alguns exemplos de código muito bons no artigo.
Foi testado no Chrome, Firefox, Opera e Internet Explorer.
fonte
Apenas faça: Adicione a classe ao seu
div
:E leia este artigo para uma explicação. Nota:
Height
é necessário.fonte
Há um truque que descobri recentemente: você precisa usar
top 50%
e depois faz umtranslateY(-50%)
fonte