Est-il possible de teinter une image avec une couleur spécifique en utilisant CSS sans superposition dans un navigateur WebKit?
tentatives infructueuses
hue-rotate
Mais n'a pas trouvé de moyen de la teindre avec une couleur spécifique.-webkit-filter: url(#tint)
ne fonctionne pas sur Chrome.opacity
/box-shadow
Avec les filtres drop-shadow
/opacity
ne génèrent pas l'effet souhaité.Idées
hue-rotate
, saturation
, brightness
) pour générer sa teinte?Finalement, ce sera le cas, en utilisant shaders. Voir la documentation du W3C sur les filtres.
Pour le moment , ce qui est possible par exemple est:
-webkit-filter: grayscale; /*sepia, hue-rotate, invert....*/
-webkit-filter: brightness(50%);
Voir
Mise à jour :
Adobe a publié ses laboratoires de filtrage CSS basés sur HTML5 avec prise en charge des filtres personnalisés (Shaders) sur navigateurs pris en charge:
Bien qu'il n'y ait pas de filtre de teinte autonome, vous pouvez en créer un par composition des filtres existants sans ombrage.
Combinez le sépia pour unifier la couleur, puis faites pivoter la teinte jusqu'à la couleur avec laquelle vous souhaitez la teindre
-webkit-filter: sepia(90%) hue-rotate(90deg);
J'utilise des bordures avec une valeur alpha pour mes teintes, c'est vraiment une superposition mais n'utilise aucun élément DOM supplémentaire rendant la transition vers sépia + teinte-rotation plus simple lorsque les autres navigateurs obtiennent ces filtres.
Cela est possible en utilisant un filtre SVG aujourd'hui sans avoir à utiliser de shaders. Vous pouvez l'utiliser comme filtre CSS (bien qu'il ne fonctionne pas dans IE) via la syntaxe -webkit-filter: "url (#yourfilterID)", etc.
<svg width="800px" height="600px" viewbox="0 0 800 600">
<defs>
<filter id="f1" x="0%" y="0%" width="100%" height="100%" color-interpolation-filters="sRGB">
<feColorMatrix id="tinter" type="matrix" values=".6 .6 .6 0 0
.2 .2 .2 0 0
.0 .0 .0 0 0
0 0 0 1 0"/>
</filter>
</defs>
<image x="0" y="0" width="550" height="370" preserveAspectRatio="true"
filter="url(#tinter)" xlink:href="http://www.crossfitwaxahachie.com/wp-content/uploads/2012/04/IMG_0752.jpg"/>
</svg>
Démo dynamique sur http://codepen.io/mullany/details/baLkH/
box-shadow: inset 0px 0px 64px 64px cornflowerblue, 0px 0px 4px 4px cornflowerblue;
Une teinte dans n'importe quelle couleur (plutôt que des filtres sépia ou de rotation qui ne sont pas pris en charge partout) pourrait être obtenue par une boîte-ombre insérée, dans la taille appropriée.
Que diriez-vous alors d'une sous-couche?
HTML:
<span class="tint"><img src="..." /></span>
CSS:
.tint { background-color:red; display:inline-block; }
.tint img { opacity:0.8 }
Ajustez la couleur et l'opacité comme vous le souhaitez. Ne fonctionne pas vraiment sur les images avec transparence.