Est-il possible de définir l'opacité d'une image d'arrière-plan sans affecter l'opacité des éléments enfants?
Exemple
Tous les liens dans le pied de page nécessitent une puce personnalisée (image d'arrière-plan) et l'opacité de la puce personnalisée doit être de 50%.
HTML
<div id="footer">
<ul>
<li><a href="#">Link 1</a></li>
<li><a href="#">Link 2</a></li>
<li><a href="#">Link 3</a></li>
<li><a href="#">Link 4</a></li>
<li><a href="#">Link 5</a></li>
</ul>
</div>
CSS
#footer ul li {
background: url(/images/arrow.png) no-repeat 0 50%;
}
Ce que j'ai essayé
J'ai essayé de définir l'opacité des éléments de la liste à 50%, mais l'opacité du texte du lien est également de 50% - et il ne semble pas y avoir de moyen de réinitialiser l'opacité des éléments enfants:
#footer ul li {
background: url(/images/arrow.png) no-repeat 0 50%;
/* will also set the opacity of the link text */
opacity: 0.5;
}
J'ai également essayé d'utiliser rgba, mais cela n'a aucun effet sur l'image d'arrière-plan:
#footer ul li {
/* rgba doesn't apply to the background image */
background: rgba(255, 255, 255, 0.5) url(/images/arrow.png) no-repeat 0 50%;
}
Réponses:
Vous pouvez utiliser CSS
linear-gradient()
avecrgba()
.la source
Prenez votre image dans un éditeur d'image, réduisez l'opacité, enregistrez-la au format .png et utilisez-la à la place.
la source
Cela fonctionnera avec tous les navigateurs
Si vous ne souhaitez pas que la transparence affecte l'ensemble du conteneur et ses enfants, vérifiez cette solution de contournement. Vous devez avoir un enfant absolument positionné avec un parent relativement positionné.
Vérifiez la démo sur http://www.impressivewebs.com/css-opacity-that-doesnt-affect-child-elements/
la source
position:relative;
et img surposition:absolute;
ne me permet PAS de remplacer l'opacité héritée sur img, et je ne peux pas utiliser le positionnement absolu pour les <li> eux-mêmes (c'est un gâchis ;-). En Javascript, j'ai essayéimgs[i].style.opacity = '1';
, mais cela ne fonctionne pas non plus pour remplacer l'opacité héritée. Si je comprends bien, je ne peux pas non plus utiliser rgba car j'ai besoin d'affecter les images elles-mêmes, pas seulement une couleur d'arrière-plan. Quelqu'un a une recommandation pour moi?Si vous utilisez l'image comme une puce, vous pouvez envisager le pseudo-élément: avant.
la source
*zoom: expression( … );
(voir : après et: avant que les pseudo-éléments de CSS ne piratent pour IE 7 ), mais IE7 est enfin en train de devenir dépassé.Vous pouvez mettre l'image dans le div: après ou div: avant et définir l'opacité sur ce "div virtuel"
trouvé ici http://css-tricks.com/snippets/css/transparent-background-images/
la source
Hack avec opacité .99 (moins de 1) crée un contexte d'index z afin que vous ne puissiez pas vous soucier des valeurs globales d'index z. (Essayez de le supprimer et voyez ce qui se passe dans la prochaine démo où le wrapper parent a un z-index positif.)
Si votre élément a déjà un z-index, alors vous n'avez pas besoin de ce hack.
Démo de cette technique .
la source
Malheureusement, au moment d'écrire cette réponse, il n'y a aucun moyen direct de le faire. Tu dois:
la source
Une autre option est l' approche CSS Tricks consistant à insérer un pseudo-élément de la taille exacte de l'élément d'origine juste derrière pour simuler l'effet d'arrière-plan opaque que nous recherchons. Parfois, vous devrez définir une hauteur pour le pseudo-élément.
la source
La propriété "filter", a besoin d'un entier pour le pourcentage d'opacité au lieu du double, afin de fonctionner pour IE7 / 8.
PS: je poste cela comme une réponse, car SO, a besoin d'au moins 6 caractères modifiés pour une modification.
la source
Pour vraiment affiner les choses, je recommande de placer les sélections appropriées dans les wrappers de ciblage du navigateur. C'est la seule chose qui a fonctionné pour moi quand je n'ai pas réussi à faire fonctionner IE7 et IE8 "avec les autres" (car je travaille actuellement pour une société de logiciels qui continue de les soutenir).
Je peux avoir des redondances dans le code ci-dessus - si quelqu'un souhaite le nettoyer davantage, n'hésitez pas!
la source
-moz-border-radius
en charge de Firefox 13 et ne recherche que laborder-radius
propriété standard maintenant). IE7 et IE8 sont une histoire différente, mais c'est juste IE-khtml-opacity
car il ne comprend pas la requête des médias, la rendant inutile 2) IE est plus stable que vous ne le pensez; il ne "explosera" pas simplement parce que vous ajoutez des préfixes non IE à une règle qui s'applique à IE. Le problème, au moment où vous l'avez affronté, devait venir d'ailleurs.Si vous devez définir l'opacité uniquement sur la puce, pourquoi ne définissez-vous pas le canal alpha directement dans l'image? Au fait, je ne pense pas qu'il existe un moyen de définir l'opacité d'une image d'arrière-plan via css sans changer l'opacité de l'élément entier (et de ses enfants aussi).
la source
Pour ajouter à ce qui précède, vous pouvez utiliser le canal alpha avec les nouveaux attributs de couleur, par exemple. rgba (0,0,0,0) ok donc c'est noir mais avec une opacité nulle donc en tant que parent cela n'affectera pas l'enfant. Cela ne fonctionne que sur Chrome, FF, Safari et .... I thin O.
convertir vos couleurs hexadécimales en RGBA
la source
background-image
comme demandé par l'OP.J'ai trouvé un tutoriel assez bon et simple sur ce problème. Je pense que cela fonctionne très bien (et même s'il prend en charge IE, je dis simplement à mes clients d'utiliser d'autres navigateurs):
Transparence d'arrière-plan CSS sans affecter les éléments enfants, via RGBa et filtres
De là, vous pouvez ajouter un support de dégradé, etc.
la source
Vous pouvez essayer ce code. Je pense que ça va marcher. Vous pouvez visiter la démo
la source