Eu tenho um div
conjunto para display:block
( 90px
height
e width
) e tenho algum texto dentro.
Preciso que o texto seja alinhado no centro tanto vertical quanto horizontalmente.
Eu tentei text-align:center
, mas não faz a parte horizontal, então tentei vertical-align:middle
, mas não funcionou.
Alguma ideia?
text-align:center
que não faz a "parte vertical"?Respostas:
Se é uma linha de texto e / ou imagem, é fácil fazê-lo. Apenas use:
É isso aí. Se pode haver várias linhas, é um pouco mais complicado. Mas existem soluções em http://pmob.co.uk/ . Procure por "alinhamento vertical".
Como eles tendem a ser hacks ou adicionando divs complicados ... eu costumo usar uma tabela com uma única célula para fazê-lo ... para torná-lo o mais simples possível.
Atualização para 2020:
A menos que você precise fazê-lo funcionar em navegadores anteriores, como o Internet Explorer 10, você pode usar o flexbox. É amplamente suportado por todos os principais navegadores atuais . Basicamente, o contêiner precisa ser especificado como um contêiner flexível, juntamente com a centralização ao longo do eixo principal e transversal:
Para especificar uma largura fixa para o filho, que é chamado de "item flexível":
Exemplo: http://jsfiddle.net/2woqsef1/1/
Para reduzir o conteúdo, é ainda mais simples: basta remover a
flex: ...
linha do item flexível e ele é automaticamente encolhido.Exemplo: http://jsfiddle.net/2woqsef1/2/
Os exemplos acima foram testados nos principais navegadores, incluindo o MS Edge e o Internet Explorer 11.
Uma observação técnica se você precisar personalizá-lo: dentro do item flex, como esse item não é um contêiner flex, a maneira antiga de CSS não-flexbox funciona como esperado. No entanto, se você adicionar um item flexível adicional ao contêiner flexível atual, os dois itens flexíveis serão posicionados horizontalmente. Para colocá-los na vertical, adicione-os
flex-direction: column;
ao contêiner flex. É assim que funciona entre um contêiner flex e seus elementos filhos imediatos .Existe um método alternativo de centralizar: não especificando
center
a distribuição nos eixos principal e cruzado para o container flex, mas especifiquemargin: auto
no item flex para ocupar todo o espaço extra nas quatro direções e as margens distribuídas uniformemente tornará o item flexível centralizado em todas as direções. Isso funciona, exceto quando há vários itens flexíveis. Além disso, essa técnica funciona no MS Edge, mas não no Internet Explorer 11.Atualização para 2016/2017:
Isso pode ser feito com mais frequência
transform
e funciona bem mesmo em navegadores mais antigos, como o Internet Explorer 10 e o Internet Explorer 11. Ele suporta várias linhas de texto:Exemplo: https://jsfiddle.net/wb8u02kL/1/
Para encolher a largura:
A solução acima usou uma largura fixa para a área de conteúdo. Para usar uma largura reduzida, use
Exemplo: https://jsfiddle.net/wb8u02kL/2/
Se o suporte ao Internet Explorer 10 for necessário, o flexbox não funcionará e o método acima e o
line-height
método funcionariam. Caso contrário, o flexbox faria o trabalho.fonte
display: table-cell
propriedade para isso, FYI. Usá-lo faz com que o elemento de se comportar como uma célula da tabela e permitevertical-align: middle;
font:
com estes, certifique-se de colocá-lo à frente daline-
altura`.Técnicas comuns a partir de 2014:
Abordagem 1 -
transform
translateX
/translateY
:Exemplo aqui / Exemplo em tela cheia
Nos navegadores suportados (a maioria deles), você pode usar
top: 50%
/left: 50%
em combinação comtranslateX(-50%) translateY(-50%)
para centralizar verticalmente / horizontalmente o elemento dinamicamente.Abordagem 2 - Método Flexbox:
Exemplo aqui / Exemplo em tela cheia
Nos navegadores suportados , defina o
display
elemento de destino comoflex
e usealign-items: center
para centralização vertical ejustify-content: center
centralização horizontal. Apenas não esqueça de adicionar prefixos de fornecedores para suporte adicional ao navegador ( veja o exemplo ).Abordagem 3 -
table-cell
/vertical-align: middle
:Exemplo aqui / Exemplo em tela cheia
Em alguns casos, você precisará garantir que a altura do elemento
html
/body
esteja definida como100%
.Para o alinhamento vertical, definir o elemento pai
width
/height
a100%
e adicionedisplay: table
. Em seguida, para o elemento filho, alteredisplay
paratable-cell
e adicionevertical-align: middle
.Para centralização horizontal, você pode adicionar
text-align: center
para centralizar o texto e quaisquer outrosinline
elementos filhos. Como alternativa, você podemargin: 0 auto
assumir que o elemento estejablock
nivelado.Abordagem 4 - Absolutamente posicionado a
50%
partir do topo com deslocamento:Exemplo aqui / Exemplo em tela cheia
Essa abordagem pressupõe que o texto tenha uma altura conhecida - neste caso
18px
,. Posicione o elemento absolutamente50%
de cima, em relação ao elemento pai. Use ummargin-top
valor negativo que seja metade da altura conhecida do elemento, neste caso --9px
.Abordagem 5 - O
line-height
método (Menos flexível - não sugerido):Exemplo Aqui
Em alguns casos, o elemento pai terá uma altura fixa. Para centralização vertical, tudo o que você precisa fazer é definir um
line-height
valor no elemento filho igual à altura fixa do elemento pai.Embora essa solução funcione em alguns casos, vale a pena notar que ela não funcionará quando houver várias linhas de texto - assim .
Os métodos 4 e 5 não são os mais confiáveis. Vá com um dos primeiros 3.
fonte
table-cell
o máximo possível.Usando flexbox / CSS:
O CSS:
Retirado da dica rápida: a maneira mais simples de centralizar elementos na vertical e na horizontal
fonte
display: -ms-flexbox; -ms-flex-align: center; -ms-flex-pack: center
.text-align:center
parainline-
elementos .. como texto.Adicione a linha
display: table-cell;
ao seu conteúdo CSS para essa div.Somente as células da tabela suportam o
vertical-align: middle;
, mas você pode dar essa definição [célula da tabela] para a div ...Um exemplo ao vivo está aqui: http://jsfiddle.net/tH2cc/
fonte
position
for absoluto ou fixo. Veja: jsfiddle.net/tH2cc/1636Eu sempre uso o seguinte CSS para um contêiner, para centralizar seu conteúdo horizontalmente e verticalmente.
Veja em ação aqui: https://jsfiddle.net/yp1gusn7/
fonte
Você pode tentar um código muito fácil para isso:
Link do Codepen: http://codepen.io/santoshkhalse/pen/xRmZwr
fonte
Atribua esta classe CSS ao <div> direcionado:
fonte
Você pode usar a
flex
propriedade no paidiv
e adicionar amargin:auto
propriedade aos itens filhos:Você pode ver mais opções
flex
aqui: https://css-tricks.com/snippets/css/a-guide-to-flexbox/fonte
Abordagem 1
Abordagem 2
Abordagem 3
fonte
fonte
fonte
fonte
fonte
Isso funciona para mim (testado OK!):
HTML:
CSS:
Você pode escolher outros valores além de 50%. Por exemplo, 25% para centrar em 25% do pai.
fonte
fonte
Você pode tentar os seguintes métodos:
Se você tiver uma única palavra ou sentença de uma linha, o código a seguir pode resolver o problema.
Coloque um texto dentro de uma tag div e forneça um ID. Defina as seguintes propriedades para esse ID.
Nota: Verifique se a propriedade altura da linha é igual à altura da divisão.
Imagem
Mas, se o conteúdo tiver mais de uma única palavra ou linha, isso não funcionará. Além disso, haverá momentos em que você não poderá especificar o tamanho de uma divisão em px ou% (quando a divisão for realmente pequena e você desejar que o conteúdo esteja exatamente no meio).
Para resolver esse problema, podemos tentar a seguinte combinação de propriedades.
Imagem
Essas três linhas de código definem o conteúdo exatamente no meio de uma divisão (independentemente do tamanho da exibição). O "align-items: center" ajuda na centralização vertical, enquanto o "justify-content: center" o centraliza horizontalmente.
Nota: O Flex não funciona em todos os navegadores. Adicione prefixos de fornecedor apropriados para suporte adicional ao navegador.
fonte
REDE
Mostrar snippet de código
fonte
Ajustando a altura da linha para obter o alinhamento vertical.
fonte
Essa deve ser a resposta certa. Mais limpo e simples:
fonte
Aplicar estilo:
Seu texto seria centralizado, independentemente do tamanho.
fonte
Isso funcionou para mim:
fonte
Para mim, essa foi a melhor solução:
HTML:
CSS:
fonte
fonte
Código realmente simples que funciona para mim! Apenas uma linha e seu texto serão centralizados horizontalmente.
A saída é assim:
Por favor vote nesta resposta se ela funcionar apenas para poupar algum tempo dos desenvolvedores procurando soluções fáceis. Obrigado! :)
fonte
Tente o seguinte exemplo. Adicionei exemplos para cada categoria: horizontal e vertical
fonte