584 votes

Changez dynamiquement la couleur en plus clair ou plus foncé par pourcentage CSS

Nous avons une grande application sur le site et nous avons quelques liens qui sont, disons de couleur bleue comme les liens bleus sur ce site. Maintenant, je veux créer d'autres liens, mais avec une couleur plus claire. Je peux évidemment le faire simplement en ajoutant le code hexadécimal dans le fichier CSS, mais notre site laisse l'utilisateur décider des couleurs qu'il souhaite pour son profil/site personnalisé (comme Twitter).

Ma question est donc la suivante : peut-on réduire la couleur en pourcentage ?

Disons que le code suivant est CSS :

a {
  color: blue;
}

a.lighter {
  color: -50%; // obviously not correct way, but just an idea
}

OU

a.lighter {
  color: blue -50%;  // again not correct, but another example of setting color and then reducing it
}

Existe-t-il un moyen de réduire une couleur par un pourcentage ?

1 votes

Je ne m'y connais pas en CSS, mais que signifie réduire une couleur ? La rendre plus transparente ? Ou voulez-vous modifier les canaux RVB individuels de la couleur ?

0 votes

Non, pas le transparent, mais le fait de réduire la couleur par hex ou rbg ou hsl

0 votes

@basit Vous pourriez envisager de rendre le titre de la question plus spécifique afin qu'elle puisse être plus facilement trouvée à l'avenir par d'autres personnes ayant un problème similaire.

524voto

Grant Crofton Points 3176

Tous les navigateurs modernes ont 100% filter soutien depuis janvier 2020 . Même UC Browser pour Android (au lieu de Chrome, sur les téléphones à 80 $) le prend en charge.

a {
    /* a nice, modern blue for links */
    color: #118bee;
}
a:active {
    /* Darken on click by 15% (down to 85%) */
    filter: brightness(0.85);
}

En outre, vous pouvez contrôler cela de manière dynamique avec des variables CSS, qui sont prises en charge par la plupart des navigateurs. depuis octobre 2017 (à l'exclusion de QQ) :

:root {
    --color: #118bee;
    --hover-brightness: 1.2;
}
a {
    color: var(--color);
}
a:active {
    /* Darken on click */
    filter: brightness(var(--hover-brightness));
}

Ce n'est pas mon projet, mais c'est un exemple concret de l'efficacité des CSS modernes : MVP.css


Réponse originale

Si vous utilisez une pile qui vous permet d'utiliser la fonction Sass o Moins vous pouvez utiliser l'option lighten fonction :

$linkcolour: #0000FF;

a {
  color: $linkcolour;
}

a.lighter {
  color: lighten($linkcolour, 50%);
}

Il y a aussi darken qui fait la même chose, mais dans la direction opposée.

38 votes

Cette installation a renforcé mon intérêt pour le SASS.

0 votes

Récemment, je me suis retrouvé dans un scénario de cours accéléré à résoudre avant hier, compass et sass ont totalement sauvé mon équipe et m'ont fait passer pour une sorte de ninja CSS. Mixen's a également été assez utile.

43 votes

LESS a aussi ceci, d'ailleurs.

125voto

Pekka 웃 Points 249607

Il existe une "opacité" qui permet de faire ressortir l'arrière-plan :

opacity: 0.5;

mais je ne suis pas sûr que ce soit ce que vous voulez dire. Définissez "réduire la couleur" : Rendre transparent ? Ou ajouter du blanc ?

8 votes

@Basit "Je suppose" ? Vous devriez savoir. Mais dans tous les cas, si votre fond est blanc, vous pouvez "simuler" la luminosité en le rendant plus transparent - j'ai utilisé cela à bon escient récemment.

3 votes

L'astuce "opacité" fonctionne également si le fond est noir (une opacité de 0,5 rend la couleur plus foncée sur un fond noir).

1 votes

Cette fonction est idéale pour ajouter un changement de couleur dynamique pour un effet de survol.

89voto

Spliff Points 61

Les couleurs HSL apportent une réponse, une valeur de couleur HSL est spécifiée avec : hsl(hue [0,255], saturation %, lightness %).

HSL est supporté dans IE9+, Firefox, Chrome, Safari, et dans Opera 10+.

a
{
color:hsl(240,65%,50%);
}
a.lighter 
{
color:hsl(240,65%,75%);
}

20voto

trebor1979 Points 121

Dans LESS, vous utiliseriez les variables suivantes :

@primary-color: #999;
@primary-color-lighter: lighten(@primary-color, 20%);

Cette méthode prend la première variable et l'éclaircit de 20 % (ou de tout autre pourcentage). Dans cet exemple, vous obtiendrez une couleur plus claire : #ccc

13voto

ctford Points 3599

Pour autant que je sache, il n'y a aucun moyen de faire cela en CSS.

Mais je pense qu'une petite logique côté serveur pourrait facilement faire ce que vous suggérez. Les feuilles de style CSS sont normalement des actifs statiques, mais il n'y a aucune raison pour qu'elles ne puissent pas être générées dynamiquement par du code côté serveur. Votre script côté serveur le ferait :

  1. Vérifier un paramètre URL pour déterminer l'utilisateur et donc la couleur choisie par l'utilisateur. Utilisez un paramètre d'URL plutôt qu'une variable de session afin de pouvoir conserver le cache du CSS.
  2. Décomposer la couleur en ses composantes rouge, verte et bleue.
  3. Augmentez chacun des trois composants d'une quantité déterminée. Faites des essais pour obtenir les résultats que vous recherchez.
  4. Générer un CSS incorporant la nouvelle couleur

Les liens vers cette page génératrice de CSS ressembleraient à quelque chose comme :

<link rel="stylesheet" href="http://yoursite.com/custom.ashx?user=1231">

Si vous n'utilisez pas l'extension .css, veillez à définir correctement le type MIME afin que le navigateur sache qu'il doit interpréter le fichier comme un fichier CSS.

(Notez que pour rendre les couleurs plus claires, vous devez soulever chacune des valeurs RVB)

0 votes

Il existe des approches basées sur JavaScript qui pourraient être plus faciles à mettre en œuvre. Voir par exemple experts-exchange.com/Programmation/Langues/Scripting/JavaScript/

0 votes

Une suggestion intéressante. Y aurait-il un risque de clignotement des couleurs pendant le chargement de la page si vous utilisiez JS ?

0 votes

J'ai utilisé des techniques comme celle-ci - chaque utilisateur reçoit sa propre feuille de style - en conjonction avec une page de préférences où l'utilisateur spécifie ses choix de couleurs. Notez que vous n'êtes pas obligé de copier l'intégralité de la feuille de style, et que vous ne devriez pas le faire. Vous pouvez avoir plusieurs feuilles de style dans une page, ainsi vous pouvez avoir une feuille de style générique pour les choses qui sont les mêmes pour tout le monde et ensuite une feuille de style personnalisée pour les choses qui sont différentes. Dans notre cas, nous avions une feuille de style personnalisée par défaut pour la (majorité des) utilisateurs qui se contentaient de la feuille par défaut.

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