Sugerowałbym użycie pseudoelementu zamiast elementu overlay. Ponieważ pseudoelementy nie mogą być dodawane do zamkniętych imgelementów, nadal trzeba by je opakować img.
PRZYKŁAD NA ŻYWO TUTAJ - PRZYKŁAD Z TEKSTEM
<div class="image">
<img src="http://i.stack.imgur.com/Sjsbh.jpg" alt="" />
</div>
Jeśli chodzi o CSS, ustaw opcjonalne wymiary na .imageelemencie i ustaw go względnie. Jeśli chcesz uzyskać responsywny obraz, po prostu pomiń wymiary, a to nadal będzie działać (przykład) . Warto tylko zauważyć, że wymiary muszą znajdować się na elemencie nadrzędnym, a nie na samym imgelemencie, patrz .
.image {
position: relative;
width: 400px;
height: 400px;
}
Nadaj imgelementowi podrzędnemu szerokość elementu 100%nadrzędnego i dodaj, vertical-align:topaby naprawić domyślne problemy z wyrównaniem linii bazowej.
.image img {
width: 100%;
vertical-align: top;
}
Jeśli chodzi o pseudoelement, ustaw wartość zawartości i bezwzględnie umieść ją względem .imageelementu. Szerokość / wysokość 100%zapewni, że będzie to działać przy różnych imgwymiarach. Jeśli chcesz przenieść element, ustaw krycie 0i dodaj właściwości / wartości przejścia.
.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;
}
Użyj krycia lub 1po najechaniu kursorem na pseudoelement, aby ułatwić przejście:
.image:hover:after {
opacity: 1;
}
WYNIK KONIEC TUTAJ
Jeśli chcesz dodać tekst po najechaniu:
Najprostszym podejściem jest dodanie tekstu jako wartości pseudoelementu content:
PRZYKŁAD TUTAJ
.image:after {
content: 'Here is some text..';
color: #fff;
/* Other styling.. */
}
To powinno działać w większości przypadków; jeśli jednak masz więcej niż jeden imgelement, możesz nie chcieć, aby ten sam tekst pojawiał się po najechaniu myszą. Możesz zatem ustawić tekst w adata-* atrybucie i mieć unikalny tekst dla każdego imgelementu.
PRZYKŁAD TUTAJ
.image:after {
content: attr(data-content);
color: #fff;
}
Z contentwartości attr(data-content), element pseudo dodaje tekst z .imageelementu data-contentatrybutu:
<div data-content="Text added on hover" class="image">
<img src="http://i.stack.imgur.com/Sjsbh.jpg" alt="" />
</div>
Możesz dodać stylizację i zrobić coś takiego:
PRZYKŁAD TUTAJ
W powyższym przykładzie :afterpseudoelement służy jako czarna nakładka, podczas gdy :beforepseudoelement to podpis / tekst. Ponieważ elementy są od siebie niezależne, możesz użyć oddzielnych stylizacji, aby uzyskać bardziej optymalne ustawienie.
.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;
}