Quebra de texto CSS: saldo

Uma técnica de tipografia clássica que envolve a criação manual de quebras de linha para blocos de texto equilibrados chega ao CSS.

Adam Argyle
Adam Argyle

O valor balance para text-wrap faz parte do Nível 4 do texto do CSS. Confira os exemplos desta postagem para saber como essa linha de CSS pode melhorar bastante seus layouts de texto.

Compatibilidade com navegadores

  • Chrome: 114.
  • Edge: 114.
  • Firefox: 121.
  • Safari: 17.5.

Origem

Faça uma demonstração

Sem text-wrap: balance, designers, editores de conteúdo e editores têm poucas ferramentas para mudar a forma como as linhas são equilibradas. As melhores opções disponíveis são usar <wbr> ou &shy; para ajudar a orientar layouts de texto em decisões mais inteligentes sobre onde dividir linhas e palavras.

Como desenvolvedor, você não sabe o tamanho final, o tamanho da fonte ou mesmo o idioma de um título ou parágrafo. Todas as variáveis necessárias para um tratamento eficaz e estético do ajuste de texto estão no navegador. É por isso que vemos o título enrolado, como na imagem abaixo:

O título é destacado com o DevTools, abrange toda a largura do espaço inline e tem duas palavras pendentes na segunda linha.
Teste uma demonstração
.unbalanced {
  max-inline-size: 50ch;
}

Com text-wrap: balance do CSS Text 4, é possível solicitar que o navegador descubra a melhor solução de quebra de linha equilibrada para o texto. O navegador sabe todos os fatores, como tamanho da fonte, idioma e área alocada. Os resultados do balanceamento de texto do navegador são assim:

O título é destacado como o DevTools anterior, mas desta vez não ocupa toda a largura. Ele começou uma nova linha antes do fim e, portanto, é um bloco de texto equilibrado.
Teste uma demonstração
.balanced {
  max-inline-size: 50ch;
  text-wrap: balance;
}

É útil vê-los lado a lado, estáticos e sem informações de depuração sobrepostas.

Os dois exemplos anteriores são mostrados juntos, um marcado como desequilibrado e o outro como equilibrado.

O bloco de texto equilibrado deve ser muito mais agradável aos olhos. Ele chama mais a atenção e é mais fácil de ler.

Encontrar o equilíbrio

Os títulos são a primeira coisa que os leitores veem. Eles precisam ser visualmente atraentes e fáceis de ler. Isso chama a atenção do usuário e oferece uma sensação de qualidade e segurança. Uma boa tipografia dá confiança aos leitores, incentivando-os a continuar lendo.

Tradicionalmente, essa tarefa era feita à mão ou visualmente, já que o designer que equilibra o texto quer agradar o olho, não a matemática. Esse tópico é muitas vezes chamado de alinhamento métrico e óptico. Para grandes publicações como o New York Times, o equilíbrio de manchetes é um detalhe muito importante da experiência do usuário.

Teste uma demonstração

O equilíbrio do texto na tipografia remonta aos primórdios da impressão, quando as impressoras distribuíam as letras à mão. À medida que as ferramentas e técnicas evoluíram, os resultados também melhoraram. Atualmente, os designers têm cor, peso, tamanho e muito mais para equilibrar o texto nos designs.

No entanto, na Web, há menos controle disponível, porque o documento muda de tamanho e cor de acordo com os usuários. O text-wrap: balance traz a arte de balancear o texto para a Web de maneira automatizada, com base no trabalho e nas tradições de designers do setor de impressão.

Equilibrar manchetes

Esse vai ser e vai ser o caso de uso principal de text-wrap: balance. Desenhe o olho com o tamanho e faça-o simétrico e legível para leitura. Defina todos os títulos para o balanceamento de texto com o seguinte CSS:

h1,h2,h3,h4,h5,h6 {
  text-wrap: balance;
}

A simples aplicação desse estilo pode não fornecer os resultados esperados, já que o texto precisa ser quebrado e, portanto, ter um comprimento máximo de linha aplicado em algum lugar. Você vai encontrar um max-inline-size definido nos exemplos desta postagem. Esse estilo é semelhante ao max-width, mas pode ser definido uma vez para qualquer idioma.

Limitações

A tarefa de balancear o texto não é sem custo financeiro. O navegador precisa fazer um loop sobre as iterações para descobrir a melhor solução de agrupamento equilibrada. Esse custo de performance é mitigado por uma regra, funciona apenas para seis linhas agrupadas e menos.

Teste uma demonstração

Considerações sobre desempenho

Não é uma boa ideia aplicar o balanceamento de texto em todo o design. É uma solicitação desperdiçada, devido ao limite de seis linhas, e pode afetar a velocidade de renderização da página.

O que não fazer
* {
  text-wrap: balance;
}
CONSIDERE
h1, h2, h3, h4, h5, h6, blockquote {
  text-wrap: balance;
}

Uma grande vantagem desse recurso é que você não precisa esperar e equilibrar o balanceamento de texto com o carregamento de fontes, como faz com o JavaScript hoje. O navegador cuida disso.

Interações com a propriedade white-space

O balanceamento de texto compete com a propriedade white-space porque uma pede que não haja quebra de linha e a outra pede que haja quebra de linha equilibrada. Para superar isso, desmarque a propriedade do espaço em branco, e o ajuste equilibrado poderá ser aplicado novamente.

.balanced {
  white-space: unset;
  text-wrap: balance;
}

O balanceamento não vai alterar o tamanho in-line do elemento

Algumas das soluções JavaScript têm uma vantagem em relação ao ajuste equilibrado do texto, porque elas mudam o max-width do próprio elemento contêiner. Isso tem o bônus de ser "enrolado" no bloco equilibrado. text-wrap: balance não tem esse efeito e pode ser visto neste exemplo:

O título é destacado como o DevTools anterior, mas desta vez não ocupa toda a largura. Ele começou uma nova linha antes do fim e, portanto, é um bloco de texto equilibrado.

Percebeu que a largura mostrada nas Ferramentas do desenvolvedor tem muito espaço extra no final? Isso porque é apenas um estilo de união, não um estilo de mudança de tamanho. Por causa disso, há alguns cenários em que text-wrap: balance não é tão bom, pelo menos na minha opinião. Por exemplo, títulos dentro de um card (ou qualquer contêiner com bordas ou sombras).

O balanceamento do texto quebrado cria um desequilíbrio no elemento contido.

Uma breve explicação da técnica que o navegador está usando

O navegador realiza uma pesquisa binária para a largura mais estreita, o que não causa linhas adicionais, parando em um pixel CSS (não de exibição). Para minimizar ainda mais as etapas na pesquisa binária, o navegador começa com 80% da largura média da linha.