Ні, цього не можна зробити, оскільки це 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: