Chcę wziąć ikonę, która jest kolorowa (i będzie linkiem) i obrócić ją w skali szarości, aż użytkownik umieści kursor myszy nad ikoną (gdzie następnie pokoloruje obraz).
Czy jest to możliwe iw sposób obsługiwany przez przeglądarki IE i Firefox?
Chcę wziąć ikonę, która jest kolorowa (i będzie linkiem) i obrócić ją w skali szarości, aż użytkownik umieści kursor myszy nad ikoną (gdzie następnie pokoloruje obraz).
Czy jest to możliwe iw sposób obsługiwany przez przeglądarki IE i Firefox?
Odpowiedzi:
Istnieje wiele metod osiągnięcia tego celu, które szczegółowo opiszę na kilku przykładach poniżej.
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%);
}
Możesz znaleźć artykuł dotyczący tej techniki tutaj .
Takie podejście wymaga dwóch kopii obrazu: jednej w skali szarości, a drugiej w pełnym kolorze. Używając :hover
psuedoselectora CSS , możesz zaktualizować tło elementu, aby przełączać się między nimi:
#yourimage {
background: url(../grayscale-image.png);
}
#yourImage:hover {
background: url(../color-image.png};
}
Można to również osiągnąć, używając hover()
w ten sam sposób efektu kursora opartego na JavaScript, takiego jak funkcja jQuery .
Desaturate biblioteka jest wspólna biblioteka, która pozwala na łatwe przełączanie między wersji pełnej skali szarości i kolorze wersji danego elementu lub obrazu.
Odpowiedział tutaj: Konwertuj obraz do skali szarości w HTML / CSS
Nie musisz nawet używać dwóch obrazów, które brzmią jak ból lub biblioteka do manipulacji obrazami, możesz to zrobić z obsługą wielu przeglądarek (aktualne wersje) i po prostu użyj CSS. Jest to metoda stopniowego ulepszania, która po prostu wraca do wersji kolorystycznych w starszych przeglądarkach:
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;
}
i filter.svg w ten sposób:
<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>
Używam następującego kodu na http://www.diagnomics.com/
Płynne przejście od cz / b do koloru z efektem powiększenia (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);
}
Oto demo. Działa nawet w IE7:
http://james.padolsey.com/demos/grayscale/
i
http://james.padolsey.com/javascript/grayscaling-in-non-ie-browsers/