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 div
phầ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 :before
hoặc CSS 3 ::before
. :before
phần tử giả được hỗ trợ trong IE từ phiên bản 8, trong khi ::before
phầ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-index
bạn, bạn sẽ phải đặt chỉ số z cho vùng chứa cũng như âm z-index
cho hình nền.
Các trường hợp thử nghiệm
Xem trường hợp thử nghiệm trên jsFiddle: