Выделить изображение серым с помощью CSS?

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

Мой контекст состоит в том, что у меня есть строки в таблице, у каждой из которых есть кнопки в самой правой ячейке, и некоторые строки должны выглядеть светлее, чем другие. Конечно, я могу легко сделать шрифт светлее, но я также хотел бы сделать изображения светлее, не имея необходимости управлять двумя версиями каждого изображения.

Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
190
0
227 157
9
Перейти к ответу Данный вопрос помечен как решенный

Ответы 9

Ответ принят как подходящий

Он обязательно должен быть серым? Вы можете просто уменьшить непрозрачность изображения (чтобы сделать его более тусклым). В качестве альтернативы вы можете создать наложение <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;
    }
    

Старый добрый Internet Explorer. Вы можете сделать больше с атрибутом filter; поскольку он использует DirectDraw для рендеринга. Но тогда он работает только в IE

user19302 13.11.2008 07:55

мне пришлось использовать jQuery .. я сделал $ ("# imgid"). filter.opacity = "0.3"

Avdhut Vaidya 14.08.2016 17:36

Вот пример, который позволяет вам установить цвет фона. Если вы не хотите использовать 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, другие браузеры будут выбирать непрозрачность

Owen 13.11.2008 08:28

Лучше поддерживать все браузеры:

img.lessOpacity {               
   opacity: 0.4;
   filter: alpha(opacity=40);
   zoom: 1;  /* needed to trigger "hasLayout" in IE if no width or height is set */ 
}

Ого! Никаких оберток нет. Спасибо!

Pavel Vlasov 06.03.2013 20:11

Если вы не против использовать немного JavaScript, jQuery fadeTo () прекрасно работает во всех браузерах, которые я пробовал.

jQuery(selector).fadeTo(speed, opacity);

Просто наткнулся на мой старый ответ здесь снова. Я бы ни за что не использовал для этого сейчас JS. Чистый CSS намного лучше.

Nathan Long 29.04.2015 19:02

Вы можете использовать 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%).

Dennis Golomazov 01.07.2013 09:44

Поддержка браузера - реальная проблема, поскольку она определенно не работает в IE10, IE11, FF26, Safari 5.1.x (Win7 x64) или практически во всем, кроме Chrome (пример).

nickb 10.02.2014 12:56

Это не позволяет вам установить для него светло-серый цвет, но если на белом фоне, вы можете использовать его в сочетании с непрозрачностью, чтобы это произошло; img { filter: grayscale(100%); opacity: 0.4; }

Ezward 13.04.2019 03:04

Вы здесь:

<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 и более ранние версии, а также не поддерживает версию фильтра градаций серого с префиксом. Вы можете исправить это, используя одно из двух решений ниже:

  1. Настройте IE10 + на рендеринг в стандартном режиме IE9, используя следующий метаэлемент в заголовке: <meta http-equiv = "X-UA-Compatible" content = "IE=9">
  2. Используйте оверлей SVG в IE10 для выполнения шкалы серого Internet Explorer 10 - как применить фильтр оттенков серого?

Спасибо! Это единственный ответ, который помог мне заставить это работать в Firefox!

Jamie Carl 28.04.2014 05:14

@ Джейми Карл: Рад, что могу помочь. Этот код хорошо работает во всех браузерах :)

Sakata Gintoki 29.04.2014 12:15

@ErenYeager в неприглядном состоянии, почему масштабирование: 1? Полагаю, это ошибка?

para 02.09.2015 12:21

Чтобы затенять:

«Ахроматизировать».

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>

Полезные заметки

контраст был тем, что я хотел

Simon Zyx 06.05.2020 14:32

Другие вопросы по теме