J'ai souvent vu cette question à la fois sur SO et sur le Web. Mais aucun d'entre eux n'a été ce que je cherche.
Comment ajouter une superposition de couleurs à une image d'arrière-plan en utilisant uniquement CSS?
Exemple HTML:
<div class="testclass">
</div>
Exemple CSS:
.testclass {
background-image: url("../img/img.jpg");
}
Notez s'il vous plaît:
Je veux résoudre ce problème en utilisant uniquement CSS. Je ne veux PAS ajouter une div enfant dans la "classe de test" de la div pour la superposition de couleurs.
Cela ne devrait pas être un "effet de survol". Je veux simplement ajouter une surimpression de couleur à l'image d'arrière-plan.
Je veux pouvoir utiliser l'opacité, c'est-à-dire que je recherche une solution permettant la couleur RGBA.
Je cherche juste une couleur, disons noir. Pas un dégradé.
Est-ce possible? (Je serais surpris sinon, mais je n'ai rien trouvé à ce sujet), et si oui, quel est le meilleur moyen d'y parvenir?
Toutes les suggestions et conseils sont appréciés!
Je vois 2 options faciles:
option de dégradé:
html {
min-height:100%;
background:linear-gradient(0deg,rgba(255,0,150,0.3),rgba(255,0,150,0.3)),url(http://lorempixel.com/800/600/nature/2);
background-size:cover;
}
option d'ombre:
html {
min-height:100%;
background:url(http://lorempixel.com/800/600/nature/2);
background-size:cover;
box-shadow:inset 0 0 0 2000px rgba(255,0,150,0.3);
}
un vieux codepen du mien avec peu d'exemples
une troisième option
La propriété CSS
background-blend-mode
CSS définit la manière dont les images d'arrière-plan d'un élément doivent se fondre les unes dans les autres et avec la couleur d'arrière-plan de l'élément.
html {
min-height:100%;
background:url(http://lorempixel.com/800/600/nature/2) rgba(255,0,150,0.3);
background-size:cover;
background-blend-mode: multiply;
}
Vous pouvez utiliser un pseudo-élément pour créer la superposition.
.testclass {
background-image: url("../img/img.jpg");
position: relative;
}
.testclass:before {
content: "";
position: absolute;
left: 0; right: 0;
top: 0; bottom: 0;
background: rgba(0,0,0,.5);
}
background-image
prend plusieurs valeurs.
donc une combinaison d'un seul dégradé linéaire de couleur et de css blend modes
fera l'affaire.
.testclass {
background-image: url("../images/image.jpg"), linear-gradient(rgba(0,0,0,0.5),rgba(0,0,0,0.5));
background-blend-mode: overlay;
}
notez qu'il n'y a aucune prise en charge sur IE/Edge pour les modes de fusion CSS.
Essayez ceci, c'est simple et clair. Je l'ai trouvé à partir d'ici: https://css-tricks.com/tinted-images-multiple-backgrounds/
.tinted-image {
width: 300px;
height: 200px;
background:
/* top, transparent red */
linear-gradient(
rgba(255, 0, 0, 0.45),
rgba(255, 0, 0, 0.45)
),
/* bottom, image */
url(https://s3-us-west-2.amazonaws.com/s.cdpn.io/3/owl1.jpg);
}