Guida alla Conversione delle Unità CSS: px, rem, em, vw, vh Spiegati
Scegliere le giuste unità CSS è una delle decisioni più influenti quando si scrivono fogli di stile. L'unità che scegli determina come gli elementi si ridimensionano su diverse dimensioni dello schermo, come rispondono alle preferenze dell'utente (come l'impostazione della dimensione del font del browser) e quanto prevedibilmente si comporta il tuo layout. Tuttavia, molti sviluppatori usano i pixel per abitudine, perdendo i vantaggi di flessibilità e accessibilità offerti dalle unità relative. Questa guida copre tutte le principali unità CSS, spiega quando usare ciascuna, mostra come convertirle e fornisce le migliori pratiche pratiche per il design responsive moderno.
Comprendere la Classificazione delle Unità CSS
Le unità CSS si dividono in due grandi categorie: unità assolute e unità relative. Le unità assolute hanno una dimensione fisica fissa, mentre le unità relative derivano il loro valore calcolato da un altro punto di riferimento. Comprendere questa distinzione è fondamentale per fare scelte informate sulle unità.
Unità Assolute
Le unità assolute sono misure a dimensione fissa. L'unità assoluta più comunemente usata nello sviluppo web è il pixel (px). Altre unità assolute includono punti (pt), centimetri (cm), millimetri (mm) e pollici (in). Queste unità sono utilizzate principalmente per fogli di stile di stampa o quando hai bisogno di una misura che non cambi con il contesto. Nei CSS per schermo, px è l'unica unità assoluta che userai regolarmente.
Unità Relative
Le unità relative calcolano il loro valore finale in base a un valore di riferimento. em è relativo alla dimensione del font dell'elemento corrente, rem è relativo alla dimensione del font dell'elemento radice, vw e vh sono relativi alle dimensioni del viewport e le percentuali sono relative all'elemento genitore. Le unità relative sono la pietra angolare del design responsive e accessibile perché permettono al tuo layout di adattarsi automaticamente a diversi contesti.
Pixel (px): l'Unità di Riferimento
Il pixel è l'unità CSS più intuitiva perché si mappa direttamente ai pixel dello schermo (con alcune considerazioni sul device pixel ratio). I valori px sono sempre gli stessi indipendentemente dal contesto, il che li rende prevedibili e facili da comprendere. Tuttavia, questa prevedibilità ha un costo: le dimensioni basate su pixel non si ridimensionano quando l'utente cambia la dimensione predefinita del font del browser, creando problemi di accessibilità.
Quando Usare px
- Larghezza del bordo: un bordo di 1px dovrebbe rimanere 1px indipendentemente dalle impostazioni della dimensione del font.
- Ombreggiature: gli offset e i raggi di sfocatura delle ombre sono generalmente migliori in pixel per effetti visivi coerenti.
- Dettagli fini: qualsiasi valore il cui ridimensionamento rovinerebbe il design visivo, come separatori a linea sottile o posizionamento preciso di icone.
- Dimensione del font radice: impostare html { font-size: 16px; } come baseline è un pattern comune, anche se dovresti rispettare le impostazioni predefinite del browser dell'utente.
Quando Evitare px
Evita px per dimensioni del font, padding, margini e dimensioni di layout che dovrebbero adattarsi alle preferenze dell'utente. Un utente che aumenta la dimensione del font del browser a 20px si aspetta che tutto il testo si ridimensioni di conseguenza, ma le dimensioni del font basate su px non risponderanno a questo cambiamento.
rem: Dimensionamento Relativo alla Radice
). Nella maggior parte dei browser, la dimensione predefinita del font radice è 16px, quindi 1rem = 16px, 0,5rem = 8px, 2rem = 32px. Il vantaggio chiave di rem è che si ridimensiona quando l'utente cambia la dimensione predefinita del font del browser, rendendolo la scelta migliore per l'accessibilità.
Convertire px in rem
La formula di conversione è semplice: dividi il valore in pixel per la dimensione del font radice.
rem = px / root-font-size
// With default root font size of 16px:
12px = 12 / 16 = 0.75rem
16px = 16 / 16 = 1rem
24px = 24 / 16 = 1.5rem
32px = 32 / 16 = 2rem
48px = 48 / 16 = 3remIl Trucco del 62,5%
Molti sviluppatori trovano noiosa la matematica della divisione per 16. Un trucco popolare è impostare la dimensione del font radice al 62,5%, rendendo 1rem uguale a 10px. Questo semplifica il calcolo mentale: 14px diventa 1,4rem, 24px diventa 2,4rem, e così via.
html {
font-size: 62.5%; /* 1rem = 10px */
}
body {
font-size: 1.6rem; /* 16px */
}
h1 {
font-size: 3.2rem; /* 32px */
margin-bottom: 1.6rem; /* 16px */
}em: Dimensionamento Relativo al Contesto
L'unità em è relativa alla dimensione del font dell'elemento corrente (o, per proprietà diverse da font-size, al suo elemento genitore). Questo significa che 1em equivale alla dimensione del font corrente, e i valori em si compongono quando gli elementi sono annidati. Questo comportamento di composizione può essere sia potente che confuso.
Il Problema della Composizione
/* Parent: font-size 16px */
.parent {
font-size: 1em; /* 16px */
}
/* Child: 1.2em of parent's 16px = 19.2px */
.child {
font-size: 1.2em;
}
/* Grandchild: 1.2em of child's 19.2px = 23.04px */
.grandchild {
font-size: 1.2em;
}Ogni elemento annidato moltiplica la dimensione del font, portando a una crescita esponenziale. Ecco perché rem è generalmente preferibile per le dimensioni del font. Tuttavia, em eccelle in casi d'uso specifici dove desideri un ridimensionamento a livello di componente.
Quando Usare em
- Padding e margini dei componenti: quando vuoi che la spaziatura si ridimensioni con la dimensione del font del componente, em mantiene tutto proporzionale. Se aumenti la dimensione del font di un pulsante, il suo padding si ridimensiona automaticamente.
- Breakpoint delle media query: alcuni sviluppatori preferiscono breakpoint basati su em perché si ridimensionano con le preferenze di dimensione del font dell'utente, garantendo che il layout si adatti alla giusta larghezza del contenuto.
- Dimensioni delle icone nei componenti: le icone dimensionate in em si ridimensionano proporzionalmente al testo circostante.
Unità Viewport: vw, vh, vmin, vmax
Le unità viewport sono relative alle dimensioni della finestra del browser. 1vw equivale all'1% della larghezza del viewport, 1vh equivale all'1% dell'altezza del viewport. vmin è il minore tra vw e vh, vmax è il maggiore. Queste unità sono essenziali per creare layout che rispondono allo spazio disponibile sullo schermo.
Casi d'Uso Comuni delle Unità Viewport
| Caso d'Uso | Unità | Esempio |
|---|---|---|
| Sezione Hero a Schermo Intero | vh | height: 100vh |
| Tipografia Fluida | vw + clamp | font-size: clamp(1rem, 2.5vw, 2rem) |
| Layout Affiancato | vw | width: 50vw |
| Elemento Quadrato | vmin | width: 20vmin; height: 20vmin |
| Overlay a Tutto Viewport | vw + vh | width: 100vw; height: 100vh |
Il Problema dei vh su Mobile
Nei browser mobili, 100vh non è sempre uguale all'altezza visibile del viewport. La barra degli indirizzi e i controlli di navigazione del browser occupano spazio, ma 100vh include l'area dietro questi controlli. Questo causa il troncamento del contenuto nella parte inferiore delle sezioni a tutta altezza. I CSS moderni forniscono dvh (altezza viewport dinamica) come soluzione, che tiene conto delle barre degli strumenti dinamiche. In alternativa, usa JavaScript per impostare una proprietà personalizzata CSS basata su window.innerHeight.
/* Modern approach */
.hero {
height: 100dvh; /* Dynamic viewport height */
}
/* Fallback for older browsers */
.hero {
height: 100vh;
height: 100dvh;
}Nuove Unità Viewport: svh, lvh, dvh
I CSS hanno introdotto tre nuove unità di altezza viewport per risolvere il problema del viewport su mobile:
- svh (Small Viewport Height): altezza del viewport quando tutta l'UI del browser è visibile (barra degli indirizzi espansa).
- lvh (Large Viewport Height): altezza del viewport quando l'UI del browser è minimizzata (barra degli indirizzi retratta).
- dvh (Dynamic Viewport Height): altezza del viewport corrente, che cambia mentre l'UI del browser si espande o si ritrae.
Le stesse varianti piccolo/grande/dinamico esistono per la larghezza (svw, lvw, dvw) e le unità min/max (svmin, lvmin, dvmin, ecc.). Usa dvh per layout a schermo intero su mobile, svh quando devi garantire che il contenuto sia visibile senza scroll, e lvh quando vuoi riempire il massimo spazio possibile.
Tipografia Fluida con clamp()
La funzione CSS clamp() è un punto di svolta per la tipografia responsive. Accetta tre valori: un valore minimo, un valore preferito e un valore massimo. Il browser sceglie il valore preferito ma lo vincola tra il minimo e il massimo.
/* Font size scales from 1rem to 2.5rem based on viewport */
h1 {
font-size: clamp(1rem, 2.5vw + 0.5rem, 2.5rem);
}
/* Padding scales proportionally */
.container {
padding: clamp(1rem, 3vw, 3rem);
}Questo approccio ti dà i benefici del ridimensionamento basato sul viewport senza il rischio che il testo diventi troppo piccolo su mobile o troppo grande su desktop. Elimina la necessità di breakpoint delle media query per la dimensione del font, riducendo significativamente la complessità del CSS.
Tabella di Riferimento per la Conversione
Usa questa tabella come riferimento rapido per le conversioni comuni. Tutti i valori assumono una dimensione del font radice di 16px e un viewport di 1920x1080.
| px | rem | em (a 16px) | vw (1920px) | % (di 16px) |
|---|---|---|---|---|
| 8px | 0,5rem | 0,5em | 0,417vw | 50% |
| 12px | 0,75rem | 0,75em | 0,625vw | 75% |
| 16px | 1rem | 1em | 0,833vw | 100% |
| 20px | 1,25rem | 1,25em | 1,042vw | 125% |
| 24px | 1,5rem | 1,5em | 1,25vw | 150% |
| 32px | 2rem | 2em | 1,667vw | 200% |
| 48px | 3rem | 3em | 2,5vw | 300% |
| 64px | 4rem | 4em | 3,333vw | 400% |
Migliori Pratiche per le Unità CSS
- Usa rem per le dimensioni del font: questa è la regola più importante. Le dimensioni del font basate su rem rispettano le preferenze dell'utente e si ridimensionano coerentemente in tutta l'applicazione.
- Usa em per la spaziatura dei componenti: padding e margini all'interno dei componenti beneficiano di em perché si ridimensionano proporzionalmente quando la dimensione del font del componente cambia.
- Usa px per bordi e dettagli fini: i valori che non dovrebbero ridimensionarsi con la dimensione del font, come bordi di 1px e offset delle ombre, dovrebbero usare i pixel.
- Usa percentuali per le larghezze di layout: layout flessibili usano larghezze di colonne e contenitori basate su percentuali, permettendo al contenuto di ridisporlo su diverse dimensioni dello schermo.
- Usa unità viewport per elementi a schermo intero: sezioni hero, overlay e qualsiasi elemento che dovrebbe riempire il viewport beneficiano di vh e vw.
- Usa clamp() per la tipografia fluida: sostituisci i breakpoint delle media query per la dimensione del font con clamp() per creare un ridimensionamento fluido tra valori minimi e massimi.
- Non impostare mai il font-size radice in px: usa sempre percentuali (come 62,5%) o mantieni il valore predefinito del browser. Impostarlo in pixel sovrascrive le preferenze di accessibilità dell'utente.
- Sii coerente: scegli una strategia di unità per il tuo progetto e mantienila. Mescolare le unità casualmente rende il codebase più difficile da mantenere e debuggare.
Hai bisogno di convertire rapidamente tra unità CSS? Prova il nostro convertitore online gratuito di unità CSS. Converti istantaneamente tra px e rem, em e px, unità viewport e altro.
Convertitore di Unità CSSDomande Frequenti
Dovrei usare px o rem per la dimensione del font?
Usa rem per le dimensioni del font nella maggior parte dei casi. Le unità rem sono relative alla dimensione del font radice, quindi si ridimensionano quando l'utente cambia la dimensione predefinita del font del browser. Questo migliora l'accessibilità. Usa px solo per dettagli fini come bordi, ombre o quando hai bisogno di una precisione a livello di pixel che non dovrebbe ridimensionarsi con le preferenze dell'utente.
Qual è la differenza tra em e rem?
em è relativo alla dimensione del font dell'elemento genitore, mentre rem è relativo alla dimensione del font radice (tipicamente 16px). em si compone quando annidato, potenzialmente causando cambiamenti di dimensione inaspettati. rem fa sempre riferimento alla stessa base, rendendolo più prevedibile. Usa rem per dimensioni globali, em per il ridimensionamento a livello di componente dove vuoi che gli elementi annidati si ridimensionino proporzionalmente.
Come convertire px in rem?
Dividi il valore in pixel per la dimensione del font radice (tipicamente 16px). Ad esempio, 24px / 16 = 1,5rem. La formula è: rem = px / root-font-size. Se la dimensione del font radice è 16px, allora 1rem = 16px, 0,5rem = 8px, 2rem = 32px. Puoi usare un convertitore di unità CSS online per conversioni rapide.
Quando dovrei usare le unità viewport (vw, vh)?
Usa le unità viewport quando vuoi dimensioni relative alla finestra del browser. I casi d'uso comuni includono sezioni hero a schermo intero (100vh), tipografia che si ridimensiona con la larghezza del viewport (clamp con vw) e layout che dovrebbero riempire lo spazio disponibile. Evita di usare vw da solo per il testo del corpo, poiché può diventare troppo piccolo su mobile o troppo grande su schermi larghi.
Qual è la migliore unità CSS per il design responsive?
Non esiste una singola unità migliore. Una combinazione funziona meglio: rem per dimensioni del font e spaziatura, percentuali per larghezze all'interno dei contenitori, unità viewport per elementi a schermo intero e CSS clamp() per tipografia fluida che si ridimensiona tra dimensioni minime e massime. La chiave è comprendere a cosa fa riferimento ogni unità e scegliere di conseguenza.
ToolHub's collection of 300+ free online tools including CSS unit converters, formatters, and more — no sign-up required.