Серое изображение с 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.

Возможно, вы также захотите присвоить ей серая рамка.