w3schools saturation filtros color change black and css image background cross-browser grayscale

saturation - Greyscale Background Css Imágenes



css invert color (4)

He buscado mucho en la web, pero no puedo encontrar una solución de navegador cruzado para desvanecer una imagen backgrund css en escala de grises y viceversa.

La única solución de trabajo es aplicar la escala de grises de filtro CSS3:

-webkit-filter: grayscale(100%);

pero esto funciona solo con Chrome v.15 + y Safari v.6 + (como se puede ver aquí: http://css3.bradshawenterprises.com/filters/ )

Muchas páginas en línea hablan sobre esta solución para atenuar los elementos:

filter: url("data:image/svg+xml;utf8,<svg xmlns=/'http://www.w3.org/2000/svg/'><filter id=/'grayscale/'><feColorMatrix type=/'matrix/' values=/'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0/'/></filter></svg>#grayscale"); /* Firefox 10+, Firefox on Android */ filter: gray; /* IE6-9 */

(como se puede ver aquí: http://www.karlhorky.com/2012/06/cross-browser-image-grayscale-with-css.html )

Pero en realidad no parece funcionar para las imágenes de fondo CSS, como lo hace el filtro webkit.

¿Hay alguna solución (tal vez con jquery?) Para hackear esta falta de soporte para filtrar en buscadores menos avanzados?


¡No necesita usar una codificación complicada realmente!

Escala de Grises:

-webkit-filter: escala de grises (100%);

Escala de grises "Hover-out":

-webkit-filter: escala de grises (0%);

Simplemente hice que mi clase css tuviera una clase de vuelo flotante por separado y se agregara en la segunda escala de grises. Es realmente simple si realmente no te gusta la complejidad.


Aqui tienes:

<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>bluantinoo CSS Grayscale Bg Image Sample</title> <style type="text/css"> div { border: 1px solid black; padding: 5px; margin: 5px; width: 600px; height: 600px; float: left; color: white; } .grayscale { background: url(yourimagehere.jpg); -moz-filter: url("data:image/svg+xml;utf8,<svg xmlns=/'http://www.w3.org/2000/svg/'><filter id=/'grayscale/'><feColorMatrix type=/'matrix/' values=/'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0/'/></filter></svg>#grayscale"); -o-filter: url("data:image/svg+xml;utf8,<svg xmlns=/'http://www.w3.org/2000/svg/'><filter id=/'grayscale/'><feColorMatrix type=/'matrix/' values=/'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0/'/></filter></svg>#grayscale"); -webkit-filter: grayscale(100%); filter: gray; filter: url("data:image/svg+xml;utf8,<svg xmlns=/'http://www.w3.org/2000/svg/'><filter id=/'grayscale/'><feColorMatrix type=/'matrix/' values=/'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0/'/></filter></svg>#grayscale"); } .nongrayscale { background: url(yourimagehere.jpg); } </style> </head> <body> <div class="nongrayscale"> this is a non-grayscale of the bg image </div> <div class="grayscale"> this is a grayscale of the bg image </div> </body> </html>

Probado en FireFox, Chrome e IE. También adjunté una imagen para mostrar los resultados de mi implementación de esto.

EDITAR: Además, si quieres que la imagen simplemente alterne con jQuery, aquí está el origen de la página para eso ... He incluido el enlace web a jQuery y a la imagen que está en línea, así que solo debes poder copiar / pegar para probarlo:

<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>bluantinoo CSS Grayscale Bg Image Sample</title> <script src="http://code.jquery.com/jquery-1.11.0.min.js"></script> <style type="text/css"> div { border: 1px solid black; padding: 5px; margin: 5px; width: 600px; height: 600px; float: left; color: white; } .grayscale { background: url(http://www.polyrootstattoo.com/images/Artists/Buda/40.jpg); -moz-filter: url("data:image/svg+xml;utf8,<svg xmlns=/'http://www.w3.org/2000/svg/'><filter id=/'grayscale/'><feColorMatrix type=/'matrix/' values=/'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0/'/></filter></svg>#grayscale"); -o-filter: url("data:image/svg+xml;utf8,<svg xmlns=/'http://www.w3.org/2000/svg/'><filter id=/'grayscale/'><feColorMatrix type=/'matrix/' values=/'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0/'/></filter></svg>#grayscale"); -webkit-filter: grayscale(100%); filter: gray; filter: url("data:image/svg+xml;utf8,<svg xmlns=/'http://www.w3.org/2000/svg/'><filter id=/'grayscale/'><feColorMatrix type=/'matrix/' values=/'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0/'/></filter></svg>#grayscale"); } .nongrayscale { background: url(http://www.polyrootstattoo.com/images/Artists/Buda/40.jpg); } </style> <script type="text/javascript"> $(document).ready(function () { $("#image").mouseover(function () { $(".nongrayscale").removeClass().fadeTo(400,0.8).addClass("grayscale").fadeTo(400, 1); }); $("#image").mouseout(function () { $(".grayscale").removeClass().fadeTo(400, 0.8).addClass("nongrayscale").fadeTo(400, 1); }); }); </script> </head> <body> <div id="image" class="nongrayscale"> rollover this image to toggle grayscale </div> </body> </html>

EDIT 2 (Para usuarios de IE10-11): la solución anterior no funcionará con los cambios que Microsoft ha realizado en el navegador últimamente, así que aquí hay una solución actualizada que le permitirá escalar (o desaturar) sus imágenes en escala de grises.

<svg> <defs> <filter xmlns="http://www.w3.org/2000/svg" id="desaturate"> <feColorMatrix type="saturate" values="0" /> </filter> </defs> <image xlink:href="http://www.polyrootstattoo.com/images/Artists/Buda/40.jpg" width="600" height="600" filter="url(#desaturate)" /> </svg>


También puedes usar:

img{ filter:grayscale(100%); } img:hover{ filter:none; }


Usando los navegadores actuales puedes usarlo así:

img { -webkit-filter: grayscale(100%); /* Chrome, Safari, Opera */ filter: grayscale(100%); }

y para remediarlo:

img:hover{ -webkit-filter: grayscale(0%); /* Chrome, Safari, Opera */ filter: grayscale(0%); }

trabajó conmigo y es mucho más corto. Hay incluso más que uno puede hacer dentro del CSS:

filter: none | blur() | brightness() | contrast() | drop-shadow() | grayscale() | hue-rotate() | invert() | opacity() | saturate() | sepia() | url();

Para obtener más información y navegadores compatibles, vea esto: http://www.w3schools.com/cssref/css3_pr_filter.asp