Mein Problem ist, wenn ich mein Bild dunkler mache, wird auch der Text in der Klasse .text
dunkler, und ich weiß nicht, wie ich das vermeiden kann.
Ich kenne eine Lösung: .wrap
position:absolute
und Klasse .text
nicht in image
machen, aber diese Lösung ist für mich ungeeignet (wie this ).
Irgendwelche anderen Ideen?
Dies ist der Code, den ich habe:
.wrap {
width: 100%;
background: #000 none repeat scroll 0% 0%;
}
.image {
background-image: url("https://pbs.twimg.com/profile_banners/1550273796/1372363601/1500x500");
background-size: cover;
opacity: 0.8;
height: 100vh;
max-height: 350px;
min-height: 200px;
}
.text {
color: #FFF;
font-weight: 900;
}
<div class="wrap">
<div class="image">
<div class="text">
<p>I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE
YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU</p>
</div>
</div>
</div>
opacity
ist keine inherit
-Eigenschaft, wirkt sich jedoch auf den Inhalt aus. Wenn Sie also die Opazität von .image
erhöhen, die sich auch auf .text
auswirkt, können Sie Pseudo-Elemente und background: rgba()
verwenden, um das zu erreichen, was Sie möchten:
Hier ein funktionierendes JSFiddle zum Spielen
.wrap {
width: 100%;
}
.image {
background-image: url("https://i.stack.imgur.com/gijdH.jpg?s=328&g=1");
position: relative;
height: 100vh;
}
.image:before{
content: '';
position: absolute;
top: 0;
right: 0;
left: 0;
bottom: 0;
background: rgba(0,0,0,0.7);
}
.text {
color: #FFF;
position: relative;
}
<div class="wrap">
<div class="image">
<div class="text">
<p>I LOVE YOU</p>
</div>
</div>
</div>
opacity
wird auf das gesamte Element (einschließlich des Inhalts) angewendet.
Da div.text
in div.image
verschachtelt ist, gilt die auf div.image
angewendete opacity
auch für alle Nachkommen.
Mit Hintergrundfarben können Sie die Deckkraft mit rgba()
direkt auf die Eigenschaft anwenden:
background-color: rgba(255, 0, 0, 0.6);
... und das in Ihrer Frage aufgeworfene Problem wird vermieden.
Bei Hintergrundbildern ist jedoch eine Problemumgehung erforderlich.
Zu den Optionen gehören das Erstellen einer separaten div
für das Bild oder die Verwendung eines Pseudoelements.
Diese Optionen und einige andere werden hier detailliert beschrieben:
sie können immer Webkit-Filter anwenden, um den Text heller zu machen
http://jsfiddle.net/RachGal/qxtwckts/ oder der folgende Ausschnitt http://jsfiddle.net/RachGal/qxtwckts/1/
#wrap {
position: relative;
float: left;
background-image: url("https://pbs.twimg.com/profile_banners/1550273796/1372363601/1500x500");
background-size: cover;
background-repeat: no-repeat;
opacity: 0.9;
height: 400px;
width: 400px;
}
#wrap:after {
content: '';
display: block;
position: absolute;
z-index: 2;
}
p {
font-size: 1em;
color: white;
text-align: left;
}
}
<div id="wrap">
<div id="text">
<p>I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE
YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU I LOVE YOU
<p>
</div>
</div>