Como centralizar texto no HTML
Use a propriedade CSS text-align: center no elemento que contém o texto:
text-align centraliza cada linha dentro do elemento, inclusive coisas inline como links, imagens e botões. A propriedade é herdada, então defini-la num contêiner centraliza o texto de tudo o que estiver dentro dele.
Coloque no bloco, não no span
text-align funciona em contêineres block: <p>, <div>, títulos, células de tabela. Num <span> ou <a> ela não faz nada, porque um elemento inline tem só a largura do texto e não há espaço para centralizar:
A solução é sempre a mesma: leve text-align: center para o bloco pai.
Centralize o bloco, alinhe as linhas à esquerda
Num parágrafo de várias linhas, texto totalmente centralizado é difícil de ler, porque cada linha começa num lugar diferente. Um padrão comum é centralizar o bloco na página e manter o texto alinhado ao início:
margin-inline: auto centraliza um bloco que tem largura, text-align centraliza as linhas dentro dele. Centralizar caixas (com flexbox, grid ou margens) é assunto da página como centralizar uma div.
Centralizar texto na vertical
text-align só funciona na horizontal. Para centralizar o texto na vertical dentro de uma caixa, transforme a caixa num contêiner flex:
align-items: center centraliza na vertical, justify-content: center centraliza na horizontal, e text-align: center ainda centraliza as linhas entre si quando há mais de uma. O truque do line-height só funciona para uma única linha de texto numa caixa de altura conhecida.
Todos os valores de text-align
| Valor | Resultado |
|---|---|
start (padrão) | As linhas começam na margem inicial: esquerda em português, direita em árabe e hebraico |
end | As linhas terminam na margem final |
center | Linhas centralizadas |
justify | Linhas esticadas até tocar as duas margens (menos a última) |
left, right | Sempre à esquerda ou sempre à direita, seja qual for o idioma |
Prefira start e end a left e right: eles se invertem automaticamente em idiomas da direita para a esquerda, como mostra a última caixa.
A antiga tag center
Páginas antigas centralizam texto com <center> ou com um atributo align:
<center>Old way</center>
<p align="center">Also old</p>
Os dois estão obsoletos. Os navegadores ainda os exibem para que sites antigos não quebrem, mas são inválidos no HTML atual e misturam layout com a marcação. Use text-align: center no CSS.
Recuo de texto
O HTML não tem tag de recuo, e os espaços digitados são juntados (veja espaço em HTML). Recuo é coisa do CSS:
| Recuo | CSS |
|---|---|
| Só a primeira linha | text-indent: 2em |
| O bloco inteiro | padding-inline-start: 2em ou margin-inline-start: 2em |
| Deslocado (primeira linha para fora) | padding-inline-start: 2em; text-indent: -2em |
em liga o recuo ao tamanho da fonte, então ele acompanha o texto.
Erros comuns
text-alignnum elemento inline. Coloque no bloco pai.- Esperar que
text-aligncentralize uma caixa. Ele centraliza texto e conteúdo inline, não um bloco com largura. Usemargin-inline: autoou flexbox para caixas. - Usar
<center>oualign="center". Obsoletos. Use CSS. - Centralizar parágrafos longos. Centralize títulos e linhas curtas; mantenha o texto corrido alinhado ao início.
- Recuar com
ou espaços. Usetext-indentou padding.
Perguntas frequentes
Como centralizar um texto no HTML?
Adicione text-align: center ao elemento que contém o texto, por exemplo <p style="text-align: center"> ou uma regra CSS como h1 { text-align: center; }. Isso centraliza cada linha de texto e o conteúdo inline dentro desse elemento.
Por que text-align: center não funciona no meu span?
Um span é inline, então ele tem só a largura do texto e não sobra espaço para centralizar. Coloque text-align: center no bloco pai (o <p> ou a <div> em volta), ou deixe o span com display: block.
Como centralizar texto na vertical?
Transforme o contêiner numa caixa flex: display: flex; align-items: center; (adicione justify-content: center para centralizar também na horizontal). Para uma única linha numa caixa de altura fixa, um line-height igual à altura também funciona.
A tag <center> ainda é válida?
Não. <center> e o atributo align="center" estão obsoletos. Os navegadores ainda os exibem por causa de páginas antigas, mas código novo deve usar text-align: center no CSS.
Como dar recuo a um texto no HTML?
Use CSS. text-indent: 2em recua a primeira linha de um parágrafo, e padding-inline-start: 2em ou margin-inline-start: 2em recua o bloco inteiro. Espaços ou no texto não são um recuo confiável.