Я б запропонував використовувати псевдоелемент замість елемента накладання. Оскільки псевдоелементи не можна додавати до закритих imgелементів, вам все одно доведеться обернути imgелемент.
ЖИВИЙ ПРИКЛАД ТУТ - ПРИКЛАД З ТЕКСТОМ
<div class="image">
<img src="http://i.stack.imgur.com/Sjsbh.jpg" alt="" />
</div>
Що стосується CSS, встановіть необов'язкові розміри на .imageелементі та порівняно розташуйте його. Якщо ви прагнете отримати адаптивне зображення, просто опустіть розміри, і це все одно буде працювати (приклад) . Варто лише зазначити, що розміри повинні бути на батьківському елементі на відміну від самого imgелемента, див .
.image {
position: relative;
width: 400px;
height: 400px;
}
Надайте дочірньому imgелементу ширину 100%батьківського елемента та додайте, vertical-align:topщоб виправити проблеми вирівнювання базової лінії за замовчуванням.
.image img {
width: 100%;
vertical-align: top;
}
Що стосується псевдоелемента, встановіть значення вмісту і абсолютно розташуйте його відносно .imageелемента. Ширина / висота 100%дають змогу працювати з різними imgрозмірами. Якщо ви хочете перевести елемент, встановіть непрозорість 0та додайте властивості / значення переходу.
.image:after {
content: '\A';
position: absolute;
width: 100%; height:100%;
top:0; left:0;
background:rgba(0,0,0,0.6);
opacity: 0;
transition: all 1s;
-webkit-transition: all 1s;
}
Використовуйте непрозорість 1при наведенні курсору на елемент псевдо, щоб полегшити перехід:
.image:hover:after {
opacity: 1;
}
КІНЦЕВИЙ РЕЗУЛЬТАТ ТУТ
Якщо ви хочете додати текст за допомогою наведення курсора:
Для найпростішого підходу просто додайте текст як значення псевдоелемента content:
ПРИКЛАД ТУТ
.image:after {
content: 'Here is some text..';
color: #fff;
/* Other styling.. */
}
Це має працювати в більшості випадків; однак, якщо у вас більше одногоimg елемента, ви, можливо, не хочете, щоб той самий текст відображався на наведення курсора. Тому ви можете встановити текст уdata-* атрибуті і, отже, мати унікальний текст для кожного imgелемента.
ПРИКЛАД ТУТ
.image:after {
content: attr(data-content);
color: #fff;
}
Зі contentзначенням attr(data-content)псевдоелемент додає текст із .imageелементаdata-content атрибута :
<div data-content="Text added on hover" class="image">
<img src="http://i.stack.imgur.com/Sjsbh.jpg" alt="" />
</div>
Ви можете додати трохи стилів і зробити щось подібне:
ПРИКЛАД ТУТ
У наведеному вище прикладі :afterпсевдоелемент служить чорною накладкою, тоді як :beforeпсевдоелемент - це підпис / текст. Оскільки елементи не залежать один від одного, ви можете використовувати окремі стилі для більш оптимального розміщення.
.image:after, .image:before {
position: absolute;
opacity: 0;
transition: all 0.5s;
-webkit-transition: all 0.5s;
}
.image:after {
content: '\A';
width: 100%; height:100%;
top: 0; left:0;
background:rgba(0,0,0,0.6);
}
.image:before {
content: attr(data-content);
width: 100%;
color: #fff;
z-index: 1;
bottom: 0;
padding: 4px 10px;
text-align: center;
background: #f00;
box-sizing: border-box;
-moz-box-sizing:border-box;
}
.image:hover:after, .image:hover:before {
opacity: 1;
}