Manipuler les couleurs en CSS avec color-mix()
Quand on potasse le design de nos forums, on a souvent besoin de trouze mille couleurs pour faire quelque chose d'à peu près joli. Parfois, on aurait juste besoin de variantes "plus claire", "plus sombre", "semi-transparente" de notre couleur de base. En temps normal, on va donc devoir définir chacune de nos couleurs une par une, chacune son code hexadécimal péniblement pioché sur une palette.
Mais en CSS moderne, il existe maintenant color-mix(), une fonction qui est prise en charge par la plupart des navigateurs modernes.
La fonction prend trois valeurs, séparées par des virgules :
L'espace de couleurs : Je n'ai pas les connaissances en colorimétrie pour expliquer ça, mais c'est apparemment utilisé pour définir quelle formule mathématique est utilisée pour mélanger les couleurs. Il y a plusieurs valeurs disponibles, j'ai vu beaucoup de gens conseiller oklab, mais je ne saurais pas trop expliquer pourquoi. On écrira donc in oklab, pour dire qu'on utilise l'espace de couleurs oklab.
Une première couleur, dans n'importe quel format (rgb, hsl, hexadécimal, etc...), suivie ou non d'un pourcentage
Une deuxième couleur, dans n'importe quel format, suivie ou non d'un pourcentage
En ce qui concerne les pourcentages facultatifs :
Si on ne définit aucun pourcentage, par défaut, ça sera un mélange 50/50 entre les deux couleurs
Si on définit seulement le pourcentage d'une seule des couleurs, par exemple 30%, alors la somme des deux fera automatiquement 100%, donc par exemple 30/70
Si le total fait moins de 100%, le résultat final sera partiellement transparent.
Donc, si nous souhaitons utiliser la couleur #663399, mais juste légèrement transparente, par exemple pour la mettre par-dessus une image, on l'écrira comme ça :
color-mix(in srgb, #663399, transparent 25%)
Et vous pouvez parfaitement utiliser une propriété customisée (variable CSS) à la place des couleurs, ce qui vous facilitera d'autant plus le travail !
--color-primary: #663399; --color-primary-light: color-mix(in oklab, var(--color-primary) 60%, white); --color-primary-black: color-mix(in oklab, var(--color-primary) 60%, black);
(Tumblr gère mal le code, comme d'habitude, donc je rajoute une image)
Pour rappel, les propriétés customisées CSS sont précédées de deux tirets -- et peuvent être utilisées avec var().
On peut faire des tas de choses avec cette fonction color-mix(), et je vous recommande d'aller jeter un coup d'œil aux vidéos de Kevin Powell pour vous faire une idée. Même si l'anglais ne vous parle pas, le visuel devrait vous aider à comprendre à quel point c'est cool !
Pour en savoir plus :
Vidéo de Kevin Powell - A deep dive into CSS color-mix()
Vidéo de Kevin Powell - Using currentColor with color-mix()
Article francophone du MDN sur color-mix()
Article anglophone (et plus complet) du MDN sur color-mix()













