CSS text-wrap: balance

Una tecnica tipografica classica di creazione manuale di interruzioni di riga per blocchi di testo bilanciati arriva in CSS.

Il valore balance per text-wrap fa parte di CSS Text Level 4. Dai un'occhiata agli esempi in questo post per scoprire come questa riga di CSS può migliorare notevolmente i layout di testo.

Browser Support

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

Prova una demo

Senza text-wrap: balance, i designer, gli editor di contenuti e gli editori hanno pochi strumenti per modificare il modo in cui le righe vengono bilanciate. Le migliori opzioni disponibili sono l'utilizzo di <wbr> o &shy; per aiutare i layout di testo a prendere decisioni più intelligenti su dove interrompere righe e parole.

In qualità di sviluppatore, non conosci le dimensioni finali, le dimensioni del carattere o persino la lingua di un titolo o di un paragrafo. Tutte le variabili necessarie per un trattamento efficace ed estetico del ritorno a capo del testo si trovano nel browser. Per questo motivo, il ritorno a capo del titolo viene visualizzato come nell'immagine seguente:

Il titolo è evidenziato con DevTools, occupa l&#39;intera larghezza dello spazio in linea e ha due parole a cavallo sulla seconda riga.
Prova una demo
.unbalanced {
  max-inline-size: 50ch;
}

Con text-wrap: balance di CSS Text 4, puoi chiedere al browser di trovare la soluzione di wrapping delle righe più equilibrata per il testo. Il browser conosce tutti i fattori, come le dimensioni del carattere, la lingua e l'area allocata. Oggi i risultati del wrapping del testo bilanciato del browser hanno questo aspetto:

Il titolo è evidenziato come nelle versioni precedenti di DevTools, ma questa volta non occupa l&#39;intera larghezza. Ha iniziato una nuova riga prima della fine e quindi è un blocco di testo bilanciato.
Prova una demo
.balanced {
  max-inline-size: 50ch;
  text-wrap: balance;
}

È utile vederli uno accanto all'altro, fermi e senza informazioni di debug sovrapposte.

I due esempi precedenti vengono mostrati insieme: uno è contrassegnato come sbilanciato e l&#39;altro come bilanciato.

Il tuo occhio dovrebbe essere molto più soddisfatto del blocco di testo bilanciato. Attira maggiormente l'attenzione ed è più facile da leggere.

Trovare l'equilibrio

I titoli sono la prima cosa che vedono i lettori, quindi devono essere visivamente accattivanti e facili da leggere. In questo modo si cattura l'attenzione degli utenti e si trasmette un senso di qualità e affidabilità. Una buona tipografia infonde fiducia nei lettori, incoraggiandoli a continuare a leggere.

Tradizionalmente, questo compito veniva svolto a mano o otticamente, poiché il designer che bilancia il testo vuole soddisfare l'occhio, non la matematica. Questo argomento viene spesso definito allineamento metrico rispetto a quello ottico. Per le grandi pubblicazioni come il New York Times, il bilanciamento dei titoli è un dettaglio molto importante dell'esperienza utente.

Prova una demo

Il bilanciamento del testo nella tipografia risale ai primi giorni della stampa, quando i tipografi posizionavano le lettere a mano. Con l'evoluzione di strumenti e tecniche, sono cambiati anche i risultati. Oggi i designer hanno a disposizione colore, peso, dimensione e altro ancora per bilanciare il testo nei loro progetti.

Sul web, tuttavia, è disponibile un controllo minore perché le dimensioni e i colori del documento cambiano in base agli utenti. text-wrap: balance porta l'arte di bilanciare il testo sul web in modo automatizzato, basandosi sul lavoro e sulle tradizioni dei designer del settore della stampa.

Titoli del saldo

Questo sarà, e dovrebbe essere, il caso d'uso principale per text-wrap: balance. Disegna l'occhio con le dimensioni giuste e rendilo simmetrico e leggibile. Imposta tutti i titoli sul testo a capo bilanciato con il seguente CSS:

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

La semplice applicazione di questo stile potrebbe non fornire i risultati previsti, in quanto il testo deve essere a capo e quindi avere una lunghezza massima della riga applicata da qualche parte. Vedrai un max-inline-size set sugli esempi di questo post. Questo stile è simile a max-width, ma può essere impostato una sola volta per qualsiasi lingua.

Limitazioni

L'attività di bilanciamento del testo non è senza costi. Il browser deve scorrere le iterazioni per scoprire la soluzione di wrapping più equilibrata. Questo costo delle prestazioni è mitigato da una regola che funziona solo per sei righe di testo e meno.

Prova una demo

Considerazioni sulle prestazioni

Non è una buona idea applicare il bilanciamento del wrapping del testo all'intero progetto. Si tratta di una richiesta sprecata, a causa del limite di sei righe, e potrebbe influire sulla velocità di rendering della pagina.

Cosa non fare
* {
  text-wrap: balance;
}
CONSIDERA INVECE
h1, h2, h3, h4, h5, h6, blockquote {
  text-wrap: balance;
}

Un grande vantaggio di questa funzionalità è che non devi attendere e bilanciare la disposizione del testo con il caricamento dei caratteri, come potresti fare oggi con JavaScript. Il browser si occupa di tutto.

Interazioni con la proprietà white-space

Il bilanciamento del testo è in conflitto con la proprietà white-space perché una richiede l'assenza di wrapping e l'altra richiede un wrapping bilanciato. Per risolvere il problema, annulla l'impostazione della proprietà dello spazio bianco, quindi il wrapping bilanciato può essere applicato di nuovo.

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

Il bilanciamento non modificherà la dimensione in linea dell'elemento

Alcune soluzioni JavaScript per il wrapping del testo bilanciato presentano un vantaggio, in quanto modificano l'max-width dell'elemento contenitore stesso. Questo ha il vantaggio aggiuntivo di essere "incapsulato" nel blocco bilanciato. text-wrap: balance non ha questo effetto e può essere visto in questo esempio:

Il titolo è evidenziato come nelle versioni precedenti di DevTools, ma questa volta non occupa l&#39;intera larghezza. Ha iniziato una nuova riga prima della fine e quindi è un blocco di testo bilanciato.

Vedi come la larghezza mostrata da DevTools ha un sacco di spazio extra alla fine? Questo perché è solo uno stile di wrapping, non uno stile di modifica delle dimensioni. Per questo motivo, ci sono alcuni scenari in cui text-wrap: balance non è il massimo, almeno secondo me. Ad esempio, le intestazioni all'interno di una scheda (o di qualsiasi contenitore con bordi o ombre).

Il ritorno a capo bilanciato crea paradossalmente uno squilibrio nell'elemento contenuto.

Una breve spiegazione della tecnica utilizzata dal browser

Il browser esegue una ricerca binaria della larghezza più piccola che non causa righe aggiuntive, fermandosi a un pixel CSS (non pixel di visualizzazione). Per ridurre ulteriormente i passaggi della ricerca binaria, il browser inizia con l'80% della larghezza media della riga.