Ich würde vorschlagen, ein Pseudoelement anstelle des Überlagerungselements zu verwenden. Da Pseudoelemente nicht zu eingeschlossenen imgElementen hinzugefügt werden können, müssten Sie das imgElement dennoch umbrechen .
LIVE BEISPIEL HIER - BEISPIEL MIT TEXT
<div class="image">
<img src="http://i.stack.imgur.com/Sjsbh.jpg" alt="" />
</div>
Stellen Sie für das CSS optionale Abmessungen für das .imageElement ein und positionieren Sie es relativ. Wenn Sie ein ansprechendes Bild anstreben, lassen Sie einfach die Abmessungen weg, und dies funktioniert weiterhin (Beispiel) . Es ist nur zu beachten , dass die Abmessungen auf dem übergeordnete Element zu dem im Gegensatz sein muss imgElement selbst sehen .
.image {
position: relative;
width: 400px;
height: 400px;
}
Geben Sie dem untergeordneten imgElement eine Breite des 100%übergeordneten Elements und fügen Sie vertical-align:topes hinzu , um die Standardprobleme bei der Ausrichtung der Grundlinie zu beheben.
.image img {
width: 100%;
vertical-align: top;
}
Legen Sie für das Pseudoelement einen Inhaltswert fest und positionieren Sie ihn absolut relativ zum .imageElement. Eine Breite / Höhe von stellt 100%sicher, dass dies mit unterschiedlichen imgAbmessungen funktioniert . Wenn Sie das Element wechseln möchten, legen Sie die Deckkraft von fest 0und fügen Sie die Übergangseigenschaften / -werte hinzu.
.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;
}
Verwenden Sie eine Deckkraft von, 1wenn Sie mit der Maus über das Pseudoelement fahren, um den Übergang zu erleichtern:
.image:hover:after {
opacity: 1;
}
ENDE ERGEBNIS HIER
Wenn Sie beim Schweben Text hinzufügen möchten:
Für den einfachsten Ansatz fügen Sie einfach den Text als contentWert des Pseudoelements hinzu:
BEISPIEL HIER
.image:after {
content: 'Here is some text..';
color: #fff;
/* Other styling.. */
}
Das sollte in den meisten Fällen funktionieren. Wenn Sie jedoch mehr als ein imgElement haben, möchten Sie möglicherweise nicht, dass beim Hover derselbe Text angezeigt wird. Sie können daher den Text in einem data-*Attribut festlegen und haben daher für jedes imgElement einen eindeutigen Text .
BEISPIEL HIER
.image:after {
content: attr(data-content);
color: #fff;
}
Mit einem contentWert von attr(data-content)fügt das Pseudo-Element den Text aus dem .imageElement - data-contentAttribute:
<div data-content="Text added on hover" class="image">
<img src="http://i.stack.imgur.com/Sjsbh.jpg" alt="" />
</div>
Sie können etwas Styling hinzufügen und so etwas tun:
BEISPIEL HIER
Im obigen Beispiel :afterdient das Pseudoelement als schwarze Überlagerung, während das :beforePseudoelement die Beschriftung / der Text ist. Da die Elemente unabhängig voneinander sind, können Sie für eine optimalere Positionierung ein separates Styling verwenden.
.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;
}