Couleurs CSS dépendantes du schéma de couleurs avec light-dark()

Les couleurs système peuvent réagir à la valeur color-scheme actuellement utilisée. La fonction light-dark() expose la même fonctionnalité aux auteurs.

En CSS, vous pouvez utiliser de nombreuses couleurs issues de l'un des nombreux espaces de couleurs. Par exemple, vous pouvez utiliser des couleurs nommées, des couleurs hexadécimales, des fonctions de couleur liées à un espace colorimétrique spécifique, la fonction color(), plus générique.

Par exemple, la couleur nommée cornflowerblue peut également être représentée sous la forme #6495ED, hsl(218.54deg 79.19% 66.08%) ou color(display-p3 0.43 0.58 0.9).

En plus de ces différents noms et formats, le CSS inclut des couleurs décrites comme des couleurs système, spécifiées dans le niveau 4 du module de couleurs CSS. Ces couleurs système sont définies par le navigateur et sont représentées par un mot clé.

Par exemple, la couleur système Canvas (à ne pas confondre avec l'élément <canvas>) représente l'arrière-plan du contenu ou des documents de l'application. Il s'associe bien et est destiné à être utilisé conjointement avec CanvasText, qui représente le "texte dans le contenu ou les documents de l'application".

En CSS, vous les utilisez comme suit :

body {
 
color: CanvasText;
 
background-color: Canvas;
}

Par défaut, CanvasText génère une couleur proche de black, et Canvas une couleur proche de white. L'implémentation réelle dépend du navigateur. Par exemple, CanvasText dans Chrome renvoie #121212, tandis que Safari l'a spécifié comme #1e1e1e légèrement plus léger.

Ces couleurs système ont une capacité cachée : elles peuvent répondre à la valeur calculée de la propriété color-scheme. Par exemple, les valeurs de CanvasText et Canvas sont inversées lorsque le color-scheme utilisé est dark.

:root {
 
color-scheme: dark;
}

body
{
 
color: CanvasText;
 
background-color: Canvas;
}

Dans la démonstration suivante, vous pouvez modifier la valeur de color-scheme définie sur :root et observer comment la page réagit.

  • Lorsque la valeur est light dark, cela signifie que l'élément est compatible avec les modes clair et sombre. Le choix de la valeur à utiliser dépend de la valeur de la condition de contenu multimédia prefers-color-scheme.
  • Si défini sur light, cela indique que l'élément accepte un jeu de couleurs claires.
  • Lorsque cette valeur est définie sur dark, cela signifie que l'élément est compatible avec un jeu de couleurs sombre.
Page vous permettant de modifier la valeur de color-scheme. Les couleurs de la page changent lorsque vous passez d'une couleur claire à une couleur sombre ou inversement, même si les déclarations sur l'élément body restent les mêmes.

Découvrez light-dark()

Navigateurs pris en charge

  • Chrome : 123.
  • Edge : 123.
  • Firefox : 120.
  • Safari: 17.5.

Source

Jusqu'à présent, les réactions à la valeur color-scheme utilisée étaient réservées aux couleurs système. Grâce à light-dark(), spécifié dans le niveau 5 du module de couleur CSS, vous pouvez désormais également utiliser cette fonctionnalité.

light-dark() est une fonction qui accepte deux arguments, qui doivent tous deux être de type <color>. L'une des deux options est choisie en fonction du jeu de couleurs utilisé.

  • Si le jeu de couleurs utilisé est light ou inconnu, la valeur calculée de la première valeur est renvoyée.
  • Si le jeu de couleurs utilisé est dark, la valeur calculée de la deuxième couleur est renvoyée.

Le résultat de light-dark() est un <color>. Il peut être utilisé dans le CSS partout où un <color> est accepté. Par exemple, dans les propriétés color et background-color, mais aussi dans une fonction comme linear-gradient().

Dans l'exemple suivant, la couleur d'arrière-plan utilisée est #333 en mode sombre, ou #ccc en mode clair (ou un mode inconnu).

:root {
 
color-scheme: light dark;
}

body
{
 
background-color: light-dark(#ccc, #333);
}

Notez que pour que light-dark() fonctionne correctement, vous devez spécifier un color-scheme. Étant donné que cette propriété hérite, vous la définissez généralement sur :root, mais si vous le souhaitez, vous pouvez la définir sur un élément spécifique.

Application pratique

Dans l'exemple suivant, quelques propriétés personnalisées représentent les couleurs sur la page. Pour prendre en charge le mode sombre, les valeurs de ces propriétés personnalisées sont écrasées par une autre valeur dans une condition multimédia prefers-color-scheme.

:root {
 
--primary-color: #333;
 
--primary-background: #e4e4e4;
 
--highlight-color: hotpink;
}

@media (prefers-color-scheme: dark) {
 
:root {
   
--primary-color: #fafafa;
   
--primary-background: #121212;
   
--highlight-color: lime;
 
}
}
Page qui répond au mode clair ou sombre via prefers-color-scheme.
Les valeurs de couleur sont modifiées en CSS à l'aide d'une requête multimédia.

Grâce à light-dark(), ce code peut être simplifié. Étant donné que color-scheme est défini sur light dark sur :root, les valeurs de ces couleurs changent automatiquement lorsque vous passez du mode clair au mode sombre de votre OS, et inversement.

:root {
 
color-scheme: light dark;
 
--primary-color: light-dark(#333, #fafafa);
 
--primary-background: light-dark(#e4e4e4, #121212);
 
--highlight-color: light-dark(hotpink, lime);
}
Page qui répond au mode clair ou sombre à l'aide de prefers-color-scheme.
Les valeurs de couleur sont modifiées à l'aide de light-dark().

En outre, vous pouvez forcer un sous-arbre du DOM à n'utiliser que le mode clair ou sombre en définissant color-scheme sur dark ou light. Dans l'exemple suivant, elle est appliquée à :root.

Page qui répond au mode clair ou sombre à l'aide de prefers-color-scheme.
Les valeurs de couleur sont modifiées à l'aide de light-dark().
Vous pouvez forcer un mode clair ou sombre à l'aide de l'une des options. Pour ce faire, vous devez manipuler la valeur color-scheme.