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.
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.
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
­
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:
.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:
.balanced {
max-inline-size: 50ch;
text-wrap: balance;
}
É útil vê-los lado a lado, estáticos e sem informações de depuração sobrepostas.
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.
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.
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.
* { text-wrap: balance; }
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:
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.