Как лучше всего (если есть) сделать изображение «затененным» с помощью CSS (т. Е. Без загрузки отдельной затененной версии изображения)?
Мой контекст состоит в том, что у меня есть строки в таблице, у каждой из которых есть кнопки в самой правой ячейке, и некоторые строки должны выглядеть светлее, чем другие. Конечно, я могу легко сделать шрифт светлее, но я также хотел бы сделать изображения светлее, не имея необходимости управлять двумя версиями каждого изображения.






Он обязательно должен быть серым? Вы можете просто уменьшить непрозрачность изображения (чтобы сделать его более тусклым). В качестве альтернативы вы можете создать наложение <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;
}
мне пришлось использовать jQuery .. я сделал $ ("# imgid"). filter.opacity = "0.3"
Вот пример, который позволяет вам установить цвет фона. Если вы не хотите использовать 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>
Учитывая фильтр: выражение - это расширение Microsoft для CSS, поэтому оно будет работать только в Internet Explorer. Если вы хотите сделать его серым, я бы порекомендовал вам установить его непрозрачность на 50%, используя немного javascript.
http://lyxus.net/mv было бы хорошим местом для начала, потому что он обсуждает непрозрачность скрипт, который работает с браузерами Firefox, Safari, KHTML, Internet Explorer и CSS3.
Вы также можете задать ему серую рамку.
непрозрачность - это функция css3, часть фильтра предназначена специально для MSIE, другие браузеры будут выбирать непрозрачность
Лучше поддерживать все браузеры:
img.lessOpacity {
opacity: 0.4;
filter: alpha(opacity=40);
zoom: 1; /* needed to trigger "hasLayout" in IE if no width or height is set */
}
Ого! Никаких оберток нет. Спасибо!
Если вы не против использовать немного JavaScript, jQuery fadeTo () прекрасно работает во всех браузерах, которые я пробовал.
jQuery(selector).fadeTo(speed, opacity);
Просто наткнулся на мой старый ответ здесь снова. Я бы ни за что не использовал для этого сейчас JS. Чистый CSS намного лучше.
Вы можете использовать rgba() в css для определения цвета вместо rgb(). Нравится:
style='background-color: rgba(128,128,128, 0.7);
Дает тот же цвет, что и rgb(128,128,128), но с непрозрачностью 70%, поэтому материал позади него отображается только до 30%. CSS3, но он работает в большинстве браузеров с 2008 года. Извините, я не знаю синтаксиса #rrggbb. Поиграйте с числами - вы можете размыть белым, растушевать тень серым, чем хотите разбавить.
Хорошо, поэтому вы создаете прямоугольник полупрозрачного серого (или любого другого цвета) и кладете его поверх изображения, возможно, с position: absolute и z-index выше нуля, и вы помещаете его непосредственно перед вашим изображением и по умолчанию место для прямоугольника будет в том же верхнем левом углу вашего изображения. Должно сработать.
Используйте свойство фильтра 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/
чтобы сделать его еще темнее, добавьте свойство contrast(x%), например grayscale(100%) contrast(30%).
Поддержка браузера - реальная проблема, поскольку она определенно не работает в IE10, IE11, FF26, Safari 5.1.x (Win7 x64) или практически во всем, кроме Chrome (пример).
Это не позволяет вам установить для него светло-серый цвет, но если на белом фоне, вы можете использовать его в сочетании с непрозрачностью, чтобы это произошло; img { filter: grayscale(100%); opacity: 0.4; }
Вы здесь:
<a href = "#"><img src = "img.jpg" /></a>
Css Серый:
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 и более ранние версии, а также не поддерживает версию фильтра градаций серого с префиксом. Вы можете исправить это, используя одно из двух решений ниже:
<meta http-equiv = "X-UA-Compatible" content = "IE=9">Спасибо! Это единственный ответ, который помог мне заставить это работать в Firefox!
@ Джейми Карл: Рад, что могу помочь. Этот код хорошо работает во всех браузерах :)
@ErenYeager в неприглядном состоянии, почему масштабирование: 1? Полагаю, это ошибка?
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>filter: contrast(0%);
@keyframes gray-filling {
0% {}
25% {}
50% {filter: contrast(0%);}
60% {filter: contrast(0%);}
70% {filter: contrast(0%) brightness(0%) invert(100%);}
80% {filter: contrast(0%) brightness(0%) invert(100%);}
90% {filter: contrast(0%) brightness(0%);}
100% {filter: contrast(0%) brightness(0%);}
}
p {
font-size: 5em;
color: yellow;
animation: gray-filling 5s ease-out infinite alternate;
}
p:first-of-type {
background-color: dodgerblue;
}<p>
⚡ Bzzzt!
</p>
<p>
⚡ Bzzzt!
</p>контраст был тем, что я хотел
Старый добрый Internet Explorer. Вы можете сделать больше с атрибутом filter; поскольку он использует DirectDraw для рендеринга. Но тогда он работает только в IE