Unités
Couleurs
Les couleurs sont largement utilisées en CSS, que ce soit pour la couleur du texte, la couleur de fond, les dégradés, les ombres, les bordures, etc. Il existe plusieurs façons de définir les couleurs en CSS, chacune avec ses avantages et ses inconvénients.
Noms de couleur
CSS fournit 145 noms de couleurs, des plus basiques (noir, blanc, orange, jaune, bleu…) aux plus spécifiques (lawngreen, orchid, crimson…). Comme l’on souhaite probablement des couleurs plus spécifiques, les noms de couleurs ne sont pas souvent utilisés.
rgb et rgba
Les écrans d’ordinateur, les téléviseurs et les téléphones mobiles utilisent tous le modèle de couleur RVB (Rouge/Vert/bleu) pour afficher les couleurs. Chaque couleur est définie par une combinaison de rouge, vert et bleu. Il y a 256 valeurs possibles pour le rouge, le vert ou le bleu. Étant donné que les ordinateurs commencent à compter à zéro, la valeur maximale est de 255.
Étant donné qu’une couleur est le résultat d’une combinaison de rouge, de vert et de bleu, chacune de ces 3 couleurs ayant 256 valeurs possibles, il existe 256 256 256 = 16 777 216 couleurs possibles.
Le modèle RVB étant directement lié à la manière dont les couleurs sont rendues physiquement, il est devenu une unité de couleur CSS.
Par exemple, la couleur de ce paragraphe est 219 de rouge, 78 de vert et 68 de bleu
p { color: rgb(219, 78, 68); }
La couleur noire ne contient ni rouge, ni vert, ni bleu:
body { color: rgb(0, 0, 0); }
De l’autre côté du spectre, le blanc correspond à la quantité maximale de rouge, vert et bleu:
body { background: rgb(255, 255, 255); }
L’unité de couleur rgba
ajoute à rgb
une valeur alpha (comprise entre 0 et 1, en valeurs décimales), qui définit le degré de transparence de la couleur:
body { color: rgba(0, 0, 0, 0.8); }
Une couleur noire légèrement transparente.
hsl et hsla
HSL est un autre moyen de définir une couleur, qui fonctionne de manière plus intuitive :
Au lieu d’une couleur combinant rouge, vert et bleu, on définit :
- la teinte : une valeur allant de 0 à 360, parcourant le cercle chromatique (rouge, jaune, vert, bleu, violet…).
- le pourcentage de saturation, compris entre 0% et 100%, définit la “quantité de couleur”.
- le pourcentage de luminosité, compris entre 0% et 100%, définit le niveau de luminosité.
La couleur de ce paragraphe est définie ainsi : color: hsl (4,68%, 56%);
.
4 indique qu’il est rouge, 68% indique que la saturation est assez importante, 56% indique qu’il est à mi-chemin entre le noir et le blanc
hsla
est identique à hsl
, avec la possibilité de définir une valeur alpha:
body {couleur: hsla (4, 68%, 56%, 0.5);}
Hexadécimal
Une autre manière de déterminer une couleur est d’utiliser la notation hexadécimale.
On le note :
p { color: #db4e44; }
Héxaquoi ?
Si le système décimal permet d’énumérer dix valeurs (0, 1, 2, 3, 4, 5, 6, 7, 8, 9), le système hexadécimal en permet 16 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F). Les valeurs RVB du rouge précédemment utilisé peuvent alors être décrites ainsi :
- Rouge : 219 => db
- Vert : 78 => 4e
- Bleu : 68 => 44
Les valeurs hexadécimales sont plus difficilement lisibles, mais plus facilement copiables depuis le sélecteur de couleurs du système d’exploitation, de photohop ou d’illustrator.
Oklch
Oklch
est une nouvelle manière (au moment où ces lignes sont écrites) de déterminer des couleurs. La notation fonctionnelle oklch()
exprime une couleur donnée dans l'espace de couleur OKLab, qui essaie de se rapprocher de la perception de la couleur par l'œil humain, en utilisant les coordonnées polaires (le « cercle chromatique ») pour la teinte.
Voir oklch.com.
Dimensions
Il existe de nombreuses propriétés CSS nécessitant des unités de dimension :
font-size
définit la taille du texteborder-width
définit la graisse des bordures d’élémentmargin
définit l’espacement entre les élémentspadding
définit l’espacement entre l’élément et ses enfantsleft/right/top/bottom
permettent de positionner et de déplacer des éléments
Les unités les plus utilisées sont:
px
pour les pixels%
,vw
ouvh
pour les pourcentagesem
ourem
pour le dimensionnement par rapport au corps du texte
Pixels
Étant donné que les écrans d’ordinateur utilisent des pixels pour afficher le contenu, il s’agit de l’unité de taille la plus courante en CSS.
Elle peut être utilisée pour fixer la largeur d’un élément:
div { width: 400px; }
Ou pour définir la taille du texte:
p { font-size: 20px; }
Les pixels en CSS sont simples car ils définissent des valeurs absolues: ils ne sont pas affectés par les autres propriétés CSS héritées. Ils sont également largement utilisés à des fins de positionnement et d’espacement.
Les pourcentages
Les pourcentages sont des unités relatives: ils dépendent du parent et / ou de l’ancêtre de l’élément.
Par exemple, les éléments de niveau bloc tels que les paragraphes occupent naturellement toute la largeur disponible. La règle CSS suivante les redimensionnera à la moitié de la largeur disponible.
p { width: 50%; }
Les pourcentages peuvent aider à définir d’autres propriétés CSS, telles que la taille du texte:
strong { font-size: 150%; }
/* l’élément strong aura une taille une fois et demi supérieure à celle de l’élément qui le contient */
Les unités vw
et vh
permettent de signifier des dimensions en fonction de la taille de la fenêtre du navigateur (vh = viewport height, vw = viewport width). Ainsi :
.huge { font-size: 8vw; }
Donnera un corps de texte lié à la taille de la fenêtre (redimensionnez le navigateur).
PLUS GROS
Em
em
est une unité relative: elle dépend de la valeur de corps (la “taille” de la police) de l’élément.
Par exemple, si le parent a un corps de 20px et que l’on applique font-size: 0.8em
à un élément enfant, cet élément enfant aura un corps de 16px.
L’unité em
permet de définir les corps de texte des éléments HTML les uns par rapport aux autres.
Par exemple, les <h1>
peuvent être deux fois plus grand que le corps de texte, les <h2>
seulement 1,5 fois plus grand et la barre latérale légèrement plus petite :
body { font-size: 16px; }
h1 { font-size: 2em; } /* = 32px */
h2 { font-size: 1.5em; } /* = 24px */
aside { font-size: 0.75em; } /* = 12px */
Si l’on décide de modifier la taille du corps de texte, la taille relative des titres et de la barre latérale changera en conséquence, laissant la page visuellement équilibrée.
En changeant juste une valeur, toutes les autres valeurs sont modifiées:
body { font-size: 20px; }
h1 { font-size: 2em; } /* = 40px */
h2 { font-size: 1.5em; } /* = 30px */
aside { font-size: 0.75em; } /* = 16px */
Rem
L’unité rem
(pour root em) est similaire à em
, mais au lieu de dépendre de la valeur du parent, elle repose sur la valeur de l’élément “racine”, l’élément <html>
.
html { font-size: 18px; }
corps { font-size: 1rem; } /* = 18px */
h1 { font-size: 2rem; } /* = 36px */
h2 { font-size: 1.5rem; } /* = 27px */
La différence entre rem
et em
est que les valeurs de rem
sont fixes alors que les valeurs em
peuvent se multiplier en fonction du contexte.
—
Contenu adapté de Jeremy Thomas, sous license CC BY-NC-SA 4.0.