Saya mencari untuk mengambil ikon yang diwarnai (dan akan menjadi tautan) dan mengubahnya menjadi skala abu-abu sampai pengguna menempatkan mouse mereka di atas ikon (di mana kemudian akan mewarnai gambar).
Apakah ini mungkin dilakukan, dan dengan cara yang didukung IE & Firefox?
Jawaban:
Ada banyak metode untuk mencapai ini, yang akan saya jelaskan dengan beberapa contoh di bawah ini.
CSS murni (hanya menggunakan satu gambar berwarna)
img.grayscale { filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#grayscale"); /* Firefox 3.5+ */ filter: gray; /* IE6-9 */ -webkit-filter: grayscale(100%); /* Chrome 19+ & Safari 6+ */ } img.grayscale:hover { filter: none; -webkit-filter: grayscale(0%); }
Tampilkan cuplikan kode
img.grayscale { filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#grayscale"); /* Firefox 3.5+, IE10 */ filter: gray; /* IE6-9 */ -webkit-filter: grayscale(100%); /* Chrome 19+ & Safari 6+ */ -webkit-transition: all .6s ease; /* Fade to color for Chrome and Safari */ -webkit-backface-visibility: hidden; /* Fix for transition flickering */ } img.grayscale:hover { filter: none; -webkit-filter: grayscale(0%); } svg { background: url(http://4.bp.blogspot.com/-IzPWLqY4gJ0/T01CPzNb1KI/AAAAAAAACgA/_8uyj68QhFE/s400/a2cf7051-5952-4b39-aca3-4481976cb242.jpg); } svg image { transition: all .6s ease; } svg image:hover { opacity: 0; }
<p>Firefox, Chrome, Safari, IE6-9</p> <img class="grayscale" src="http://4.bp.blogspot.com/-IzPWLqY4gJ0/T01CPzNb1KI/AAAAAAAACgA/_8uyj68QhFE/s1600/a2cf7051-5952-4b39-aca3-4481976cb242.jpg" width="400"> <p>IE10 with inline SVG</p> <svg xmlns="http://www.w3.org/2000/svg" id="svgroot" viewBox="0 0 400 377" width="400" height="377"> <defs> <filter id="filtersPicture"> <feComposite result="inputTo_38" in="SourceGraphic" in2="SourceGraphic" operator="arithmetic" k1="0" k2="1" k3="0" k4="0" /> <feColorMatrix id="filter_38" type="saturate" values="0" data-filterid="38" /> </filter> </defs> <image filter="url("#filtersPicture")" x="0" y="0" width="400" height="377" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://4.bp.blogspot.com/-IzPWLqY4gJ0/T01CPzNb1KI/AAAAAAAACgA/_8uyj68QhFE/s1600/a2cf7051-5952-4b39-aca3-4481976cb242.jpg" /> </svg>
Anda dapat menemukan artikel yang berhubungan dengan teknik ini di sini .
CSS Murni (menggunakan gambar grayscale dan berwarna)
Pendekatan ini membutuhkan dua salinan gambar: satu dalam skala abu-abu dan yang lainnya berwarna penuh. Dengan menggunakan CSS
:hover
psuedoselector, Anda dapat memperbarui latar belakang elemen Anda untuk beralih di antara keduanya:#yourimage { background: url(../grayscale-image.png); } #yourImage:hover { background: url(../color-image.png}; }
Tampilkan cuplikan kode
#google { background: url('http://www.google.com/logos/keystroke10-hp.png'); height: 95px; width: 275px; display: block; /* Optional for a gradual animation effect */ transition: 0.5s; } #google:hover { background: url('https://graphics217b.files.wordpress.com/2011/02/logo1w.png'); }
<a id='google' href='http://www.google.com'></a>
Ini juga bisa dilakukan dengan menggunakan efek hover berbasis Javascript seperti
hover()
fungsi jQuery dengan cara yang sama.Pertimbangkan Perpustakaan Pihak Ketiga
The desaturate perpustakaan adalah perpustakaan umum yang memungkinkan Anda untuk dengan mudah beralih di antara versi grayscale dan versi lengkap berwarna dari elemen atau gambar yang diberikan.
sumber
Dijawab di sini: Ubah gambar menjadi grayscale dalam HTML / CSS
Anda bahkan tidak perlu menggunakan dua gambar yang terdengar seperti sakit atau perpustakaan manipulasi gambar, Anda dapat melakukannya dengan dukungan lintas browser (versi saat ini) dan hanya menggunakan CSS. Ini adalah pendekatan peningkatan progresif yang hanya kembali ke versi warna pada browser lama:
img { filter: url(filters.svg#grayscale); /* Firefox 3.5+ */ filter: gray; /* IE6-9 */ -webkit-filter: grayscale(1); /* Google Chrome & Safari 6+ */ } img:hover { filter: none; -webkit-filter: none; }
dan filter.svg seperti ini:
<svg xmlns="http://www.w3.org/2000/svg"> <filter id="grayscale"> <feColorMatrix type="matrix" values="0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0" /> </filter> </svg>
sumber
Saya menggunakan kode berikut di http://www.diagnomics.com/
Transisi halus dari b / w ke warna dengan efek pembesar (skala)
img.color_flip { filter: url(filters.svg#grayscale); /* Firefox 3.5+ */ filter: gray; /* IE5+ */ -webkit-filter: grayscale(1); /* Webkit Nightlies & Chrome Canary */ -webkit-transition: all .5s ease-in-out; } img.color_flip:hover { filter: none; -webkit-filter: grayscale(0); -webkit-transform: scale(1.1); }
sumber
Anda bisa menggunakan sprite yang memiliki kedua versi — yang berwarna dan monokrom — yang disimpan di dalamnya.
sumber
Berikut demonya. Bahkan bekerja di IE7:
http://james.padolsey.com/demos/grayscale/
dan
http://james.padolsey.com/javascript/grayscaling-in-non-ie-browsers/
sumber