Estou tentando centralizar verticalmente um elemento span
ou div
dentro de outro div
elemento. No entanto, quando eu coloco vertical-align: middle
, nada acontece. Eu tentei alterar as display
propriedades de ambos os elementos, e nada parece funcionar.
É o que estou fazendo atualmente na minha página da web:
.main {
height: 72px;
vertical-align: middle;
border: 1px solid black;
padding: 2px;
}
.inner {
vertical-align: middle;
border: 1px solid red;
}
.second {
border: 1px solid blue;
}
<div class="main">
<div class="inner">
This box should be centered in the larger box
<div class="second">Another box in here</div>
</div>
</div>
Aqui está um jsfiddle da implementação, mostrando que ela não funciona: http://jsfiddle.net/gZXWC/
Usando CSS3:
Css:
Nota: Isso pode não funcionar nos IE antigos
fonte
inline-flex
se também de ter vários elementos seguidos dentro do elemento interno..inner { width: 100%; }
. Dessa forma, parece funcionar,.outer { display: table; } .inner { display: table-cell; vertical-align: middle; }
mas sem forçar uma largura mínima.justify-content: center;
para alinhar na horizontal, que funcionou muito bemTente isso, funciona muito bem para mim:
fonte
#element span {height:100%;display:-webkit-box;-webkit-box-pack:center;-webkit-box-align:center;}
- observe que a altura é importante para garantir que a extensão herda toda a altura do seu contêiner (provavelmente uma div), caso contrário você ainda não terá a centralização vertical!box
emdisplay
Definir a altura da linha para a mesma altura em que contém div também funcionará
DEMO http://jsfiddle.net/kevinPHPkevin/gZXWC/7/
fonte
line-height
também mudará a altura do elemento interno. b) O elemento interno ainda não está centralizado com precisão na vertical. c) Não funciona em elementos que não contêm texto, por exemplo:,<img>
ou elementos com altura fixa.Caso você não possa confiar no flexbox ... Coloque
.child
no.parent
centro. Funciona quando os tamanhos de pixel são desconhecidos (em outras palavras, sempre) e sem problemas com o IE9 + também.fonte
Você deve colocar
vertical-align: middle
o elemento interno, não o externo. Defina aline-height
propriedade no elemento externo para corresponder àheight
do elemento externo. Em seguida, definadisplay: inline-block
eline-height: normal
no elemento interno. Ao fazer isso, o texto no elemento interno será quebrado com uma altura de linha normal. Funciona no Chrome, Firefox, Safari e IE 8+Violino
fonte
line-height: normal;
edisplay:inline;
também funciona. O bônus desse método é que ele não interferetext-align:center;
, com o qual o usodisplay: table-cell;
pode criar problemas. Muitas vezes, queremos alinhar horizontalmente e verticalmente. Veja este violino editado: jsfiddle.net/br090prs/36line-height: normal
edisplay: inline-block
é para que o texto interno seja quebrado corretamente. Se você tiver certeza de que o texto na div interna nunca será quebrado, essas propriedades não serão necessárias.Usei isso para alinhar tudo no centro da div do wrapper, caso isso ajude alguém - achei mais simples:
fonte
Aqui você tem um exemplo de duas maneiras de fazer um alinhamento vertical. Eu os uso e eles funcionam muito bem. Um é usando posicionamento absoluto e o outro usando flexbox .
Exemplo de alinhamento vertical
Usando o flexbox, você pode alinhar um elemento sozinho dentro de outro elemento com o
display: flex;
usoalign-self
. Se você precisar alinhá-lo horizontalmente, poderá usaralign-items
ejustify-content
no contêiner.Se você não quiser usar o flexbox, poderá usar a propriedade position. Se você tornar o contêiner relativo e o conteúdo absoluto, o conteúdo poderá se mover livremente dentro do contêiner. Portanto, se você usar
top: 0;
eleft: 0;
no conteúdo, ele será posicionado no canto superior esquerdo do contêiner.Para alinhá-lo, basta alterar as referências superior e esquerda para 50%. Isso posicionará o conteúdo no centro do contêiner no canto superior esquerdo do conteúdo.
Portanto, você precisa corrigir isso traduzindo o conteúdo com metade do tamanho para a esquerda e a parte superior.
fonte
Aqui está um ótimo artigo sobre como alinhar veticamente. Gosto da maneira flutuante.
http://www.vanseodesign.com/css/vertical-centering/
O HTML:
E o estilo correspondente:
fonte
HTML
CSS
Definimos a div pai para exibir como uma tabela e a div filho para exibir como uma célula da tabela. Podemos então usar o alinhamento vertical na div filho e definir seu valor para o meio. Qualquer coisa dentro dessa div criança será centralizada verticalmente.
fonte
É simples. Basta adicionar
display:table-cell
na sua classe principal.Confira este jsfiddle !
fonte
Aqui está a solução mais simples e mais recente - não há necessidade de alterar nada, basta adicionar três linhas de regras CSS ao seu contêiner da div em que você deseja se concentrar. Eu amo
Flex Box
#LoveFlexBoxBônus
o
justify-content
valor pode ser definido para as seguintes opções:flex-start
, que alinhará a div filho até onde o fluxo flexível começa em seu contêiner pai. Nesse caso, ele permanecerá no topo.center
, que alinhará a div filho ao centro do contêiner pai. Isso é realmente legal, porque você não precisa adicionar uma div adicional para envolver todos os filhos para colocar o wrapper em um contêiner pai para centralizar os filhos. Por esse motivo, esse é o verdadeiro centro vertical (nocolumn
flex-direction
arquivo. Da mesma forma, se você alterar oflow-direction
pararow
, ele ficará centralizado horizontalmente.flex-end
, que alinhará a div filho até onde o fluxo flexível termina em seu contêiner pai. Nesse caso, ele será movido para o fundo.space-between
, que espalhará todos os filhos desde o início do fluxo até o final do fluxo. Se a demonstração, eu adicionei outra div filho, para mostrar que eles estão espalhados.space-around
, semelhante aspace-between
, mas com metade do espaço no início e no final do fluxo.fonte
Como
vertical-align
funciona como esperado em umtd
, você pode colocar uma única célulatable
nodiv
para alinhar seu conteúdo.Desajeitado, mas funciona até onde eu sei. Pode não ter os inconvenientes das outras soluções alternativas.
fonte
Basta colocar o conteúdo dentro de uma tabela com altura 100% e definir a altura para a div principal
fonte
Para centralizar verticalmente um elemento de amplitude ou div dentro de outra div, adicione a posição relativa à div pai e a posição absoluta à div filho. Agora, a div filho pode ser posicionada em qualquer lugar dentro da div. Exemplo abaixo centraliza horizontal e verticalmente.
css:
fonte
Essa é uma abordagem moderna e utiliza a funcionalidade CSS Flexbox. Agora você pode alinhar verticalmente o conteúdo no contêiner pai, adicionando esses estilos ao
.main
contêinerE você está pronto para ir!
fonte