Approfondimento tecnico sulle unità CSS (px, em, rem, %, vh, vw): calcolo, contesto, performance

Indice

Le unità CSS determinano come browser e dispositivi interpretano dimensioni, spaziature e tipografia. In contesti professionali, una scelta accurata tra px, em, rem, %, vh, vw influisce su layout, accessibilità, performance e prevenzione del layout shift.

Questa guida è rivolta a frontend developer e web designer esperti, ma include spiegazioni intermedie per chiarire concetti tecnici come device pixel ratio, root em calculation, fluid typography e viewport resizing.

Obiettivi dell’articolo

  • Comprendere come il browser calcola le unità
  • Vedere i pro e i contro in diversi scenari
  • Conoscere tecniche avanzate (clamp(), scaling, media queries)
  • Fornire esempi commentati e best practice professionali

1. Filosofia: Unità assolute vs relative

1.1 Unità assolute

Le unità come cm, in, pt e pc sono pensate per la stampa. In CSS il px è considerato un’unità assoluta: rappresenta un pixel logico del dispositivo. Nei display ad alta densità, un pixel CSS non coincide con un pixel fisico: il browser applica una mappatura tramite il device pixel ratio (DPR).

Esempio: su un display Retina con DPR=2, un pixel CSS occupa due pixel fisici in larghezza e in altezza.

DPR indica quanti pixel fisici compongono un pixel logico CSS. Il browser gestisce questo rapporto in automatico.

1.2 Unità relative

Le unità relative si adattano al contesto: dimensione del font del genitore, root element, viewport o contenitore. Sono fondamentali per il responsive design perché reagiscono ai cambiamenti di dimensione e alle preferenze dell’utente. Esempi: em, rem, %, vh, vw, vmin, vmax, ch, ex.

2. px – Pixel CSS

unità CSS

Come funziona

Il px è un’unità fissa in CSS. Rappresenta un pixel logico indipendentemente dalla densità dello schermo. Nei moderni browser è scalato in base al DPR.

Quando usarlo

  • Elementi che richiedono precisione visiva come icone, bordi, ombre
  • Elementi grafici raster con dimensioni fisse
  • Componenti che non devono adattarsi al font-size dell’utente

Pro e contro

Pro: Prevedibilità e precisione.

Contro: Non scala con lo zoom utente e non è responsive.

3. % – Percentuale

unità CSS

Come funziona

La percentuale è relativa alla dimensione dell’elemento genitore. Ad esempio, width: 80% calcola la larghezza come 80% di quella del contenitore.

Nota importante: per proprietà verticali come padding-top e padding-bottom (il “Rientro” sopra e sotto, in italiano), la percentuale è calcolata rispetto alla larghezza del contenitore, non all’altezza.

Quando usarla

  • Layout fluidi
  • Immagini che si ridimensionano in base al contenitore
  • Spaziature proporzionali

Pro e contro

Pro: Flessibilità nei layout.

Contro: Dipendenza dal contesto, può portare a calcoli non intuitivi.

4. em – Element Relative Unit

Come funziona

1em corrisponde alla dimensione del font dell’elemento corrente. Se un genitore ha font-size di 20px, 1em equivale a 20px per i figli diretti.

Effetto collaterale

Con il nesting, i valori in em si moltiplicano, creando l’effetto compounding.

Esempio: se un genitore ha font-size 20px e un figlio ha font-size 1.2em, il risultato è 24px. Ma se quel figlio è a sua volta genitore di un altro elemento con font-size 1.2em, quest’ultimo avrà 28.8px.

Quando usarlo

Spaziatura interna ai componenti Tipografia che deve scalare proporzionalmente al font locale

5. rem – Root EM

unità CSS

Come funziona

1rem corrisponde alla dimensione del font dell’elemento radice html. Di default è 16px nella maggior parte dei browser.

Vantaggi

  • Coerenza tipografica su tutto il sito
  • Scalabilità centralizzata: modificando font-size in html si ridimensionano tutte le unità rem

Quando usarlo

  • Font principali del sito
  • Spaziatura globale
  • Sistemi di design con baseline coerente

6. vh, vw, vmin, vmax – Viewport Units

unità CSS

Come funzionano

  • 1vh = 1% dell’altezza del viewport
  • 1vw = 1% della larghezza del viewport
  • vmin e vmax si riferiscono alla dimensione minore o maggiore del viewport

Quando usarli

  • Hero section fullscreen
  • Tipografia fluida basata sul viewport

Attenzione su mobile

Su mobile, la barra di navigazione del browser può modificare le dimensioni effettive del viewport, causando layout shift. In questi casi, si possono usare calcoli con env(safe-area-inset-bottom) o fallback in px/rem.

7. Altre unità utili: ch ed ex

  • ch: larghezza del carattere “0” nel font corrente
  • ex: altezza della “x” minuscola nel font corrente

Utili in contesti tipografici avanzati per colonne e campi input.

Tabella comparativa estesa

UnitàTipoBase di calcoloForzaLimite principaleUso consigliato
pxAssolutaPixel CSS (mapped da DPR)Precisione esattaNon adattabile a preferenze utente/layoutBordi, ombre, icone, pixel grafica
%RelativaDimensione del genitoreFluidità layout, flexible gridOrientamento/contesto variabileLayout responsivi, immagini, container fluidi
emRelativaFont-size del genitoreScalabilità localeEffetto compoundingPadding, spaziature contesti modulari
remRelativaFont-size elemento root htmlCoerenza globaleMeno flessibile nei componenti isolatiFont globali, spaziatura sistema design
vh/vwRelativaPercentuale viewportAdattabilità fullscreenProblemi su mobile browser UIHero section, layout fluidi full viewport
vmin/vmaxRelativaMin/max dimensione viewportLayout proporzionali complessiSupporto meno diffusoSistemi tipografici complessi, centering retina
chRelativaLarghezza del carattere “0”Precisione tipograficaVariabile in base al fontGriglie colonna testuali, input numerici
exRelativaAltezza della x minuscolaAllineamento tipograficoFont-specificTipografia fine-tuning

Best practice tecniche

unità CSS
  • Prediligi unità relative per il responsive design
  • Usa rem per la tipografia globale e em per componenti modulari
  • Combina % con max-width per layout fluidi controllati
  • Per la fluid typography usa clamp() per gestire min e max font-size
  • Evita unità assolute nei font per garantire accessibilità

Esempi di codice avanzati

Tipografia globale scalabile

html { font-size: 16px; } body { font-size: 1rem; }

Fluid typography

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

Layout a griglia fluido

.container { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 2%; }

Checklist delle best practice

  • Imposta la base tipografica usando html { font-size: … } e costruisci tutto il sito su rem per coerenza globale.
  • Usa em solo all’interno di componenti modulari quando vuoi che spaziature o font scalino rispetto al contesto locale, evitando nesting profondo non controllato.
  • Preferisci unità relative (%, rem, em, vh, vw) per layout e tipografia responsive; limita l’uso di px a elementi dove serve precisione assoluta (bordi, icone, ombre).
  • Combina clamp() con unità viewport e rem per realizzare una tipografia fluida che abbia limiti min/max sicuri: font-size: clamp(min, preferito viewport-based, max); Per layout fluidi, usa % e max-width insieme (es. width: 90%; max-width: 1200px;) per mantenere controllo su breakpoints.
  • Considera l’impatto del device pixel ratio: aspettati che px si mappi su più pixel fisici su schermi ad alta densità, ma non usarlo per font-base accessibili.
  • Gestisci i potenziali layout shift su mobile evitando 100vh quando la UI del browser può cambiare: fallback con media query o padding adattivo.
  • Imposta sempre width/height su immagini e contenuti media per ridurre il Cumulative Layout Shift (CLS).
  • Non fissare le dimensioni dei font in px; consenti agli utenti di scalare via impostazioni browser (usa rem e percentuali).
  • Usa combinazioni intelligenti: rem per struttura globale, em per micro-layout, % per contenitori, vh/vw per sezioni full viewport.
  • Verifica su diversi viewport e dispositivi (inclusi mobile con barre UI dinamiche) che le unità reagiscano come previsto e non generino overflow o scaling inatteso.
  • Documenta la scala tipografica nel design system (es. 1rem = base, 1.25rem = sottotitolo, 2rem = titolo) e usala in modo consistente.
  • Usa commenti nel CSS per chiarire perché è stata scelta una specifica unità in contesti non ovvi (es. “uso rem qui per mantenere coerenza con la scala tipografica globale”).

FAQ

Quando usare em invece di rem?

Usa em per dimensioni relative all’interno di un componente, rem per elementi che devono essere coerenti su tutto il sito.

Posso usare px per tutto?

Solo se il design è fisso. Per il responsive è meglio usare unità relative.

vh e vw causano problemi su mobile?

Sì, il browser mobile può modificare il viewport quando mostra/nasconde la barra degli indirizzi.

Come gestire il font-size globale responsive?

Usa rem e modifica font-size in html tramite media queries.

È consigliato mescolare unità?

Sì, spesso la combinazione di diverse unità è la strategia migliore.


Scopri di più da Giorgia Milani Web Design

Abbonati per ricevere gli ultimi articoli inviati alla tua e-mail.

se ti è piaciuto questo articolo, condividilo!

Iscriviti alla newsletter del Blog

Se vuoi rimanere aggiornato sui nuovi articoli quando vengono pubblicati, iscriviti alla mia newsletter!

Cosa ne pensi? Lascia un commento e aiutaci a migliorare i contenuti sul Blog

Altri Articoli che potrebbero interessarti