Nie, nie można tego zrobić, ponieważ opacity
wpływa na cały element, w tym na jego zawartość, i nie ma możliwości zmiany tego zachowania. Możesz obejść ten problem za pomocą dwóch następujących metod.
Wtórny div
Dodaj kolejny div
element do kontenera, aby utrzymać tło. Jest to metoda najbardziej przyjazna dla różnych przeglądarek i będzie działać nawet w IE6.
HTML
<div class="myDiv">
<div class="bg"></div>
Hi there
</div>
CSS
.myDiv {
position: relative;
z-index: 1;
}
.myDiv .bg {
position: absolute;
z-index: -1;
top: 0;
bottom: 0;
left: 0;
right: 0;
background: url(test.jpg) center center;
opacity: .4;
width: 100%;
height: 100%;
}
Zobacz przypadek testowy na jsFiddle
: before i :: before pseudo-element
Inną sztuczką jest użycie pseudoelementów CSS 2.1 :before
lub CSS 3 ::before
. :before
pseudoelement jest obsługiwany w IE od wersji 8, podczas gdy ::before
pseudoelement w ogóle nie jest obsługiwany. Miejmy nadzieję, że zostanie to naprawione w wersji 10.
HTML
<div class="myDiv">
Hi there
</div>
CSS
.myDiv {
position: relative;
z-index: 1;
}
.myDiv:before {
content: "";
position: absolute;
z-index: -1;
top: 0;
bottom: 0;
left: 0;
right: 0;
background: url(test.jpg) center center;
opacity: .4;
}
Dodatkowe uwagi
Ze względu na z-index
twoje zachowanie będziesz musiał ustawić indeks z dla kontenera, a także negatyw z-index
dla obrazu tła.
Przypadki testowe
Zobacz przypadek testowy na jsFiddle: