Ні, цього не можна зробити, оскільки це 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 псевдоелемент
Інший фокус полягає у використанні псевдоелементів CSS 2.1 :before
або CSS 3 ::before
. :before
псевдоелемент підтримується в IE з версії 8, тоді як ::before
псевдоелемент взагалі не підтримується. Сподіваємось, це буде виправлено у версії 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;
}
Додаткові нотатки
Через z-index
вашу поведінку вам доведеться встановити z-індекс для контейнера, а також мінус z-index
для фонового зображення.
Тестові кейси
Див. Тестовий приклад на jsFiddle: