É possível alinhar o texto verticalmente dentro de um div? [duplicado]

Esta pergunta já tem uma resposta:
  • Como faço para alinhar o texto verticalmente num div? 28 respostas

o código abaixo (também disponível como uma demonstração no JS Fiddle ) não posiciona o texto no meio, como eu preferiria. Não consigo encontrar nenhuma forma de centrar verticalmente o texto num div, mesmo usando o margin-top atributo. Como posso fazer isto?

<div id="column-content">
    <img src="http://i.stack.imgur.com/12qzO.png">
    <strong>1234</strong>
    yet another text content that should be centered vertically
</div>
#column-content {
    display: inline-block;
    border: 1px solid red;
    position:relative;
}

#column-content strong {
    color: #592102;
    font-size: 18px;
}

img {
    margin-top:-7px;
    vertical-align: middle;        
}
Author: YakovL, 2012-02-12

10 answers

Crie um recipiente para o seu conteúdo de texto, um span talvez.

#column-content {
  display: inline-block;
}
img {
  vertical-align: middle;
}
span {
  display: inline-block;
  vertical-align: middle;
}

/* for visual purposes */
#column-content {
  border: 1px solid red;
  position: relative;
}
<div id="column-content">

  <img src="http://i.imgur.com/WxW4B.png">
  <span><strong>1234</strong>
    yet another text content that should be centered vertically</span>
</div>

JSFiddle

 391
Author: Andres Ilich, 2015-01-27 21:45:44
Andres Ilich tem razão. Só para o caso de alguém perder o comentário...

A.) Se você só tem uma linha de texto:

div
{
  height: 200px;
  line-height: 200px; /* <-- this is what you must define */
}
<div>vertically centered text</div>

B.) Se você tem várias linhas de texto:

div
{
  height: 200px;
  line-height: 200px;
}

span
{
  display: inline-block;
  vertical-align: middle;
  line-height: 18px; /* <-- adjust this */
}
<div><span>vertically centered text vertically centered text vertically centered text vertically centered text vertically centered text vertically centered text vertically centered text vertically centered text vertically centered text vertically centered text</span></div>
 599
Author: Jenny O'Reilly, 2018-08-10 15:41:47

Actualizar Abril 10, 2016

As Flexboxes devem agora ser usadas para alinhar os itens verticalmente (ou mesmo horizontalmente).

<div class="flex-container">
    <div class="flex-item">Item</div>
    <div class="flex-item">Item</div>
    <div class="flex-item">Item</div>
    <div class="flex-item">Item</div>
</div>

<style>
.flex-container {
    display:flex;
    align-items: center; /* Vertical center alignment */
    justify-content: center; /* Horizontal center alignment */
}
</style>

Um bom guia para flexbox pode ser lido em CSS Tricks . Obrigado Ben (de comentários) por apontar, não teve tempo para atualizar.


Um bom tipo chamado Mahendra postou uma solução muito funcional aqui.

A seguinte classe deve tornar o elemento horizontal e verticalmente centrado na sua pai.

.absolute-center {

/* Internet Explorer 10 */
display:-ms-flexbox;
-ms-flex-pack:center;
-ms-flex-align:center;

/* Firefox */
display:-moz-box;
-moz-box-pack:center;
-moz-box-align:center;

/* Safari, Opera, and Chrome */
display:-webkit-box;
-webkit-box-pack:center;
-webkit-box-align:center;

/* W3C */
display:box;
box-pack:center;
box-align:center;

}
 168
Author: Omar Tariq, 2017-05-23 12:10:41
Esta é uma pergunta antiga, mas a resposta aceita não funciona para texto multi-linhas. Actualizei o JSfiddle para mostrar o texto multi-linha CSS vertical align como explicado aqui:
<div id="column-content">
    <div>yet another text content that should be centered vertically</div>
</div>

#column-content {
    border: 1px solid red;
    height: 200px;
    width: 100px;
}
div {
    display: table-cell;
    vertical-align:middle;
    text-align: center;
}

Também funciona com <br /> em "mais um..."

 59
Author: Eduard Gamonal, 2018-09-04 13:49:50

Tenta isto:

HTML

<div><span>Text</span></div>

CSS

div {
    height: 100px;
}

span {
    height: 100px;
    display: table-cell;
    vertical-align: middle;
}
 24
Author: Petr Voborník, 2014-04-03 21:14:48
Isto é suposto funcionar.
#column-content {
        --------
        margin-top:auto;
        margin-bottom:auto;
    }
Tentei na tua demo.
 11
Author: ParPar, 2012-02-12 14:31:11

Para tornar a solução de Omar (ou de Mahendra) ainda mais universal, o bloco de código relativo ao FireFox deve ser substituído pelo seguinte:

/* Firefox */
display:flex;
justify-content:center;
align-items:center;

O problema com o código do Omar, caso contrário Operacional, surge quando se quer centrar a caixa no ecrã ou no seu antepassado imediato. Esta centralização é feita ajustando a sua posição para

position: relative; ou position:static; (não com posição:absoluta nem fixa).

E depois margem: auto; ou margem-direito: auto; margem-esquerda: automática;

Debaixo deste centro de caixas alinhando o ambiente, a sugestão do Omar não funciona. Também não funciona na IE8 (ainda 7,7% de market share). Assim, para o IE8 (e outros navegadores), deve ser considerada uma solução de trabalho, como visto em outras soluções acima.
 6
Author: user2931920, 2017-11-02 19:39:09

Esta é a maneira mais simples de o fazer se precisar de várias linhas. Envolver o span ' D texto noutro span e indicar a sua altura com line-height. O truque para várias linhas é reiniciar o interior span ' s line-height.

<span class="textvalignmiddle"><span>YOUR TEXT HERE</span></span>
.textvalignmiddle {
    line-height: /*set height*/;
}

.textvalignmiddle > span {
    display: inline-block;
    vertical-align: middle;
    line-height: 1em; /*set line height back to normal*/
}

DEMONSTRAÇÃO

Claro que o exterior span pode ser um divou o que te fez

 4
Author: Hashbrown, 2013-10-01 02:11:12

Adicionar um alinhamento vertical ao css #column-content strong também:

#column-content strong {
    ...
    vertical-align: middle;
}

Veja também o seu exemplo actualizado .

= = = actualização = = =

Com um espaço em torno do outro texto e outro alinhamento vertical:

Html:

... <span>yet another text content that should be centered vertically</span> ...

Css:

#column-content span {
    vertical-align: middle;
}

Veja também o próximo exemplo.

 3
Author: scessor, 2012-02-12 14:12:55

Eu sei que é totalmente estúpido e você normalmente não deve usar tabelas quando não criar tabelas, mas: as células da tabela podem alinhar várias linhas de texto centrado verticalmente e até mesmo fazer isso por padrão. Então, uma solução que funciona muito bem pode ser algo assim:

Html:

<div class="box">
  <table class="textalignmiddle">
    <tr>
      <td>lorem ipsum ...</td>
    </tr>
  </table>
</div>

Css: (fazer com que o item da tabela encaixe sempre na caixa div)

.box {
  /* for example */
  height: 300px;
}

.textalignmiddle {
  width: 100%;
  height: 100%;
}
Veja aqui.: http://www.cssdesk.com/LzpeV
 -2
Author: lars at upstruct, 2013-10-15 10:57:02