Серое изображение с CSS?
Какой лучший способ (если таковой имеется) сделать изображение "серым" с помощью CSS (т.е. без загрузки отдельной, серой версии изображения)?
Мой контекст: у меня есть строки в таблице, у всех есть кнопки в правой части ячейки, а некоторые строки должны выглядеть светлее других. Поэтому я могу легко сделать шрифт легче, но я также хотел бы сделать изображения более легкими без необходимости управлять двумя версиями каждого изображения.
Ответы
Ответ 1
Должен ли он быть серым? Вы можете просто установить непрозрачность изображения ниже (чтобы уныло это). В качестве альтернативы вы можете создать наложение <div>
и установить, что это серый (изменить альфа, чтобы получить эффект).
-
HTML:
<div id="wrapper">
<img id="myImage" src="something.jpg" />
</div>
-
CSS
#myImage {
opacity: 0.4;
filter: alpha(opacity=40); /* msie */
}
/* or */
#wrapper {
opacity: 0.4;
filter: alpha(opacity=40); /* msie */
background-color: #000;
}
Ответ 2
Используйте свойство фильтра CSS3:
img {
-webkit-filter: grayscale(100%);
-moz-filter: grayscale(100%);
-o-filter: grayscale(100%);
-ms-filter: grayscale(100%);
filter: grayscale(100%);
}
Поддержка браузера немного плоха, но это 100% CSS. Хорошую статью о свойстве фильтра CSS3 вы можете найти здесь: http://blog.nmsdvid.com/css-filter-property/
Ответ 3
Ваше имя:
<a href="#"><img src="img.jpg" /></a>
Css Grey:
img{
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 10+, Firefox on Android */
filter: grayscale(100%);
-moz-filter: grayscale(100%);
-ms-filter: grayscale(100%);
-o-filter: grayscale(100%);
filter: gray; /* IE6-9 */
-webkit-filter: grayscale(100%); /* Chrome 19+, Safari 6+, Safari 6+ iOS */}
Ungray:
a:hover img{
filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'grayscale\'><feColorMatrix type=\'matrix\' values=\'1 0 0 0 0, 0 1 0 0 0, 0 0 1 0 0, 0 0 0 1 0\'/></filter></svg>#grayscale");
filter: grayscale(0%);
-moz-filter: grayscale(0%);
-ms-filter: grayscale(0%);
-o-filter: grayscale(0%);
filter: none ; /* IE6-9 */
zoom:1; /* needed to trigger "hasLayout" in IE if no width or height is set */
-webkit-filter: grayscale(0%); /* Chrome 19+, Safari 6+, Safari 6+ iOS */
}
Я нашел его по адресу: http://zkiwi.com/topic/chuyen-hinh-mau-thanh-trang-den-bang-css-nhu-the-nao
Изменить: IE10 + не поддерживает фильтры DX, как это делали IE9 и ранее, и не поддерживает префиксную версию фильтра оттенков серого.
Вы можете исправить это, воспользуйтесь одним из двух решений ниже:
Ответ 4
Если вы не против использовать немного JavaScript, jQuery fadeTo() прекрасно работает в каждом браузере, который я пробовал.
jQuery(selector).fadeTo(speed, opacity);
Ответ 5
Лучше поддерживать все браузеры:
img.lessOpacity {
opacity: 0.4;
filter: alpha(opacity=40);
zoom: 1; /* needed to trigger "hasLayout" in IE if no width or height is set */
}
Ответ 6
Вот пример, который позволяет установить цвет фона. Если вы не хотите использовать float, вам может потребоваться установить ширину и высоту вручную. Но даже это действительно зависит от окружающего CSS/HTML.
<style>
#color {
background-color: red;
float: left;
}#opacity {
opacity : 0.4;
filter: alpha(opacity=40);
}
</style>
<div id="color">
<div id="opacity">
<img src="image.jpg" />
</div>
</div>
Ответ 7
Вы можете использовать rgba()
в css для определения цвета вместо rgb()
. Как это:
style='background-color: rgba(128,128,128, 0.7);
Дает вам тот же цвет, что и rgb(128,128,128)
, но с непрозрачностью 70%, поэтому материал только показывает до 30%. CSS3, но он работал в большинстве браузеров с 2008 года. Извините, я не знаю синтаксиса #rrggbb. Играйте с цифрами - вы можете вымыть белым, затенять серым цветом, что бы вы ни разбавили.
ОК, поэтому вы создаете прямоугольник aa в полупрозрачном сером (или любом другом цвете) и кладите его поверх своего изображения, возможно, с позицией: absolute и z-index выше нуля, и вы ставите его непосредственно перед вашим изображением и расположение по умолчанию для прямоугольника будет тем же самым верхним левым углом вашего изображения. Должен работать.
Ответ 8
Выделить серым цветом:
"ахроматизировать".
filter: grayscale(100%);
@keyframes achromatization {
0% {}
25% {}
75% {filter: grayscale(100%);}
100% {filter: grayscale(100%);}
}
p {
font-size: 5em;
color: yellow;
animation: achromatization 2s ease-out infinite alternate;
}
p:first-of-type {
background-color: dodgerblue;
}
<p>
⚡ Bzzzt!
</p>
<p>
⚡ Bzzzt!
</p>
Ответ 9
Учитывая фильтр: выражение является расширением Microsoft для CSS, поэтому оно будет работать только в Internet Explorer. Если вы хотите опустить его, я бы рекомендовал установить его непрозрачность на 50%, используя немного javascript.
http://lyxus.net/mv было бы хорошим местом для начала, потому что в нем обсуждается непрозрачность
script, который работает с браузерами Firefox, Safari, KHTML, Internet Explorer и CSS3.
Возможно, вы также захотите присвоить ей серая рамка.