Gray out image with CSS?

后端 未结 9 2124
轮回少年
轮回少年 2020-12-02 03:55

What\'s the best way (if any) to make an image appear \"grayed out\" with CSS (i.e., without loading a separate, grayed out version of the image)?

My context is that

相关标签:
9条回答
  • 2020-12-02 04:27

    If you don't mind using a bit of JavaScript, jQuery's fadeTo() works nicely in every browser I've tried.

    jQuery(selector).fadeTo(speed, opacity);
    
    0 讨论(0)
  • 2020-12-02 04:29

    Your here:

    <a href="#"><img src="img.jpg" /></a>
    

    Css Gray:

    img{
        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: grayscale(100%);
        -moz-filter: grayscale(100%);
        -ms-filter: grayscale(100%);
        -o-filter: grayscale(100%);
        filter: gray; /* IE6-9 */
        -webkit-filter: grayscale(100%); /* Chrome 19+, Safari 6+, Safari 6+ iOS */}
    

    Ungray:

    a:hover img{
        filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'grayscale\'><feColorMatrix type=\'matrix\' values=\'1 0 0 0 0, 0 1 0 0 0, 0 0 1 0 0, 0 0 0 1 0\'/></filter></svg>#grayscale");
        filter: grayscale(0%);
        -moz-filter: grayscale(0%);
        -ms-filter: grayscale(0%);
        -o-filter: grayscale(0%);
        filter: none ; /* IE6-9 */
        zoom:1; /* needed to trigger "hasLayout" in IE if no width or height is set */
        -webkit-filter: grayscale(0%); /* Chrome 19+, Safari 6+, Safari 6+ iOS */
        }
    

    I found it at: http://zkiwi.com/topic/chuyen-hinh-mau-thanh-trang-den-bang-css-nhu-the-nao

    Edit: IE10+ does not support DX filters as IE9 and earlier have done, nor does it support a prefixed version of the greyscale filter. You can fix it, use one in two solutions below:

    1. Set IE10+ to render using IE9 standards mode using the following meta element in the head: <meta http-equiv="X-UA-Compatible" content="IE=9">
    2. Use an SVG overlay in IE10 to accomplish the greyscaling internet explorer 10 - howto apply grayscale filter?
    0 讨论(0)
  • 2020-12-02 04:36

    To gray out:

    “to achromatize.”

    filter: grayscale(100%);
    

    @keyframes achromatization {
    	0% {}
    	25% {}
    	75% {filter: grayscale(100%);}
    	100% {filter: grayscale(100%);}
    }
    
    p {
    	font-size: 5em;
    	color: yellow;
    	animation: achromatization 2s ease-out infinite alternate;
    }
    p:first-of-type {
    	background-color: dodgerblue;
    }
    <p>
    	⚡ Bzzzt!
    </p>
    <p>
    	⚡ Bzzzt!
    </p>

    “to fill with gray.”

    filter: contrast(0%);
    

    @keyframes gray-filling {
    	0% {}
    	25% {}
    	50% {filter: contrast(0%);}
    	60% {filter: contrast(0%);}
    	70% {filter: contrast(0%) brightness(0%) invert(100%);}
    	80% {filter: contrast(0%) brightness(0%) invert(100%);}
    	90% {filter: contrast(0%) brightness(0%);}
    	100% {filter: contrast(0%) brightness(0%);}
    }
    
    p {
    	font-size: 5em;
    	color: yellow;
    	animation: gray-filling 5s ease-out infinite alternate;
    }
    p:first-of-type {
    	background-color: dodgerblue;
    }
    <p>
    	⚡ Bzzzt!
    </p>
    <p>
    	⚡ Bzzzt!
    </p>


    Helpful notes

    • What's the difference between CSS3 filter grayscale and saturate?

    • https://www.w3.org/TR/filter-effects-1

    0 讨论(0)
  • 2020-12-02 04:41

    Better to support all the browsers:

    img.lessOpacity {               
       opacity: 0.4;
       filter: alpha(opacity=40);
       zoom: 1;  /* needed to trigger "hasLayout" in IE if no width or height is set */ 
    }
    
    0 讨论(0)
  • 2020-12-02 04:42

    Here's an example that let's you set the color of the background. If you don't want to use float, then you might need to set the width and height manually. But even that really depends on the surrounding CSS/HTML.

    <style>
    #color {
      background-color: red;
      float: left;
    }#opacity    {
        opacity : 0.4;
        filter: alpha(opacity=40); 
    }
    </style>
    
    <div id="color">
      <div id="opacity">
        <img src="image.jpg" />
      </div>
    </div>
    
    0 讨论(0)
  • 2020-12-02 04:42

    Considering filter:expression is a Microsoft extension to CSS, so it will only work in Internet Explorer. If you want to grey it out, I would recommend that you set it's opacity to 50% using a bit of javascript.

    http://lyxus.net/mv would be a good place to start, because it discusses an opacity script that works with Firefox, Safari, KHTML, Internet Explorer and CSS3 capable browsers.

    You might also want to give it a grey border.

    0 讨论(0)
提交回复
热议问题