Вот два способа сделать это - оба включают обертывание изображения в содержащий элемент.
Использование фона контейнера
Вы можете установить красный цвет фона содержащего элемента и затем уменьшить непрозрачность изображений при наведении:
HTMLвыглядит следующим образом:
<!-- Uses background color to fade color from behind. -->
<div id="background">
<img src="http://lorempixel.com/100/100/food" height="100" width="100" />
</div>
И CSS выглядит следующим образом:
div { position: relative; float: left; }
img { display: block; }
#background { background: red; }
#background:hover img { opacity: 0.5; }
Использование элемента-брата
Вы можете вкладывать пустойspan и использовать его как абсолютно позиционированный брат, который может служить наложением.Проверьте это - вот HTML:
<!-- Uses empty span to overlay color. -->
<div id="overlay">
<img src="http://lorempixel.com/100/100/food" height="100" width="100" />
<span></span>
<div>
И CSS будет выглядеть так:
div { position: relative; float: left; }
img { display: block; }
#overlay span {
background: red;
bottom: 0;
display: block;
left: 0;
opacity: 0;
position: absolute;
right: 0;
top: 0;
z-index: 1;
}
#overlay:hover span { opacity: 0.5; }
Вы можете попробовать демо каждого решения здесь:
http://jsfiddle.net/jimjeffers/mG78d/1/
Возможные ошибки
Важно отметить, что для того, чтобы содержащий элемент соответствовал размеру вашего изображения, вам нужно выполнить одно из четырех действий:
- Плавающий содержащий элемент.
- Абсолютно позиционировать содержащий элемент.
- Установите отображение содержащего элемента: inline-block.
- Явно установите высоту и ширину содержащего элемента в соответствии с размерами изображения.
В моем примере с jsfiddle я установил для divs значение float: left;.