Guide de conversion des unites CSS : px, rem, em, vw, vh en detail
Choisir les bonnes unites CSS est l'une des decisions les plus influentes lors de l'ecriture de feuilles de style. Les unites que vous choisissez determinent comment les elements se mettent a l'echelle entre differentes tailles d'ecran, comment ils repondent aux preferences utilisateur (comme les parametres de taille de police du navigateur) et le comportement previsible de la mise en page. Cependant, de nombreux developpeurs utilisent par defaut des pixels par habitude, manquant ainsi la flexibilite et les avantages d'accessibilite offerts par les unites relatives. Ce guide couvre toutes les principales unites CSS, explique quand utiliser chacune, montre comment convertir entre elles et fournit des meilleures pratiques pour la conception responsive moderne.
Comprendre la classification des unites CSS
Les unites CSS se divisent en deux grandes categories : les unites absolues et les unites relatives. Les unites absolues ont une taille physique fixe, tandis que les unites relatives derivent leur valeur calculee d'un autre point de reference. Comprendre cette difference est la base pour faire des choix d'unites eclaires.
Unites absolues
Les unites absolues sont des mesures de taille fixe. L'unite absolue la plus couramment utilisee dans le developpement Web est le pixel (px). D'autres unites absolues incluent le point (pt), le centimetre (cm), le millimetre (mm) et le pouce (in). Ces unites sont principalement utilisees pour les feuilles de style d'impression ou lorsque vous avez besoin de mesures qui ne changent pas avec le contexte. Dans le CSS base sur ecran, px est la seule unite absolue que vous utiliserez regulierement.
Unites relatives
Les unites relatives calculent leur valeur finale basee sur une valeur de reference. em est relatif a la taille de police de l'element actuel, rem est relatif a la taille de police de l'element racine, vw et vh sont relatifs aux dimensions du viewport, et les pourcentages sont relatifs a l'element parent. Les unites relatives sont la pierre angulaire de la conception responsive et accessible, car elles permettent a votre mise en page de s'adapter automatiquement a differents contextes.
Pixels (px) : l'unite de reference
Le pixel est l'unite CSS la plus intuitive car elle correspond directement aux pixels de l'ecran (avec quelques nuances concernant le device pixel ratio). Les valeurs en px sont toujours les memes quel que soit le contexte, ce qui les rend previsibles et faciles a comprendre. Cependant, cette predictabilite a un cout : les dimensions basees sur les pixels ne se mettent pas a l'echelle lorsque l'utilisateur modifie la taille de police par defaut du navigateur, ce qui cree des problemes d'accessibilite.
Quand utiliser px
- Largeur de bordure : une bordure de 1px doit rester a 1px quels que soient les parametres de taille de police.
- Ombre de boite : les decalages d'ombre et les rayons de flou sont generalement mieux exprimes en pixels pour une coherence visuelle.
- Details fins : toute valeur dont la mise a l'ecale perturberait la conception visuelle, comme les separateurs de ligne fine ou le positionnement precis des icones.
- Taille de police racine : regler html { font-size: 16px; } comme base est un modele courant, mais vous devriez respecter la valeur par defaut du navigateur de l'utilisateur.
Quand eviter px
Evitez d'utiliser px pour les tailles de police, les marges interieures, les marges exterieures et les dimensions de mise en page qui devraient s'adapter aux preferences utilisateur. Un utilisateur qui augmente la taille de police de son navigateur a 20px s'attend a ce que tout le texte se mette a l'echelle en consequence, mais les tailles de police basees sur px ne repondent pas a ce changement.
rem : taille relative a la racine
). Dans la plupart des navigateurs, la taille de police racine par defaut est de 16px, donc 1rem = 16px, 0.5rem = 8px, 2rem = 32px. L'avantage cle de rem est qu'il se met a l'echelle lorsque l'utilisateur modifie la taille de police par defaut du navigateur, ce qui en fait le meilleur choix pour l'accessibilite.
Convertir px en rem
La formule de conversion est simple : divisez la valeur en pixels par la taille de police racine.
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 = 3remL'astuce des 62.5%
De nombreux developpeurs trouvent les calculs de division par 16 fastidieux. Une astuce populaire consiste a regler la taille de police racine a 62.5%, ce qui fait que 1rem equivaut a 10px. Cela simplifie le calcul mental : 14px devient 1.4rem, 24px devient 2.4rem, et ainsi de suite.
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 : taille relative au contexte
L'unite em est relative a la taille de police de l'element actuel (ou, pour les proprietes autres que font-size, a celle de son parent). Cela signifie que 1em equivaut a la taille de police actuelle, et les valeurs en em se composent lorsque les elements sont imbriques. Ce comportement de composition peut etre a la fois puissant et deconcertant.
Le probleme de la composition
/* 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;
}Chaque element imbrique multiplie la taille de police, provoquant une croissance exponentielle. C'est pourquoi rem est generalement preferable pour les tailles de police. Cependant, em excelle dans des cas d'utilisation specifiques ou vous souhaitez une mise a l'echelle au niveau du composant.
Quand utiliser em
- Marges interieures et exterieures de composant : lorsque vous souhaitez que l'espacement se mette a l'echelle avec la taille de police du composant, em maintient tout proportionnel. Si vous augmentez la taille de police d'un bouton, ses marges interieures se mettront automatiquement a l'echelle.
- Points de rupture des media queries : certains developpeurs preferent les points de rupture bases sur em car ils se mettent a l'echelle avec les preferences de taille de police de l'utilisateur, assurant que la mise en page s'adapte aux largeurs de contenu appropriees.
- Taille des icones dans les composants : les icones dimensionnees en em se mettent a l'echelle proportionnellement avec le texte environnant.
Unites de la zone de vision : vw, vh, vmin, vmax
Les unites du viewport sont relatives aux dimensions de la fenetre du navigateur. 1vw equivaut a 1% de la largeur du viewport, 1vh equivaut a 1% de la hauteur du viewport. vmin est le plus petit de vw et vh, vmax est le plus grand. Ces unites sont essentielles pour creer des mises en page qui repondent a l'espace d'ecran disponible.
Cas d'utilisation courants des unites de la zone de vision
| Cas d'utilisation | Unite | Exemple |
|---|---|---|
| Hero section pleine hauteur | vh | height: 100vh |
| Typographie fluide | vw + clamp | font-size: clamp(1rem, 2.5vw, 2rem) |
| Mise en page cote a cote | vw | width: 50vw |
| Element carre | vmin | width: 20vmin; height: 20vmin |
| Superposition pleine zone de vision | vw + vh | width: 100vw; height: 100vh |
Le probleme de vh sur mobile
Sur les navigateurs mobiles, 100vh n'est pas toujours egal a la hauteur du viewport visible. La barre d'adresse et les controles de navigation du navigateur occupent de l'espace, mais 100vh inclut la zone derriere ces controles. Cela entraine le masquage du contenu au bas des zones pleine hauteur. Le CSS moderne fournit dvh (dynamic viewport height) comme solution, qui prend en compte les barres d'outils dynamiques. Alternativement, utilisez JavaScript pour definir des proprietes CSS personnalisees basees sur window.innerHeight.
/* Modern approach */
.hero {
height: 100dvh; /* Dynamic viewport height */
}
/* Fallback for older browsers */
.hero {
height: 100vh;
height: 100dvh;
}Nouvelles unites de la zone de vision : svh, lvh, dvh
Le CSS a introduit trois nouvelles unites de hauteur de viewport pour resoudre les problemes de viewport mobile :
- svh (small viewport height) : la hauteur du viewport lorsque toute l'interface utilisateur du navigateur est visible (barre d'adresse deployee).
- lvh (large viewport height) : la hauteur du viewport lorsque l'interface utilisateur du navigateur est minimisee (barre d'adresse retractee).
- dvh (dynamic viewport height) : la hauteur du viewport actuelle, qui change lorsque l'interface utilisateur du navigateur se deploye ou se retracte.
Les memes variantes small/large/dynamic existent pour les largeurs (svw, lvw, dvw) et les unites min/max (svmin, lvmin, dvmin, etc.). Utilisez dvh pour les mises en page plein ecran sur mobile, svh lorsque vous devez garantir que le contenu s'affiche sans defilement, et lvh lorsque vous souhaitez remplir l'espace maximum possible.
Utiliser clamp() pour la typographie fluide
La fonction CSS clamp() est un revirement pour la typographie responsive. Elle accepte trois valeurs : une valeur minimale, une valeur preferee et une valeur maximale. Le navigateur choisit la valeur preferee, mais la contraint entre les valeurs minimale et maximale.
/* 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);
}Cette approche vous offre les avantages de la mise a l'echelle basee sur le viewport sans le risque que le texte devienne trop petit sur mobile ou trop grand sur bureau. Elle elimine le besoin de points de rupture de media queries pour les tailles de police, reduisant significativement la complexite du CSS.
Table de reference de conversion
Utilisez ce tableau comme reference rapide pour les conversions courantes. Toutes les valeurs supposent une taille de police racine de 16px et un viewport de 1920x1080.
| px | rem | em (a 16px) | vw (a 1920px) | % (de 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% |
Meilleures pratiques pour les unites CSS
- Utiliser rem pour les tailles de police : c'est la regle la plus importante. Les tailles de police basees sur rem respectent les preferences utilisateur et se mettent a l'echelle de maniere coherente dans toute l'application.
- Utiliser em pour l'espacement des composants : les marges interieures et exterieures dans les composants beneficient de em car ils se mettent a l'echelle proportionnellement lorsque la taille de police du composant change.
- Utiliser px pour les bordures et les details fins : les valeurs qui ne devraient pas se mettre a l'echelle avec la taille de police (comme les bordures de 1px et les decalages d'ombre) doivent utiliser des pixels.
- Utiliser les pourcentages pour les largeurs de mise en page : les mises en page flexibles utilisent des colonnes et des largeurs de conteneur basees sur des pourcentages, permettant au contenu de se reorganiser entre differentes tailles d'ecran.
- Utiliser les unites de viewport pour les elements plein ecran : les sections hero, les superpositions et tout element qui devrait remplir le viewport beneficient de vh et vw.
- Utiliser clamp() pour la typographie fluide : remplacez les points de rupture de media queries pour les tailles de police par clamp() pour creer une mise a l'echelle fluide entre des valeurs minimale et maximale.
- Ne reglez jamais la taille de police racine en px : utilisez toujours un pourcentage (comme 62.5%) ou conservez la valeur par defaut du navigateur. Regler en pixels ecrase les preferences d'accessibilite de l'utilisateur.
- Soyez coherent : choisissez une strategie d'unites pour votre projet et tenez-vous y. Melanger les unites de maniere aleatoire rend la base de code plus difficile a maintenir et a deboguer.
Besoin de convertir rapidement entre les unites CSS ? Essayez notre convertisseur d'unites CSS en ligne gratuit. Convertissez instantanement entre px et rem, em et px, unites de viewport, et plus encore.
Convertisseur d'unites CSSQuestions frequentes
Faut-il utiliser px ou rem pour la taille de police ?
Utilisez rem pour les tailles de police dans la plupart des cas. Les unites rem sont relatives a la taille de police racine, donc elles se mettent a l'echelle lorsque l'utilisateur modifie la taille de police par defaut du navigateur. Cela ameliore l'accessibilite. Utilisez px uniquement pour les details fins comme les bordures et les ombres, ou lorsque vous avez besoin d'une precision au niveau du pixel qui ne devrait pas se mettre a l'echelle avec les preferences utilisateur.
Quelle est la difference entre em et rem ?
em est relatif a la taille de police du parent, tandis que rem est relatif a la taille de police racine (generalement 16px). em se compose lors de l'imbrication, ce qui peut provoquer des changements de taille inattendus. rem fait toujours reference a la meme base, ce qui le rend plus previsible. Utilisez rem pour les dimensions globales et em pour la mise a l'echelle au niveau du composant lorsque vous souhaitez que les elements imbriques se mettent a l'echelle proportionnellement.
Comment convertir px en rem ?
Divisez la valeur en pixels par la taille de police racine (generalement 16px). Par exemple, 24px / 16 = 1.5rem. La formule est : rem = px / taille-police-racine. Si la taille de police racine est de 16px, alors 1rem = 16px, 0.5rem = 8px, 2rem = 32px. Vous pouvez utiliser un convertisseur d'unites CSS en ligne pour des conversions rapides.
Quand faut-il utiliser les unites de la zone de vision (vw, vh) ?
Utilisez les unites de viewport lorsque vous souhaitez des dimensions relatives a la fenetre du navigateur. Les cas d'utilisation courants incluent les sections hero plein ecran (100vh), la typographie qui se met a l'echelle avec la largeur du viewport (clamp avec vw), et les mises en page qui doivent remplir l'espace disponible. Evitez d'utiliser vw seul pour le texte du corps, car il peut devenir trop petit sur mobile ou trop grand sur les ecrans larges.
Quelle est la meilleure unite CSS pour le design responsive ?
Il n'y a pas d'unite unique qui soit la meilleure. Les combinaisons fonctionnent le mieux : rem pour les tailles de police et les espacements, les pourcentages pour les largeurs dans les conteneurs, les unites de viewport pour les elements plein ecran, et CSS clamp() pour la typographie fluide qui se met a l'echelle entre des tailles minimale et maximale. La cle est de comprendre a quoi chaque unite fait reference et de choisir en consequence.
ToolHub's collection of 300+ free online tools including CSS unit converters, formatters, and more — no sign-up required.