Tidak, ini tidak dapat dilakukan karena opacitymemengaruhi seluruh elemen termasuk kontennya dan tidak ada cara untuk mengubah perilaku ini. Anda dapat mengatasinya dengan dua metode berikut.
Div sekunder
Tambahkan divelemen lain ke wadah untuk menahan latar belakang. Ini adalah metode yang paling ramah lintas-browser dan akan berfungsi bahkan di 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%;
}
Lihat kasus uji di jsFiddle
: before dan :: before pseudo-element
Trik lain adalah dengan menggunakan pseudo-elemen CSS 2.1 :beforeatau CSS 3 ::before. :beforepseudo-element didukung di IE dari versi 8, sedangkan ::beforepseudo-element tidak didukung sama sekali. Ini mudah-mudahan akan diperbaiki dalam versi 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;
}
Catatan tambahan
Karena perilaku z-indexAnda harus menetapkan indeks-z untuk penampung serta negatif z-indexuntuk gambar latar belakang.
Kasus uji
Lihat kasus uji di jsFiddle: