Superposer une image de fond avec une couleur rgba, avec une transition CSS3
Plus tôt aujourd'hui, j'ai demandé à Superposition d'une image de fond d'écran avec une rgba couleur d'arrière-plan. Mon but est d'avoir un div avec un background-image, et quand quelqu'un passe le div, le background-image se superpose avec une couleur rvba. Dans la réponseune solution avec :after
a été donnée:
#the-div {
background-image: url('some-url');
}
#the-div:hover:after {
content: ' ';
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
background-color: rgba(0,0,0,.5);
}
Maintenant, je voudrais avoir la même chose, mais avec une transition CSS: j'aimerais que la couleur d'arrière-plan à l'évanouissement. J'ai essayé d'ajouter transition: all 1s;
à la #the-div
CSS, mais cela ne fonctionne pas. J'ai aussi essayer de l'ajouter à #the-div:hover
et #the-div:after
mais cela ne fonctionne pas non plus.
Est-il un pur CSS de manière à ajouter une décoloration en superposition à une div avec un background-image?
source d'informationauteur Keelan
Vous devez vous connecter pour publier un commentaire.
Oui, c'est possible.
démo
Ce que je fais ici?
Ce que je fais ici, c'est que je suis en train d'un RGBa
background-color
sur lediv
derrière sonbackground-image
et la transition cebackground-color
(alpha) sur:hover
. Tout cela se passe derrière labackground-image
. Cependant, je suis également en utilisantbackground-color: inherit
sur le pseudo-élément, ce qui signifie que, à un moment donné, le pseudo-élément, qui est situé au-dessus de son parentdiv
(et donc au-dessus de labackground-image
de ladiv
) va avoir le mêmebackground-color
(ce qui signifie que lebackground-color
de la pseudo-élément est d'aller à la transition de largba(0,0,0,0)
àrgba(0,0,0,.5)
sur:hover
).Pourquoi le faire de cette façon?
La raison pour laquelle je ne suis pas la transition directement le
background-color
de la pseudo-élément, c'est que le soutien des transitions sur les pseudo-éléments n'est toujours pas bon encore.Soutien pour les transitions sur les pseudo-éléments
✓ Firefox prend en charge les transitions sur les pseudo-éléments et les a soutenus pendant un certain temps, nous allons obtenir ce hors de la voie d'abord.
✗ Les versions actuelles de Safari et Opéra ne prennent pas en charge les transitions sur les pseudo-éléments.
Chrome prend en charge les transitions sur les pseudo-éléments seulement à partir de la version 26.
IE10 les prend en charge dans un peu d'une manière bizarre, ce qui signifie que quelque chose comme:
ne fonctionne pas, vous devez spécifier l'état de pointage sur l'élément lui-même. Comme ceci:
Plus d'informations et d'exemples sur la façon de transition différentes propriétés de pseudo-éléments à l'aide de cette
inherit
technique: http://vimeo.com/51897358MODIFIER
Transitions directement sur les pseudo-éléments sont maintenant pris en charge dans l'Opéra depuis le passage à Clignoter et Safari depuis 6.1.
Allthough @Ana technique est aussi très agréable, et fonctionne très bien, permettez-moi de modifier légèrement ma réponse à la question précédenteet ajouter de la transition dans ce code.
http://jsfiddle.net/Pevara/N2U6B/2/
Ce que j'ai fait est que j'ai défini le
:after
pseudo élément sur l'état par défaut de la div au lieu de seulement sur l'état de pointage, mais avec un fond transparent, et une transition sur la couleur d'arrière-plan. Sur le vol stationnaire de la div, j'ai changer la couleur d'arrière-plan de la pseudo-élément moins transparente. Grâce à la transition, il s'estompe bien.La technique est essentiellement la même chose que @Ana a fait, mais peut-être un peu plus intuitive car je n'utilise pas le
background-color: inherit;
. Aussi, si la div seraient devient plus grand que l'image de fond, vous ne seriez pas obtenir le double des ténèbres " sur les bords, comme démontré ici http://codepen.io/anon/pen/cjoHr contre ici http://jsfiddle.net/Pevara/N2U6B/3/