Non, cela ne peut pas être fait depuis opacity
affecte tout l'élément, y compris son contenu, et il n'y a aucun moyen de modifier ce comportement. Vous pouvez contourner ce problème avec les deux méthodes suivantes.
Div secondaire
Ajoutez un autre div
élément au conteneur pour contenir l'arrière-plan. C'est la méthode la plus conviviale pour tous les navigateurs et fonctionnera même sur 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%;
}
Voir le cas de test sur jsFiddle
: avant et :: avant pseudo-élément
Une autre astuce consiste à utiliser les pseudo-éléments CSS 2.1 :before
ou CSS 3 ::before
. :before
Le pseudo-élément est pris en charge dans IE à partir de la version 8, tandis que le ::before
pseudo-élément n'est pas du tout pris en charge. Nous espérons que cela sera corrigé dans la version 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;
}
Notes complémentaires
En raison de votre comportement, z-index
vous devrez définir un z-index pour le conteneur ainsi qu'un négatifz-index
pour l'image d'arrière-plan.
Cas de test
Voir le cas de test sur jsFiddle: