Nous utilisons les cookies afin de fournir les services et fonctionnalités proposés sur notre site et afin d’améliorer l’expérience de nos utilisateurs. Pour plus d'informations nous vous invitons à consulter notre Politiques sur les cookies ainsi que notre Politique de confidentialité.

Comprendre la fonction CSS color-mix()

Qu'est-ce que color-mix() ?

La fonction color-mix() permet de combiner deux couleurs en CSS pour en créer une nouvelle. Cette fonctionnalité rend possible des mélanges dynamiques et précis directement dans les feuilles de style, sans utiliser de préprocesseur.

Pourquoi utiliser color-mix() ?

Elle simplifie la création de palettes cohérentes, les effets de survol personnalisés, ou encore les thèmes dynamiques. Elle permet aussi de gagner en maintenabilité et en lisibilité du code.

Structure de la fonction

La syntaxe générale de color-mix() est :

  • Un espace colorimétrique (ex. : srgb, hsl, lab)
  • Une première couleur, avec un pourcentage optionnel
  • Une seconde couleur, également avec un pourcentage optionnel

Si les pourcentages ne sont pas définis, le mélange est équitable par défaut (50%/50%). Les pourcentages doivent idéalement totaliser 100%.

Les espaces colorimétriques

Le choix de l'espace colorimétrique a un impact sur le rendu final. Voici les plus courants :

  • srgb : standard pour le web, linéaire mais parfois imprécis dans certaines transitions
  • hsl : utile pour les transitions douces sur la teinte, la saturation et la lumière
  • lab : perceptuellement uniforme, plus fidèle à la perception humaine

Prise en compte de la transparence

color-mix() gère également la transparence. Si une ou les deux couleurs contiennent un canal alpha, il sera aussi combiné en fonction des proportions définies.

Compatibilité navigateur

Étant une fonctionnalité récente du CSS, son utilisation nécessite des navigateurs modernes. Il est recommandé de tester le rendu et de prévoir des solutions alternatives pour une compatibilité maximale.

Code CSS d'exemple

:root {
  --main-color: #347ab7;
  --white: #ffffff;
  --black: #000000;
}

/* Exemple d'utilisation */
.element-transparent {
  /* Teinte principale atténuée (25% de transparence) */
  color: color-mix(in srgb, transparent, var(--main-color) 75%);
}

.element-lightened {
  /* Teinte principale mélangée à 10% de blanc = plus claire */
  color: color-mix(in srgb, var(--white) 10%, var(--main-color));
}

.element-darkened {
  /* Teinte principale mélangée à 10% de noir = plus sombre */
  color: color-mix(in srgb, var(--black) 10%, var(--main-color));
}

Explication

color-mix(in srgb, transparent, var(--main-color) 75%) :

Cela signifie 75% de --main-color mélangé avec 25% de transparence. L’effet visuel sera une couleur moins opaque, utile pour des overlays ou effets de flou.

color-mix(in srgb, var(--white) 10%, var(--main-color)) :

Tu ajoutes 10% de blanc à la couleur principale, ce qui l’éclaircit subtilement.

color-mix(in srgb, var(--black) 10%, var(--main-color)) :

Tu ajoutes 10% de noir, ce qui donne une teinte plus sombre, très pratique pour des hover, bordures ou thèmes sombres.

Exemple d'un fichier complet pour color-mix()

<!DOCTYPE html>
<html lang="fr">
<head>
  <meta charset="UTF-8">
  <title>Test color-mix()</title>
  <style>
    :root {
      --main-color: #347ab7;
      --white: #ffffff;
      --black: #000000;
    }

    body {
      font-family: sans-serif;
      background: #f5f5f5;
      padding: 2rem;
    }

    h1 {
      color: var(--main-color);
    }

    .box {
      padding: 1rem;
      margin-bottom: 1rem;
      border-radius: 8px;
      font-weight: bold;
    }

    .element-transparent {
      background-color: color-mix(in srgb, transparent, var(--main-color) 75%);
      border: 1px solid var(--main-color);
    }

    .element-lightened {
      background-color: color-mix(in srgb, var(--white) 10%, var(--main-color));
      border: 1px solid var(--main-color);
    }

    .element-darkened {
      background-color: color-mix(in srgb, var(--black) 10%, var(--main-color));
      border: 1px solid var(--main-color);
    }
  </style>
</head>
<body>

  <h1>Démo de la fonction <code>color-mix()</code> en CSS</h1>

  <div class="box element-transparent">
    Couleur principale + transparence (75%)
  </div>

  <div class="box element-lightened">
    Couleur principale + 10% de blanc
  </div>

  <div class="box element-darkened">
    Couleur principale + 10% de noir
  </div>

</body>
</html>

Voir un exemple sur codepen de :

color-mix() en CSS

Vous désirez un site internet pour vous ou votre entreprise ? contactez-nous !
Haut de la page