Ich habe bereits eine Weile über Folgendes nachgedacht, daher möchte ich jetzt Ihre Meinungen, mögliche Lösungen usw. kennen.
Ich suche nach einem Plugin oder einer Technik, die die Farbe eines Textes ändert oder zwischen vordefinierten Bildern / Symbolen wechselt, abhängig von der durchschnittlichen Helligkeit der abgedeckten Pixel des Hintergrundbilds oder der Farbe des Elternteils.
Wenn der abgedeckte Bereich des Hintergrunds eher dunkel ist, machen Sie den Text weiß oder wechseln Sie die Symbole.
Darüber hinaus wäre es großartig, wenn das Skript feststellen würde, ob das übergeordnete Element keine definierte Hintergrundfarbe oder kein definiertes Bild hat, und dann weiter nach dem nächstgelegenen suchen würde (vom übergeordneten Element zum übergeordneten Element).
Was denkst du, weißt du über diese Idee? Gibt es da draußen schon etwas Ähnliches? Skriptbeispiele?
Cheers, J.
Antworten:
Interessante Ressourcen dafür:
Hier ist der W3C-Algorithmus (auch mit JSFiddle-Demo ):
quelle
Dieser Artikel über 24 Möglichkeiten zur Berechnung des Farbkontrasts könnte für Sie von Interesse sein. Ignorieren Sie die ersten Funktionen, da sie falsch sind. Mit der YIQ-Formel können Sie jedoch feststellen, ob Sie eine helle oder dunkle Vordergrundfarbe verwenden möchten.
Sobald Sie die Hintergrundfarbe des Elements (oder des Vorfahren) erhalten haben, können Sie diese Funktion aus dem Artikel verwenden, um eine geeignete Vordergrundfarbe zu bestimmen:
quelle
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; }
Interessante Frage. Mein unmittelbarer Gedanke war, die Farbe des Hintergrunds als Text umzukehren. Dazu müssen Sie lediglich den Hintergrund analysieren und seinen RGB-Wert invertieren.
So etwas wie das: http://jsfiddle.net/2VTnZ/2/
quelle
#808080
!?mix-blend-mode
macht den Trick:Ergänzung (März 2018): Im Folgenden finden Sie ein nettes Tutorial, in dem alle Arten von Modi / Implementierungen erläutert werden: https://css-tricks.com/css-techniques-and-effects-for-knockout-text/
quelle
Ich habe festgestellt, dass das BackgroundCheck- Skript sehr nützlich ist.
Es erkennt die Gesamthelligkeit des Hintergrunds (sei es ein Hintergrundbild oder eine Farbe) und wendet abhängig von der Helligkeit des Hintergrunds eine Klasse auf das zugewiesene Textelement (
background--light
oderbackground--dark
) an.Es kann auf Standbilder und bewegliche Elemente angewendet werden.
( Quelle )
quelle
Wenn Sie ES6 verwenden, konvertieren Sie hexadezimal in RGB und können Folgendes verwenden:
quelle
Hier ist mein Versuch:
Dann, um es zu benutzen:
Dadurch wird der Text sofort entweder schwarz oder weiß. So machen Sie die Symbole:
Dann könnte jedes Symbol so aussehen
'save' + iconSuffix + '.jpg'
.Beachten Sie, dass dies nicht funktioniert, wenn ein Container seinen übergeordneten Container überläuft (z. B. wenn die CSS-Höhe 0 ist und der Überlauf nicht ausgeblendet ist). Das zum Laufen zu bringen wäre viel komplexer.
quelle
Durch die Kombination der Antworten [@ alex-ball, @jeremyharris] fand ich, dass dies der beste Weg für mich ist:
quelle