Я хочу взять цветной значок (и будет ссылкой) и повернуть его в оттенки серого, пока пользователь не наведет указатель мыши на значок (где он затем раскрасит изображение).
Возможно ли это сделать и таким образом, который поддерживается IE и Firefox?
Ответы:
Для этого существует множество способов, которые я подробно расскажу на нескольких примерах ниже.
Чистый CSS (с использованием только одного цветного изображения)
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%); }
Показать фрагмент кода
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>
Вы можете найти статью об этой технике здесь .
Чистый CSS (с использованием оттенков серого и цветных изображений)
Для этого подхода требуются две копии изображения: одна в оттенках серого, а другая - в полноцветном. Используя
:hover
псевдоселектор CSS , вы можете обновить фон своего элемента, чтобы переключаться между ними:#yourimage { background: url(../grayscale-image.png); } #yourImage:hover { background: url(../color-image.png}; }
Показать фрагмент кода
#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>
Этого также можно добиться с помощью эффекта наведения на основе Javascript, такого как
hover()
функция jQuery, аналогичным образом.Рассмотрим стороннюю библиотеку
Библиотека обесцвечивания - это общая библиотека, которая позволяет легко переключаться между версией в градациях серого и полноцветной версией данного элемента или изображения.
источник
Ответ здесь: преобразовать изображение в оттенки серого в HTML / CSS
Вам даже не нужно использовать два изображения, которые звучат как боль, или библиотеку манипуляций с изображениями, вы можете сделать это с поддержкой кроссбраузерности (текущие версии) и просто использовать CSS. Это прогрессивный подход к улучшению, который просто возвращается к цветным версиям в старых браузерах:
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; }
и файл filters.svg вот так:
<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>
источник
Я использую следующий код на http://www.diagnomics.com/
Плавный переход от ч / б к цветному с эффектом увеличения (шкала)
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); }
источник
Вы можете использовать спрайт, в котором хранятся обе версии - цветная и монохромная.
источник
Вот демо. Работает даже в IE7:
http://james.padolsey.com/demos/grayscale/
а также
http://james.padolsey.com/javascript/grayscaling-in-non-ie-browsers/
источник