ไม่สิ่งนี้ไม่สามารถทำได้เนื่องจากopacity
มีผลต่อองค์ประกอบทั้งหมดรวมถึงเนื้อหาและไม่มีทางที่จะเปลี่ยนแปลงพฤติกรรมนี้ได้ คุณสามารถแก้ไขได้ด้วยสองวิธีต่อไปนี้
รอง
เพิ่มdiv
องค์ประกอบอื่นในคอนเทนเนอร์เพื่อยึดพื้นหลัง นี่เป็นวิธีที่เป็นมิตรกับข้ามเบราว์เซอร์มากที่สุดและจะใช้ได้แม้กระทั่งบน 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%;
}
ดูกรณีทดสอบใน jsFiddle
: before และ :: before pseudo-element
เคล็ดลับอีกประการหนึ่งคือการใช้องค์ประกอบหลอกCSS 2.1 :before
หรือ CSS 3 pseudo-element ได้รับการสนับสนุนใน IE ตั้งแต่เวอร์ชัน 8 ในขณะที่ไม่รองรับ pseudo-element เลย หวังว่าจะได้รับการแก้ไขในเวอร์ชัน 10::before
:before
::before
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;
}
หมายเหตุเพิ่มเติม
เนื่องจากพฤติกรรมของz-index
คุณจะต้องตั้งค่าดัชนี z สำหรับคอนเทนเนอร์รวมทั้งค่าลบz-index
สำหรับภาพพื้นหลัง
กรณีทดสอบ
ดูกรณีทดสอบใน jsFiddle: