Tidak, ini tidak dapat dilakukan karena opacity
memengaruhi seluruh elemen termasuk kontennya dan tidak ada cara untuk mengubah perilaku ini. Anda dapat mengatasinya dengan dua metode berikut.
Div sekunder
Tambahkan div
elemen 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 :before
atau CSS 3 ::before
. :before
pseudo-element didukung di IE dari versi 8, sedangkan ::before
pseudo-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-index
Anda harus menetapkan indeks-z untuk penampung serta negatif z-index
untuk gambar latar belakang.
Kasus uji
Lihat kasus uji di jsFiddle: