PX in REM: La Guida dello Sviluppatore alla Tipografia Scalabile

Scopri perché le unità rem migliorano l'accessibilità, come calcolarle e le migliori pratiche per la tipografia responsive in CSS.

6 min di lettura CSS · Accessibilità · Tipografia 6 sezioni + FAQ

La scelta tra px e rem in CSS non è solo una preferenza stilistica — ha conseguenze dirette sull'accessibilità, il controllo utente e il design responsive. Milioni di utenti impostano una dimensione del carattere personalizzata nelle preferenze del browser, e un foglio di stile scritto interamente in px ignora completamente quella impostazione.

Questa guida spiega la meccanica di ogni unità, la formula per convertire px in rem e le regole pratiche per quando usare ciascuna in un vero codebase CSS.

Comprendere le unità CSS (px, rem, em, vh)

CSS offre multiple unità di lunghezza per diversi casi d'uso. px (pixel) è un'unità assoluta. rem (root em) è un'unità relativa basata sul font-size dell'elemento radice (<html>). em è un'unità relativa basata sul font-size dell'elemento corrente o del suo antenato più vicino con un font-size esplicito. vh e vw sono relative al viewport: 1vh = 1% dell'altezza del viewport. Ogni unità ha casi d'uso appropriati e inappropriati.

Tool gratuito Convertitore PX in REM Converti istantaneamente i valori in pixel in rem con qualsiasi dimensione base

Perché px è problematico per l'accessibilità

I browser permettono agli utenti di impostare una dimensione del carattere predefinita nelle preferenze (tipicamente 16px di default, ma gli utenti possono impostarla a 20px, 24px o più). Quando imposti font-size: 16px in CSS, questo sovrascrive la preferenza dell'utente. Questo viola il criterio di successo WCAG 2.1 1.4.4 (Ridimensionamento del testo), che richiede che il testo possa essere ridimensionato fino al 200% senza perdita di contenuto o funzionalità. La tipografia basata su rem rispetta la dimensione del carattere radice dell'utente.

Come funziona rem (root font-size)

L'unità rem è sempre relativa al font-size dell'elemento <html>. Per impostazione predefinita, i browser lo impostano a 16px. Quindi 1rem = 16px, 1.5rem = 24px, 0.875rem = 14px. Se un utente aumenta la dimensione del carattere del browser a 20px, allora 1rem = 20px — tutti i valori basati su rem si scalano proporzionalmente. Non impostare mai il font-size su <html> in pixel (es. html { font-size: 16px }) perché questo vanifica lo scopo. Usa una percentuale: html { font-size: 112.5% } imposta la base a 18px su un browser predefinito a 16px.

Tool gratuito Verificatore di Contrasto Colori Verifica i rapporti di contrasto WCAG 2.1 insieme all'accessibilità della dimensione del carattere

Formula PX in REM

La formula è semplice: rem = px / font-size-base. Con la base predefinita di 16px: 12px = 0.75rem, 14px = 0.875rem, 16px = 1rem, 18px = 1.125rem, 24px = 1.5rem, 32px = 2rem. Nei preprocessori CSS (Sass, Less), puoi definire una funzione. Nel CSS moderno, le proprietà personalizzate e calc() possono automatizzare questo senza un preprocessore.

/* Funzione Sass */
@function rem($px) {
  @return #{$px / 16}rem;
}

/* Utilizzo */
font-size: rem(18); /* → 1.125rem */

/* Alternativa CSS puro */
:root {
  --base: 16;
}

.text {
  font-size: calc(18 / var(--base) * 1rem);
}

Quando usare rem vs em vs px

Usa rem per la tipografia globale (testo corpo, titoli, etichette) e per la spaziatura che dovrebbe scalare con la preferenza di dimensione del carattere dell'utente. Usa em per la spaziatura a livello di componente che dovrebbe essere proporzionale al proprio font-size (padding all'interno di un bottone). Usa px per bordi, ombre ed elementi di layout che non dovrebbero scalare con il testo (i bordi da 1px devono rimanere 1px indipendentemente dalla dimensione del carattere). Usa le unità viewport (vh, vw) per elementi di layout che dovrebbero riempire o relazionarsi al viewport.

Proprietà CSS personalizzate per la base rem

Un pattern comune è impostare una proprietà CSS personalizzata per la dimensione del carattere base per consentire una facile regolazione globale. Imposta il font-size come percentuale su <html> per rispettare le preferenze dell'utente, poi usa rem ovunque. La funzione clamp() crea tipografia fluida che si scala tra valori minimo e massimo in base alla larghezza del viewport, senza breakpoint di media query.

/* Base accessibile */
html {
  font-size: 100%;
}

body {
  font-size: 1rem;
}

h1 {
  font-size: 2rem;
}

/* Tipografia fluida con clamp */
.hero-title {
  font-size: clamp(1.5rem, 4vw, 3rem);
}
Tool gratuito Generatore di Palette Colori Costruisci palette di colori accessibili insieme al tuo sistema tipografico

Domande Frequenti

Qual è la differenza tra px, rem ed em in CSS? +
px è un'unità assoluta che mappa ai pixel del dispositivo. rem è relativo al font-size dell'elemento radice (). em è relativo al font-size dell'elemento corrente o del suo antenato più vicino. rem è preferito per la tipografia e la spaziatura perché rispetta le preferenze utente del browser.
Come si converte px in rem in CSS? +
Dividi il valore in pixel per la dimensione del carattere base (di solito 16px): rem = px / 16. Esempi: 12px = 0.75rem, 18px = 1.125rem, 24px = 1.5rem, 32px = 2rem. Lo strumento px-to-rem di PixCode automatizza questa conversione per qualsiasi dimensione base.
Perché usare px per font-size è negativo per l'accessibilità? +
Quando il font-size è impostato in px, sovrascrive la preferenza di dimensione del carattere del browser dell'utente. Gli utenti che necessitano di testo più grande non possono sovrascrivere le dimensioni del carattere basate su px regolando le impostazioni del browser. Il criterio WCAG 2.1 1.4.4 richiede che il testo sia ridimensionabile al 200% senza perdita di contenuto.
Quanto vale 1rem in pixel? +
1rem equivale al font-size dell'elemento . Nella maggior parte dei browser, il valore predefinito è 16px, quindi 1rem = 16px di default. Se un utente cambia la dimensione del carattere del browser a 20px, allora 1rem = 20px. Non impostare mai html { font-size: 16px } — usa html { font-size: 100% } per ereditare il valore predefinito del browser.
Dovrei usare rem o em per padding e margin? +
Usa rem per padding e margin che devono scalare con la dimensione globale del carattere (spazio bianco a livello di pagina). Usa em per la spaziatura interna ai componenti che deve scalare proporzionalmente con il font-size del componente (es. padding dei bottoni). In questo modo, se cambi il font-size di un componente, il suo padding interno si regola automaticamente.
Posso usare rem per il layout (width, height, grid)? +
Tecnicamente sì, ma non è generalmente consigliato per le larghezze di layout. Il layout dovrebbe tipicamente usare percentuali, unità fr (grid) o unità viewport. Usare rem per max-width (es. max-width: 60rem per una colonna di contenuto) è comune e funziona bene perché crea una lunghezza di riga leggibile che scala anche con le preferenze utente.
Lo strumento px-to-rem di PixCode supporta dimensioni base personalizzate? +
Sì. Il convertitore PX in REM di PixCode consente di impostare qualsiasi dimensione del carattere base (predefinita 16px ma configurabile). Mostra anche l'output CSS pronto da incollare e supporta la conversione batch di più valori contemporaneamente.