Изображение в оттенках серого с CSS & re-color при наведении курсора мыши?
Я ищу, чтобы взять значок, который окрашен (и будет ссылка) и превратить его в оттенки серого, пока пользователь не наведет курсор мыши на значок (где он будет затем цвет изображения).
возможно ли это сделать, и таким образом, что IE & Firefox поддерживается?
5 ответов:
существует множество методов достижения этой цели, которые я подробно опишу на нескольких примерах ниже.
чистый 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 (с использованием оттенков серого и цветных изображений)
этот подход требует двух копий изображения: одна в оттенках серого, а другая в полном цвете. С помощью CSS
:hover
psuedoselector, вы можете обновить фон вашего элемента для переключения между ними:#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, такого как jQuery
hover()
функция таким же образом.рассмотрим стороннюю библиотеку
The обесцветить библиотека-это общая библиотека, которая позволяет легко переключаться между версией в оттенках серого и полноцветной версией данного элемента или изображения.
ответ: преобразование изображения в оттенки серого в 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; }
и фильтров.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/
можно использовать спрайт, который имеет обе версии-цветные и монохромные-хранящиеся в нем.