Không, điều này không thể được thực hiện vì opacityảnh hưởng đến toàn bộ phần tử bao gồm cả nội dung của nó và không có cách nào để thay đổi hành vi này. Bạn có thể giải quyết vấn đề này bằng hai phương pháp sau.
Div phụ
Thêm một divphần tử khác vào vùng chứa để giữ nền. Đây là phương pháp thân thiện với nhiều trình duyệt nhất và sẽ hoạt động ngay cả trên 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%;
}
Xem trường hợp thử nghiệm trên jsFiddle
: trước và :: trước phần tử giả
Một thủ thuật khác là sử dụng phần tử giả CSS 2.1 :beforehoặc CSS 3 ::before. :beforephần tử giả được hỗ trợ trong IE từ phiên bản 8, trong khi ::beforephần tử giả hoàn toàn không được hỗ trợ. Điều này hy vọng sẽ được khắc phục trong phiên bản 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;
}
Ghi chú bổ sung
Do hành vi của z-indexbạn, bạn sẽ phải đặt chỉ số z cho vùng chứa cũng như âm z-indexcho hình nền.
Các trường hợp thử nghiệm
Xem trường hợp thử nghiệm trên jsFiddle: