J'ai réfléchi à ce qui suit depuis un moment déjà, alors maintenant je veux connaître vos opinions, les solutions possibles, etc.
Je recherche un plugin ou une technique qui change la couleur d'un texte ou bascule entre des images / icônes prédéfinies en fonction de la luminosité moyenne des pixels couverts de l'image d'arrière-plan ou de la couleur de son parent.
Si la zone couverte de son arrière-plan est plutôt sombre, rendez le texte blanc ou changez les icônes.
De plus, ce serait formidable si le script remarquait si le parent n'a pas de couleur d'arrière-plan ou d'image définie et continue à rechercher le plus proche (de l'élément parent à son élément parent ..).
Que pensez-vous, que savez-vous de cette idée? Y a-t-il déjà quelque chose de similaire? exemples de script?
Bravo, J.
Réponses:
Ressources intéressantes pour cela:
Voici l'algorithme du W3C (avec la démo JSFiddle aussi ):
la source
Cet article sur 24 façons de calculer le contraste des couleurs pourrait vous intéresser. Ignorez le premier ensemble de fonctions car elles sont incorrectes, mais la formule YIQ vous aidera à déterminer s'il faut ou non utiliser une couleur de premier plan claire ou foncée.
Une fois que vous avez obtenu la couleur d'arrière-plan de l'élément (ou de l'ancêtre), vous pouvez utiliser cette fonction de l'article pour déterminer une couleur de premier plan appropriée:
la source
const getContrastYIQ = hc => { const [r, g, b] = [0, 2, 4].map( p => parseInt( hc.substr( p, 2 ), 16 ) ); return ((r * 299) + (g * 587) + (b * 114)) / 1000 >= 128; }
Question interessante. Ma pensée immédiate a été d'inverser la couleur de l'arrière-plan en tant que texte. Cela implique simplement d'analyser l'arrière-plan et d'inverser sa valeur RVB.
Quelque chose comme ça: http://jsfiddle.net/2VTnZ/2/
la source
#808080
!?mix-blend-mode
fait l'affaire:Ajout (mars 2018): Suite, un joli tutoriel expliquant tous les différents types de modes / implémentations: https://css-tricks.com/css-techniques-and-effects-for-knockout-text/
la source
J'ai trouvé le script BackgroundCheck très utile.
Il détecte la luminosité globale de l'arrière-plan (que ce soit une image d'arrière-plan ou une couleur) et applique une classe à l'élément de texte attribué (
background--light
oubackground--dark
), en fonction de la luminosité de l'arrière-plan.Il peut être appliqué aux éléments fixes et mobiles.
( Source )
la source
Si vous utilisez ES6, convertissez hexadécimal en RVB puis pouvez utiliser ceci:
la source
Voici ma tentative:
Alors pour l'utiliser:
Cela rendra immédiatement le texte noir ou blanc selon le cas. Pour faire les icônes:
Ensuite, chaque icône pourrait ressembler à
'save' + iconSuffix + '.jpg'
.Notez que cela ne fonctionnera pas lorsqu'un conteneur déborde de son parent (par exemple, si la hauteur CSS est de 0 et que le dépassement n'est pas masqué). Faire fonctionner cela serait beaucoup plus complexe.
la source
En combinant les réponses [@ alex-ball, @jeremyharris], j'ai trouvé que c'était la meilleure façon pour moi:
la source