J'essaie d'ajouter une superposition noire transparente à une image chaque fois que la souris survole l'image avec seulement CSS. Est-ce possible? J'ai essayé ceci:
http://jsfiddle.net/Zf5am/565/
Mais je ne peux pas faire venir la div.
<div class="image">
<img src="http://www.newyorker.com/online/blogs/photobooth/NASAEarth-01.jpg" alt="" />
<div class="overlay" />
</div>
.image {
position: relative;
border: 1px solid black;
width: 200px;
height: 200px;
}
.image img {
max-width: 100%;
max-height: 100%;
}
.overlay {
position: absolute;
top: 0;
left: 0;
display: none;
background-color: red;
z-index: 200;
}
.overlay:hover {
display: block;
}
Réponses:
Je suggère d'utiliser un pseudo élément à la place de l'élément de superposition. Étant donné que les pseudo éléments ne peuvent pas être ajoutés sur des
img
éléments inclus , vous devrez quandimg
même encapsuler l' élément.EXEMPLE EN DIRECT ICI - EXEMPLE AVEC TEXTE
Comme pour le CSS, définissez des dimensions optionnelles sur l'
.image
élément et positionnez-le de manière relative. Si vous visez une image responsive, omettez simplement les dimensions et cela fonctionnera toujours (exemple) . Il est juste intéressant de noter que les dimensions doivent être sur l'élément parent plutôt que sur l'img
élément lui-même, voir .Donnez à l'
img
élément enfant une largeur de100%
du parent et ajoutezvertical-align:top
pour résoudre les problèmes d'alignement de la ligne de base par défaut.Quant au pseudo élément, définissez une valeur de contenu et positionnez-le absolument par rapport à l'
.image
élément. Une largeur / hauteur de100%
garantira que cela fonctionne avec desimg
dimensions variables . Si vous souhaitez effectuer la transition de l'élément, définissez une opacité de0
et ajoutez les propriétés / valeurs de transition.Utilisez une opacité de
1
lors du survol du pseudo élément afin de faciliter la transition:FIN DU RÉSULTAT ICI
Si vous souhaitez ajouter du texte au survol:
Pour l'approche la plus simple, ajoutez simplement le texte comme valeur du pseudo élément
content
:EXEMPLE ICI
Cela devrait fonctionner dans la plupart des cas; cependant, si vous avez plusieurs
img
éléments, vous ne voudrez peut-être pas que le même texte apparaisse au survol. Vous pouvez donc placer le texte dans undata-*
attribut et donc avoir un texte unique pour chaqueimg
élément.EXEMPLE ICI
Avec une
content
valeur deattr(data-content)
, le pseudo élément ajoute le texte de l' attribut de l'.image
élémentdata-content
:Vous pouvez ajouter du style et faire quelque chose comme ceci:
EXEMPLE ICI
Dans l'exemple ci-dessus, le
:after
pseudo élément sert de superposition noire, tandis que le:before
pseudo élément est la légende / le texte. Les éléments étant indépendants les uns des autres, vous pouvez utiliser un style distinct pour un positionnement plus optimal.la source
top:30%
fonctionne, voyez mon violon , mais pour une mise en page réactive, ce serait bien de le placer au centre exact. BTW: Merci pour cette belle annswer.top: 50%
/transform: translateY(-50%)
pour le centrage vertical. C'est l'une des approches mentionnées dans cette autre réponse si la mienne - stackoverflow.com/questions/5703552/…Filtre CSS3
Bien que cette fonctionnalité ne soit implémentée que dans le kit Web , et qu'elle ne soit pas compatible avec le navigateur , cela vaut la peine de jeter un coup d'œil à:
Démo JSFiddle
Références
Sujets similaires sur SO
la source
Vous étiez proche. Cela fonctionnera:
Vous deviez mettre l'
:hover
image sur et faire de la.overlay
couverture l'image entière en ajoutantright:0;
etbottom:0
.jsfiddle: http://jsfiddle.net/Zf5am/569/
la source
Voici un bon moyen d'utiliser: après sur l'image div, au lieu du div superposition supplémentaire: http://jsfiddle.net/Zf5am/576/
la source
.overlay
n'avait pas de hauteur ou de largeur et aucun contenu, et vous ne pouvez pas survolerdisplay:none
.J'ai plutôt donné au div la même taille et la même position que
.image
et change laRGBA
valeur au survol.http://jsfiddle.net/Zf5am/566/
la source
Voyez ce que j'ai fait ici: http://jsfiddle.net/dyarbrough93/c8wEC/
Tout d'abord, vous ne définissez jamais les dimensions de la superposition, ce qui signifie qu'elle ne s'affiche pas en premier lieu. Deuxièmement, je recommande de simplement changer le z-index de la superposition lorsque vous survolez l'image. Modifiez l'opacité / la couleur de la superposition en fonction de vos besoins.
la source
Vous pouvez accomplir cela en jouant avec l'opacité de l'image et en définissant la couleur d'arrière-plan de l'image sur le noir. En rendant l'image transparente, elle apparaîtra plus sombre.
CSS:
Vous devrez peut-être également définir l'opacité spécifique au navigateur pour que cela fonctionne également dans d'autres navigateurs.
la source
Je donnerais une hauteur min et une largeur min à votre div superposition de la taille de l'image, et changerais la couleur d'arrière-plan en survol
la source