Как сделать содержимое тега IMG прозрачным, но не фон тега?

Как следует из названия, как сделать изображение в теге IMG прозрачным, не делая фон прозрачным, используя только CSS? У меня нет доступа к HTML, поэтому я не могу создать DIV.

Изображение без прозрачности с красным фоном:

img {
  background-color: red;
}

Обычное изображение

Изображение с использованием opacity: 0.2;:

img {
  background-color: red;
  opacity: 0.2;
}

с непрозрачностью css

Чего я хочу добиться с помощью CSS:

что я хочу


css
person nelson2tm    schedule 13.04.2016    source источник
comment
пожалуйста, поделитесь кодом или создайте скрипку, так как я запутался, о каком фоне вы говорите   -  person Gaurav Aggarwal    schedule 13.04.2016
comment
О каком фоне вы говорите - фоне изображения или страницы, на которой находится изображение? Не могли бы вы создать макет того, чего вы хотите достичь?   -  person Lars Kristensen    schedule 13.04.2016
comment
@LarsKristensen Я говорю о фоне тега img, а не о странице, на которой он находится.   -  person nelson2tm    schedule 13.04.2016
comment
@GauravAggarwal jsfiddle.net/ygtgLkn5 Вот что я имею в виду.   -  person nelson2tm    schedule 13.04.2016
comment
это просто изображение, если вы примените непрозрачность, это повлияет на изображение. Откуда взялся фон?   -  person Gaurav Aggarwal    schedule 13.04.2016
comment
Невозможно повлиять на непрозрачность ЧАСТИ изображения с помощью CSS.   -  person Paulie_D    schedule 13.04.2016
comment
@ nelson2tm Это то, что вы пытаетесь сделать? Сделайте содержимое изображения прозрачным, но оставьте фон HTML-элемента img с исходной непрозрачностью — поэтому покажите синий цвет, а не сделайте его прозрачным?: jsfiddle.net/vzL88xrr   -  person Lars Kristensen    schedule 13.04.2016
comment
@LarsKristensen Нет, к сожалению, это не то, что я пытаюсь сделать. Я попытался прояснить вопрос, добавив изображения того, чего я пытаюсь достичь.   -  person nelson2tm    schedule 13.04.2016
comment
@ nelson2tm Я не уверен, что то, что вы хотите сделать, возможно в рамках стиля самого тега img. Но если вы можете изменить тег img, есть ли причина, по которой вы не сможете обернуть его тегом div и присвоить ему тот же цвет фона?   -  person Lars Kristensen    schedule 13.04.2016
comment
@nelson2tm Пример (обновлено): jsfiddle.net/jkm1r3tj/1   -  person Lars Kristensen    schedule 13.04.2016
comment
@LarsKristensen Как уже было сказано, у меня нет доступа к HTML-коду страницы. У меня есть доступ только к CSS.   -  person nelson2tm    schedule 13.04.2016
comment
Пожалуйста, проверьте это: jsfiddle.net/4q4z4vkg   -  person satya    schedule 13.04.2016
comment
@satya Все еще не то, чего я хочу достичь. Я хочу установить фон только тега IMG, а не всего тела.   -  person nelson2tm    schedule 13.04.2016


Ответы (3)


Пожалуйста, попробуйте это:

Используйте стиль прозрачности css для вашего тега изображения, а не в вашем div, который содержит изображение.

Предположим, у вас есть вот так:

<div class="img_container"><img src="myimage.png"></div>

Тогда CSS будет

div.img_container img {
    opacity: 0.2;
    filter: alpha(opacity=20); /* For IE8 and earlier */
}
person satya    schedule 13.04.2016
comment
Изображение не находится в DIV, к сожалению. Это просто тег IMG. - person nelson2tm; 13.04.2016
comment
Затем сделайте так: ‹img class=myimage src=myimage.png› img.myimage{ opacity: 0.2; фильтр: альфа (непрозрачность = 20); /* Для IE8 и более ранних версий */ } - person satya; 13.04.2016
comment
‹img src=myimage.png стиль=opacity: 0.2› - person satya; 13.04.2016
comment
Это делает изображение и фон прозрачными. Я хочу только изображение прозрачным. - person nelson2tm; 13.04.2016
comment
Это будет только прозрачным изображением. Вы можете убедиться в этом, если уменьшите высоту и ширину своего изображения. - person satya; 13.04.2016

Если у вас нет доступа к HTML, у вас остается единственный вариант использования нового background-blend-mode, который вы можете настроить так, чтобы приблизиться к тому, что вы хотите. Это потребует от вас использования background-image вместо использования его в файле src.

Другой способ — использовать хак для вставки контента ::before/after вместе с несколькими block с background и opacity. Для этого требуется какой-то контейнер, известные размеры img и, вероятно, немного больше ограничений.

person theaws.blog    schedule 14.04.2016

Если ваше ограничение состоит в том, что вы можете только изменять CSS элемента img, то я думаю, что то, что вы хотите сделать, невозможно. Непрозрачность применяется к элементу HTML, включая его фон. Невозможно установить непрозрачность выбранных частей HTML-элемента.

Если вы можете использовать Javascript, вы можете написать сценарий, который оборачивает элемент(ы) img в элемент div или span и применяет тот же фон к этому элементу-оболочке. Это заставит тот же фон отображаться, когда элемент img прозрачен.

Jquery имеет функцию wrap, которую можно использовать для этого:

$(".classToWrap").wrap("<div class='wrapperClass'></div>");

демонстрация Jsfiddle

Если Javascript тоже не вариант, то я не вижу способа сделать это с использованием только CSS.

person Lars Kristensen    schedule 14.04.2016