239 votes

Comment puis-je définir des couleurs en tant que variables dans les CSS ?

Je travaille sur un fichier CSS qui est assez long. Je sais que le client pourrait demander des modifications du schéma de couleurs, et je me demandais : est-il possible d'attribuer des couleurs à des variables, de sorte qu'il me suffise de modifier une variable pour que la nouvelle couleur soit appliquée à tous les éléments qui l'utilisent ?

Veuillez noter que je ne peux pas utiliser PHP pour modifier dynamiquement le fichier CSS.

0 votes

1 votes

0 votes

256voto

ArtyMcFly Points 1624

CSS prend en charge cette fonction de manière native avec Variables CSS .

Exemple de fichier CSS

:root {
    --main-color:#06c;
}

#foo {
    color: var(--main-color);
}

Pour un exemple concret, veuillez consulter ce JSFiddle (l'exemple montre que la couleur de l'un des sélecteurs CSS est codée en dur sur le bleu, tandis que l'autre sélecteur CSS utilise des variables CSS, tant dans la syntaxe originale que dans la syntaxe actuelle, pour définir la couleur sur le bleu).

Manipulation d'une variable CSS en JavaScript/côté client

document.body.style.setProperty('--main-color',"#6c0")

Le support est assuré dans tous les navigateurs modernes

Firefox 31+. , Chrome 49 , Safari 9.1 et plus , Microsoft Edge 15+ (en anglais) et Opéra 36+. sont dotés d'une prise en charge native des variables CSS.

3 votes

Juste au cas où quelqu'un d'autre lirait ceci et essaierait de le faire fonctionner dans Safari - la prise en charge des CSS semble avoir été supprimée de Webkit au printemps/été 2013. bugs.webkit.org/show_bug.cgi?id=114119 lists.webkit.org/pipermail/webkit-dev/2013-avril/024476.html Cela fonctionne toujours dans Chrome après avoir activé le drapeau mentionné ci-dessus.

1 votes

Testé sur chrome 36, ne fonctionne pas même avec le drapeau activé. Fonctionne toujours avec firefox

1 votes

Je viens de vérifier avec Chrome Version 49.0.2623.110 m et cela ne fonctionne toujours pas.

66voto

wheresrhys Points 6087

Les gens n'arrêtent pas d'upvoter ma réponse, mais c'est une solution terrible comparée à la joie de sass ou moins d'autant plus qu'il existe un grand nombre d'outils faciles à utiliser. gui pour les deux ces jours-ci. Si vous avez un peu de bon sens, ignorez tout ce que je suggère ci-dessous.

Vous pourriez mettre un commentaire dans le css avant chaque couleur afin de servir de variable, dont vous pouvez changer la valeur en utilisant la recherche/remplacement, donc...

En haut du fichier css

/********************* Colour reference chart****************
*************************** comment ********* colour ******** 

box background colour       bbg              #567890
box border colour           bb               #abcdef
box text colour             bt               #123456

*/

Plus loin dans le fichier CSS

.contentBox {background: /*bbg*/#567890; border: 2px solid /*bb*/#abcdef; color:/*bt*/#123456}

Ensuite, pour, par exemple, modifier la couleur du texte de la boîte, vous effectuez une recherche/remplacement sur le lien suivant

/*bt*/#123456

3 votes

L'ajout de commentaires ne fonctionnera pas dans certains cas, comme l'utilisation de filtres IE. Je ne peux pas mettre de commentaires ici -> filter : progid:DXImageTransform.Microsoft.gradient( startColorstr='#3f5619', endColorstr='#77842f',GradientType=0 ) ; /* IE6-9 */

4 votes

Downvoted parce que vous avez raison, c'est une solution terrible.

0 votes

J'ai personnellement préféré votre style de réponse côté client aux solutions côté serveur, et j'ai donc créé quelque chose pour le faire. Ce n'est pas génial, mais ça marche stackoverflow.com/a/44936706/4808079

37voto

singingwolfboy Points 1358

Le CSS lui-même n'utilise pas de variables. Cependant, vous pouvez utiliser un autre langage comme SASS pour définir votre style à l'aide de variables et produire automatiquement des fichiers CSS, que vous pouvez ensuite mettre sur le Web. Notez que vous devrez relancer le générateur à chaque fois que vous modifierez votre CSS, mais ce n'est pas si difficile.

17 votes

Je pense que la réponse est MAINTENANT (2016) incorrecte, n'est-ce pas ? Même si je pense qu'il est toujours préférable d'utiliser SASS ou autre.

0 votes

L'utilisation des variables CSS peut être préférable à SASS, car avec SASS, les couleurs ne peuvent être modifiées que de manière statique. Avec les variables CSS, les couleurs peuvent être modifiées au moment de l'exécution, c'est-à-dire que vous pouvez passer en "mode sombre" à l'aide d'un bouton en javascript.

30voto

Vitalii Fedorenko Points 17469

Vous pouvez essayer Variables CSS3 :

body {
  --fontColor: red;
  color: var(--fontColor);
}

1 votes

Remarque : Le préfixe de la propriété personnalisée était var- dans la spécification précédente, mais il a ensuite été remplacé par --. Firefox 31 et les versions ultérieures suivent la nouvelle spécification. (bogue 985838) developer.mozilla.org/fr/US/docs/Web/CSS/Using_CSS_variables

21voto

cballou Points 13804

Il n'y a pas de solution facile et unique en CSS. Vous pourriez le faire :

  • Trouver toutes les instances de background-color et color dans votre fichier CSS et créez un nom de classe pour chaque couleur unique.

    .top-header { color: #fff; }
    .content-text { color: #f00; }
    .bg-leftnav { background-color: #fff; }
    .bg-column { background-color: #f00; }
  • Passez ensuite en revue toutes les pages de votre site où la couleur est impliquée et ajoutez les classes appropriées pour la couleur et la couleur de fond.

  • Enfin, supprimez toutes les références de couleurs dans votre CSS autres que les classes de couleurs que vous venez de créer.

1 votes

Mais que faire si le client décide qu'il veut que tous les éléments rouges soient verts ? Il faudrait alors modifier la classe "red" pour qu'elle fournisse "color : green", ce qui devient confus et difficile à maintenir.

0 votes

@singingwolfboy, j'aurais dû être plus précis dans la dénomination des classes. Il est plus facile de référencer le ou les éléments auxquels elles se rapportent afin de pouvoir les modifier facilement à l'avenir.

8 votes

@downvoters, c'est un CSS UNIQUEMENT solution. Il existe de nombreuses solutions alternatives impliquant des scripts ou une CLI. n'ayant pas l'intention de le faire .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X