Нет, это невозможно, так как opacity
влияет на весь элемент, включая его содержимое, и нет возможности изменить это поведение. Вы можете обойти это двумя следующими способами.
Вторичный div
Добавьте 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-index для контейнера, а также отрицательный z-index
для фонового изображения.
Тестовые примеры
См. Тестовый пример на jsFiddle: