Już od jakiegoś czasu myślałem o następujących kwestiach, więc teraz chcę poznać Twoje opinie, możliwe rozwiązania i tak dalej.
Szukam wtyczki lub techniki, która zmienia kolor tekstu lub przełącza się między wstępnie zdefiniowanymi obrazami / ikonami w zależności od średniej jasności pokrytych pikseli obrazu tła lub koloru jego rodzica.
Jeśli zakryty obszar tła jest raczej ciemny, zmień tekst na biały lub zmień ikony.
Ponadto byłoby wspaniale, gdyby skrypt zauważył, że rodzic nie ma zdefiniowanego koloru tła lub obrazu, a następnie kontynuuje wyszukiwanie najbliższego (od elementu nadrzędnego do elementu nadrzędnego ...).
Jak myślisz, wiesz o tym pomyśle? Czy jest już coś podobnego? przykłady skryptów?
Pozdrawiam, J.
Odpowiedzi:
Ciekawe zasoby do tego:
Oto algorytm W3C (również z demonstracją JSFiddle ):
źródło
Ten artykuł o 24 sposobach obliczania kontrastu kolorów może Cię zainteresować. Zignoruj pierwszy zestaw funkcji, ponieważ są one błędne, ale formuła YIQ pomoże Ci określić, czy użyć jasnego, czy ciemnego koloru pierwszego planu.
Po uzyskaniu koloru tła elementu (lub przodka) możesz użyć tej funkcji z artykułu, aby określić odpowiedni kolor pierwszego planu:
źródło
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; }
Interesujące pytanie. Moją natychmiastową myślą było odwrócenie koloru tła jako tekstu. Wymaga to po prostu przeanalizowania tła i odwrócenia jego wartości RGB.
Coś takiego: http://jsfiddle.net/2VTnZ/2/
źródło
#808080
!?mix-blend-mode
Zrób sztuczkę:Dodatek (marzec 2018): Następnie ładny samouczek wyjaśniający różne typy trybów / implementacji: https://css-tricks.com/css-techniques-and-effects-for-knockout-text/
źródło
Uważam, że skrypt BackgroundCheck jest bardzo przydatny.
Wykrywa ogólną jasność tła (czy to obraz tła, czy kolor) i stosuje klasę do przypisanego elementu tekstowego (
background--light
lubbackground--dark
), w zależności od jasności tła.Może być stosowany do nieruchomych i ruchomych elementów.
( Źródło )
źródło
Jeśli używasz ES6, przekonwertuj hex na RGB, a następnie możesz użyć tego:
źródło
Oto moja próba:
Następnie, aby go użyć:
Spowoduje to, że tekst będzie odpowiednio czarny lub biały. Aby wykonać ikony:
Wtedy każda ikona mogłaby wyglądać
'save' + iconSuffix + '.jpg'
.Zauważ, że to nie zadziała, gdy jakikolwiek kontener przepełni swój element nadrzędny (na przykład, jeśli wysokość CSS wynosi 0, a przepełnienie nie jest ukryte). Uzyskanie takiej pracy byłoby znacznie bardziej złożone.
źródło
Łącząc odpowiedzi [@ alex-ball, @jeremyharris] stwierdziłem, że jest to dla mnie najlepszy sposób:
źródło