Saya telah memikirkan hal-hal berikut ini untuk sementara waktu, jadi sekarang saya ingin mengetahui pendapat Anda, kemungkinan solusi, dan sebagainya.
Saya mencari plugin atau teknik yang mengubah warna teks atau beralih di antara gambar / ikon yang telah ditentukan sebelumnya tergantung pada kecerahan rata-rata piksel yang tercakup dari gambar latar belakang atau warna induknya.
Jika area tertutup pada latar belakangnya agak gelap, buat teks menjadi putih atau ganti ikon.
Selain itu, akan sangat bagus jika skrip akan memperhatikan jika induk tidak memiliki background-color atau -image yang ditentukan dan kemudian terus mencari yang paling terdekat (dari elemen induk ke elemen induknya ..).
Bagaimana menurut Anda, tahu tentang ide ini? Apakah sudah ada yang serupa di luar sana? contoh skrip?
Cheers, J.
Jawaban:
Sumber daya menarik untuk ini:
Berikut algoritma W3C (dengan demo JSFiddle juga ):
sumber
Artikel tentang 24 cara tentang Menghitung Kontras Warna ini mungkin menarik bagi Anda. Abaikan rangkaian fungsi pertama karena salah, tetapi rumus YIQ akan membantu Anda menentukan apakah akan menggunakan warna latar depan terang atau gelap.
Setelah Anda mendapatkan warna latar belakang elemen (atau leluhur), Anda dapat menggunakan fungsi ini dari artikel untuk menentukan warna latar depan yang sesuai:
sumber
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; }
Pertanyaan menarik. Pikiran langsung saya adalah membalikkan warna latar belakang sebagai teks. Ini hanya melibatkan parsing latar belakang dan membalikkan nilai RGB-nya.
Sesuatu seperti ini: http://jsfiddle.net/2VTnZ/2/
sumber
#808080
!?mix-blend-mode
melakukan triknya:Penambahan (Maret 2018): Mengikuti, tutorial bagus yang menjelaskan semua jenis mode / implementasi yang berbeda: https://css-tricks.com/css-techniques-and-effects-for-knockout-text/
sumber
Saya telah menemukan skrip BackgroundCheck sangat berguna.
Ini mendeteksi kecerahan latar belakang secara keseluruhan (baik itu gambar latar belakang atau warna), dan menerapkan kelas ke elemen teks yang ditetapkan (
background--light
ataubackground--dark
), tergantung pada kecerahan latar belakang.Ini dapat diterapkan pada elemen diam dan bergerak.
( Sumber )
sumber
Jika Anda menggunakan ES6, ubah hex ke RGB kemudian dapat menggunakan ini:
sumber
Inilah usaha saya:
Kemudian untuk menggunakannya:
Ini akan langsung membuat teks menjadi hitam atau putih sebagaimana mestinya. Untuk melakukan ikon:
Kemudian setiap ikon bisa terlihat seperti
'save' + iconSuffix + '.jpg'
.Perhatikan bahwa ini tidak akan berfungsi jika penampung apa pun meluap dari induknya (misalnya, jika tinggi CSS adalah 0, dan luapan tidak disembunyikan). Untuk membuatnya bekerja akan jauh lebih kompleks.
sumber
Dengan menggabungkan jawaban [@ alex-ball, @jeremyharris] menurut saya ini adalah cara terbaik untuk saya:
sumber