Tipografia

Se non specifichi stili per il testo, i browser applicheranno i propri stili predefiniti. Si tratta dei cosiddetti stylesheet dell'agente utente e possono variare da un browser all'altro. Gli utenti possono anche impostare le proprie preferenze per la visualizzazione del testo.

Se non specifichi una lunghezza della riga, i browser a capo le righe di testo al bordo dello schermo. Pertanto, il testo sul web è adattabile per impostazione predefinita: si adatta al viewport dell'utente.

Tuttavia, il fatto che il testo entri in uno schermo non significa che sia comodo da leggere. Una buona tipografia consiste nel presentare il testo in modo appropriato. La tipografia non si limita alla scelta di caratteri adatti da utilizzare. È necessario tenere conto delle preferenze dell'utente, delle dimensioni del testo, della lunghezza delle righe e della distanza tra le righe di testo.

Dimensione testo

È difficile sapere quali dimensioni deve avere il testo sul web.

Se una persona utilizza uno schermo piccolo, è probabile che lo tenga abbastanza vicino agli occhi, a una distanza di circa 20 cm.

Tuttavia, con l'aumento delle dimensioni degli schermi, è più difficile stabilire questa connessione. Uno schermo delle dimensioni di un laptop sarà probabilmente abbastanza vicino allo spettatore, ma un monitor da computer widescreen ha circa le stesse dimensioni di uno schermo di una televisione. Le persone siedono a una distanza di un braccio dallo schermo di un computer, ma molto più lontano da una televisione.

Tuttavia, anche se non puoi sapere con certezza quanto è distante una persona da uno schermo, puoi provare a utilizzare dimensioni del testo che si spera siano appropriate. Utilizza dimensioni di testo più piccole per schermi più piccoli e dimensioni di testo più grandi per schermi più grandi.

Puoi utilizzare le media query per modificare la proprietà font-size man mano che le dimensioni dello schermo aumentano.

@media (min-width: 30em) {
  html {
    font-size: 125%;
  }
}

@media (min-width: 40em) {
  html {
    font-size: 150%;
  }
}

@media (min-width: 50em) {
  html {
    font-size: 175%;
  }
}

@media (min-width: 60em) {
  html {
    font-size: 200%;
  }
}

Ridimensionamento del testo

Il passaggio da una dimensione del testo fissa a un'interruzione specifica in punti di interruzione specifici è piuttosto complessa. Un approccio più adattabile è lasciare che la larghezza del dispositivo dell'utente influenzi le dimensioni del testo.

L'unità vw in CSS indica la "larghezza del viewport". Se colleghi le dimensioni dei caratteri alla larghezza del viewport, il testo aumenterà e diminuirà in proporzione alla larghezza del browser. Ciò rende difficile prevedere le dimensioni del testo per una larghezza specifica, ma sai che saranno appropriate per la larghezza del browser dell'utente.

È importante non utilizzare vw da solo in una dichiarazione di dimensione del carattere.

Cosa non fare
html {
  font-size: 2.5vw;
}

In caso contrario, l'utente non potrà ridimensionare il testo. Il testo potrà essere ridimensionato se aggiungi un'unità di misura relativa, ad esempio em, rem o ch. A questo scopo, la funzione CSS calc() è perfetta.

Cosa fare
html {
  font-size: calc(0.75rem + 1.5vw);
}

Lascia che sia il browser a fare i calcoli. Questo rende difficile prevedere esattamente quale sarà la dimensione del testo per una larghezza specifica, ma sai che sarà nell'intervallo corretto. Il browser dell'utente si occupa di capire i calcoli esatti delle dimensioni del testo.

Ora però esiste la possibilità che il testo risulti troppo piccolo su schermi stretti e troppo grande su schermi ampi.

Testo con valori massimi e minimi

Probabilmente non vuoi che il testo si rimpicciolisca e si ingrandisca in modo eccessivo. Puoi controllare dove inizia e finisce la scalatura utilizzando la funzione CSS clamp(). Questo "limita" il ridimensionamento a un intervallo specifico.

La funzione clamp() è simile alla funzione calc(), ma assume tre valori. Il valore intermedio è lo stesso che passi a calc(). Il valore di apertura specifica la dimensione minima, in questo caso 1rem, in modo da non scendere al di sotto della dimensione del carattere preferita dall'utente. Il valore di chiusura specifica la dimensione massima.

html {
  font-size: clamp(1rem, 0.75rem + 1.5vw, 2rem);
}

Ora le dimensioni del testo si riducono e aumentano in proporzione allo schermo dell'utente, ma non scenderanno mai al di sotto di 1rem o al di sopra di 2rem.

Lunghezza della riga

Il web non è stampa, ma possiamo imparare dal mondo della stampa e applicarle sul web.

Nel suo classico libro The Elements of Typographic Style, Robert Bringhurst ha detto quanto segue sulla lunghezza (o misura) delle righe:

Una lunghezza della riga compresa tra 45 e 75 caratteri è ampiamente considerata soddisfacente per una pagina a una colonna impostata in un carattere con grazie in un formato del testo. La riga di 66 caratteri (contando lettere e spazi) è considerata ideale. Per il funzionamento di più colonne, una media migliore è compresa tra 40 e 50 caratteri.

Non puoi impostare la lunghezza di una riga direttamente in CSS. Nessuna proprietà line-length. Puoi, però, evitare che il testo diventi troppo largo limitando la larghezza del contenitore. La proprietà max-inline-size è perfetta per questo.

Non impostare le lunghezze delle righe con un'unità fissa come px. Gli utenti possono aumentare e diminuire le dimensioni dei caratteri e le lunghezze delle righe devono essere regolate di conseguenza. Utilizza un'unità di misura relativa come rem o ch.

Cosa non fare
article {
  max-inline-size: 700px;
}
Cosa fare
article {
  max-inline-size: 66ch;
}

Se utilizzi unità ch per la larghezza, le nuove righe verranno a capo al 66° carattere con quella dimensione del carattere.

Altezza riga

Anche se non esiste una proprietà line-length in CSS, è disponibile una proprietà line-height.

Le righe di testo più brevi possono avere valori line-height più elevati. Tuttavia, se utilizzi valori line-height elevati per righe di testo lunghe, è difficile per l'occhio del lettore passare dalla fine di una riga all'inizio della riga successiva.

article {
  max-inline-size: 66ch;
  line-height: 1.65;
}
blockquote {
  max-inline-size: 45ch;
  line-height: 2;
}

Utilizza valori senza unità per le dichiarazioni line-height. In questo modo, l'altezza della riga è relativa a font-size.

Cosa non fare
line-height: 24px;
Cosa fare
line-height: 1.5;

Combinazioni e scalabilità

Ricorda di dare la priorità alla gerarchia durante la creazione delle interfacce utente per una maggiore chiarezza e un flusso di pagine migliore. Un ottimo modo per farlo è utilizzare una scala di tipografia integrata nel sistema di design.

Caratteri web

Un carattere è come una voce per le tue parole. Per molto tempo sul web erano disponibili pochissime opzioni di caratteri. I caratteri di sistema erano le uniche opzioni disponibili. Ora puoi scegliere un carattere web che rispecchi l'aspetto dei tuoi contenuti.

Utilizza @font-face per indicare ai browser dove trovare i file dei caratteri web. Utilizza woff2 come formato dei caratteri web. È ben supportato e offre i migliori miglioramenti delle prestazioni.

@font-face {
  font-family: Roboto;
  src: url('/fonts/roboto-regular.woff2') format('woff2');
}
body {
  font-family: Roboto, sans-serif;
}

Tuttavia, ogni file di caratteri web che aggiungi potrebbe potenzialmente ridurre l'esperienza utente in quanto aumenta il tempo di caricamento della pagina. Ricorda che il design non riguarda solo l'aspetto finale dei pixel. La velocità con cui vengono visualizzati questi pixel è un aspetto fondamentale dell'esperienza utente. Un'esperienza che sembra veloce è un'esperienza utente positiva.

Caricamento dei caratteri

Puoi richiedere ai browser di iniziare a scaricare un file del carattere il prima possibile. Aggiungi un elemento link al head del documento che fa riferimento al file del carattere web. Un attributo rel con valore preload indica al browser di dare la priorità al file. Un attributo as con un valore font indica al browser di che tipo di file si tratta. L'attributo type ti consente di essere ancora più specifico.

<link href="/fonts/roboto-regular.woff2" type="font/woff2" 
  rel="preload" as="font" crossorigin>

Devi includere l'attributo crossorigin anche se ospiti personalmente i file dei caratteri.

Utilizza la proprietà CSS font-display per indicare al browser come gestire il passaggio da un carattere di sistema a un carattere web. Puoi scegliere di non mostrare alcun testo finché il carattere web non viene caricato. Puoi scegliere di visualizzare immediatamente il carattere di sistema e poi passare al carattere web una volta caricato. Entrambe le strategie hanno i loro lati negativi. Se aspetti che il carattere web venga scaricato prima di mostrare del testo, gli utenti potrebbero trovarsi a fissare una pagina vuota per un tempo scoraggiante. Se mostri prima il testo in un carattere di sistema e poi passi al carattere web, gli utenti potrebbero notare uno spostamento brusco dei contenuti nella pagina.

Un buon compromesso è attendere un breve istante prima di mostrare il testo. Se il carattere web viene caricato prima del termine del periodo di tempo, il testo viene visualizzato utilizzando il carattere web senza spostamenti dei contenuti. Se il carattere web non è ancora stato caricato al termine del tempo, il testo viene visualizzato utilizzando il carattere di sistema in modo che almeno l'utente possa leggere i contenuti.

Utilizza un valore font-display pari a swap se vuoi comunque che il carattere web sostituisca il carattere di sistema ogni volta che viene caricato.

body {
  font-family: Roboto, sans-serif;
  font-display: swap;
}

Utilizza un valore font-display pari a fallback se vuoi mantenere il carattere di sistema dopo il rendering del testo.

body {
  font-family: Roboto, sans-serif;
  font-display: fallback;
}

Caratteri variabili

Se utilizzi molti spessori o stili diversi dello stesso carattere, potresti dover utilizzare molti file di caratteri separati, uno per ogni spessore o stile.

I caratteri variabili risolvono questo problema utilizzando un solo file. Anziché avere file separati per normali, in grassetto, extra bold e così via, un file di caratteri variabili è adattabile. Contiene tutte le informazioni necessarie per essere visualizzato in una gamma di spessori o stili.

La lettera &quot;A&quot; mostrata in diversi spessori.

Ciò significa che un singolo file di caratteri con variabile è più grande di un singolo file di caratteri standard, ma un singolo file di caratteri con variabile probabilmente sarà più piccolo di più file di caratteri regolari. Se utilizzi molti spessori diversi, un carattere variabile potrebbe darti un grande vantaggio in termini di prestazioni.

Una buona tipografia sul web non riguarda solo le scelte di tipo che fai come designer. La tipografia adattabile significa anche rispettare il dispositivo e la connessione di rete dell'utente. Il risultato finale è un design che sembra giusto indipendentemente da come viene visualizzato.

Ora che sai come funziona il testo adattabile, è il momento di analizzare le immagini adattabili.

Verificare di aver compreso

Metti alla prova le tue conoscenze sulla tipografia

Affinché il testo vada a capo all'interno dell'area visibile, è necessario aggiungere gli stili.

Vero
Non è necessario aggiungere stili.
Falso
Il testo andrà a capo per impostazione predefinita senza stili aggiuntivi.

clamp() è utile per la tipografia fluida perché

Consente di incorporare facilmente le funzioni calc()
Sebbene sia vero, non è un buon motivo per utilizzare clamp() per la tipografia.
Il supporto del browser è fantastico.
Sebbene sia vero, non è un buon motivo per utilizzare clamp() per la tipografia.
Consente di bloccare le dimensioni dei caratteri tra valori minimi e massimi sensibili, fornendo al contempo un valore medio scalabile.
Esatto, evita un testo troppo piccolo o troppo grande, garantendo al contempo una dimensione dei caratteri con una scalabilità uniforme.
Semplifica i calcoli.
Riprova.

Quali tipi di valori line-height sono stati consigliati in questa guida?

24px
Il post dice esplicitamente di non utilizzare valori per i pixel per line-height.
2rem
Sebbene i rem siano valori relativi, possono comunque creare intervalli di riga troppo piccoli o troppo grandi.
1.5
Si consigliano valori relativi senza unità.
2vw
Le unità dell'area visibile come line-height potrebbero causare problemi.

Che cosa fa font-display?

Indica al browser come gestire il passaggio da un carattere di sistema a un carattere web.
Aiuta con la transizione a un carattere personalizzato.
Consente di impostare il carattere su block o inline-block.
I caratteri non hanno tipi di visualizzazione.
Indica se il carattere è nascosto o meno.
I caratteri non possono essere nascosti.
Consente di controllare la sincronizzazione dell'esperienza utente di caricamento dei caratteri remoti.
Aiutano gli autori a personalizzare l'esperienza di caricamento dei caratteri personalizzati.