How do you change the color of an image to blue in css?

Given a transparent PNG displaying a simple shape in white, is it possible to somehow change the color of this through CSS? Some kind of overlay or what not?

Show
  • Surfin' Safari - Blog Archive » CSS Masks
  • How do you change the color of an image to blue in css?

    John Slegers

    42.8k22 gold badges194 silver badges163 bronze badges

    asked Sep 14, 2011 at 11:53

    4

    You can use filters with -webkit-filter and filter: Filters are relatively new to browsers but supported in over 90% of browsers according to the following CanIUse table: https://caniuse.com/#feat=css-filters

    You can change an image to grayscale, sepia and lot more (look at the example).

    So you can now change the color of a PNG file with filters.

    body {
        background-color:#03030a;
        min-width: 800px;
        min-height: 400px
    }
    img {
        width:20%;
        float:left; 
         margin:0;
    }
    /*Filter styles*/
    .saturate { filter: saturate(3); }
    .grayscale { filter: grayscale(100%); }
    .contrast { filter: contrast(160%); }
    .brightness { filter: brightness(0.25); }
    .blur { filter: blur(3px); }
    .invert { filter: invert(100%); }
    .sepia { filter: sepia(100%); }
    .huerotate { filter: hue-rotate(180deg); }
    .rss.opacity { filter: opacity(50%); }
    
    
    How do you change the color of an image to blue in css?
    How do you change the color of an image to blue in css?
    How do you change the color of an image to blue in css?
    How do you change the color of an image to blue in css?
    How do you change the color of an image to blue in css?
    How do you change the color of an image to blue in css?
    How do you change the color of an image to blue in css?
    How do you change the color of an image to blue in css?
    How do you change the color of an image to blue in css?
    How do you change the color of an image to blue in css?

    Source

    MaxiGui

    5,8864 gold badges14 silver badges32 bronze badges

    answered Jan 5, 2014 at 12:03

    How do you change the color of an image to blue in css?

    РАВИРАВИ

    10.8k5 gold badges29 silver badges39 bronze badges

    19

    You might want to take a look at Icon fonts. http://css-tricks.com/examples/IconFont/

    EDIT: I'm using Font-Awesome on my latest project. You can even bootstrap it. Simply put this in your :

    
    
    
    
    

    And then go ahead and add some icon-links like this:

    
    

    Here's the full cheat sheet

    --edit--

    Font-Awesome uses different class names in the new version, probably because this makes the CSS files drastically smaller, and to avoid ambiguous css classes. So now you should use:

    
    

    EDIT 2:

    Just found out github also uses its own icon font: Octicons It's free to download. They also have some tips on how to create your very own icon fonts.

    Max Hodges

    5,09411 gold badges49 silver badges68 bronze badges

    answered Nov 13, 2012 at 8:15

    Jules ColleJules Colle

    10.7k7 gold badges56 silver badges64 bronze badges

    3

    The simplest one line that worked for me:

    filter: opacity(0.5) drop-shadow(0 0 0 blue);
    

    You can adjust opacity from 0 to 1 to make color lighter or darker.

    answered Nov 8, 2018 at 10:43

    RehmatRehmat

    1,9052 gold badges22 silver badges27 bronze badges

    7

    I've been able to do this using SVG filter. You can write a filter that multiplies the color of source image with the color you want to change to. In the code snippet below, flood-color is the color we want to change image color to (which is Red in this case.) feComposite tells the filter how we're processing the color. The formula for feComposite with arithmetic is (k1*i1*i2 + k2*i1 + k3*i2 + k4) where i1 and i2 are input colors for in/in2 accordingly. So specifying only k1=1 means it will do just i1*i2, which means multiplying both input colors together.

    Note: This only works with HTML5 since this is using inline SVG. But I think you might be able to make this work with older browser by putting SVG in a separate file. I haven't tried that approach yet.

    Here's the snippet:

    
      
        
          
          
        
      
      
    
    
      
        
          
          
        
      
      
    
    
      
        
          
          
        
      
      
    

    answered Sep 23, 2015 at 9:52

    4

    Yes :)

    Surfin' Safari - Blog Archive » CSS Masks

    WebKit now supports alpha masks in CSS. Masks allow you to overlay the content of a box with a pattern that can be used to knock out portions of that box in the final display. In other words, you can clip to complex shapes based off the alpha of an image.
    [...]
    We have introduced new properties to provide Web designers with a lot of control over these masks and how they are applied. The new properties are analogous to the background and border-image properties that already exist.

    -webkit-mask (background)
    -webkit-mask-attachment (background-attachment)
    -webkit-mask-clip (background-clip)
    -webkit-mask-origin (background-origin)
    -webkit-mask-image (background-image)
    -webkit-mask-repeat (background-repeat)
    -webkit-mask-composite (background-composite)
    -webkit-mask-box-image (border-image)
    

    answered Sep 14, 2011 at 11:58

    benhowdle89benhowdle89

    36k65 gold badges200 silver badges324 bronze badges

    2

    Think I have a solution for this that's a) exactly what you were looking for 5 years ago, and b) is a bit simpler than the other code options here.

    With any white png (eg, white icon on transparent background), you can add an ::after selector to recolor.

    .icon {
        background: url(img/icon.png); /* Your icon */
        position: relative; /* Allows an absolute positioned psuedo element */
    }
    
    .icon::after{
        position: absolute; /* Positions psuedo element relative to .icon */
        width: 100%; /* Same dimensions as .icon */
        height: 100%;
        content: ""; /* Allows psuedo element to show */
        background: #EC008C; /* The color you want the icon to change to */
        mix-blend-mode: multiply; /* Only apply color on top of white, use screen if icon is black */
    }
    

    See this codepen (applying the color swap on hover): http://codepen.io/chrscblls/pen/bwAXZO

    answered Sep 30, 2016 at 16:54

    chrscbllschrscblls

    5552 gold badges7 silver badges16 bronze badges

    3

    The img tag has a background property just like any other. If you have a white PNG with a transparent shape, like a stencil, then you can do this:

    4

    In most browsers, you can use filters :

    • on both

      How do you change the color of an image to blue in css?
      How do you change the color of an image to blue in css?

    Background images

    You can apply this technique to a background image :

    #original, #changed {
        background: url('http://i.stack.imgur.com/kaKzj.jpg');
        background-size: cover;
        width: 30%;
        margin: 0 10% 0 10%;
        padding-bottom: 28%;
        float: left;
    }
    
    #changed {
        -webkit-filter : hue-rotate(180deg);
        filter : hue-rotate(180deg);
    }

    JavaScript

    You can use JavaScript to set a filter at runtime :

    var element = document.getElementById("changed");
    var filter = 'hue-rotate(120deg) saturate(2.4)';
    element.style['-webkit-filter'] = filter;
    element.style['filter'] = filter;
    #original, #changed {
        margin: 0 10%;
        width: 30%;
        float: left;
        background: url('http://i.stack.imgur.com/856IQ.png');
        background-size: cover;
        padding-bottom: 25%;
    }

    answered Mar 11, 2016 at 20:04

    How do you change the color of an image to blue in css?

    John SlegersJohn Slegers

    42.8k22 gold badges194 silver badges163 bronze badges

    1

    When changing a picture from black to white, or white to black the hue rotate filter does not work, because black and white are not technically colors. Instead, black and white color changes (from black to white or vice-versa) must be done with the invert filter property.

    .img1 { filter: invert(100%); }

    answered Apr 26, 2020 at 0:24

    How do you change the color of an image to blue in css?

    I found this while googling, I found best working for me...

    HTML

    CSS

    .img {
      background-color: red;
      width: 60px;
      height: 60px;
       -webkit-mask-image: url('http://i.stack.imgur.com/gZvK4.png');
    }
    

    http://jsfiddle.net/a63b0exm/

    answered Oct 10, 2018 at 20:12

    How do you change the color of an image to blue in css?

    2

    Answering because I was looking for a solution for this.

    the pen in @chrscblls answer works well if you have a white or black background, but mine wasn't. Aslo, the images were generated with ng-repeat, so I couldn't have their url in my css AND you can't use ::after on img tags.

    So, I figured a work around and thought it might help people if they too stumble here.

    So what I did is pretty much the same with three main differences:

    • the url being in my img tag, I put it(and a label) in another div on which ::after will work.
    • the 'mix-blend-mode' is set at 'difference' instead of 'multiply' or 'screen'.
    • I added a ::before with exactly the same value so the ::after would do the 'difference' of the 'difference' made by the ::before and cancelled it-self.

    To change it from black to white or white to black the background color need to be white. From black to colors, you can choose whatever color. From white to colors tho, you'll need to choose the opposite color of the one you want.

    .divClass{
       position: relative;
       width: 100%;
       height: 100%;
       text-align: left;
    }
    .divClass:hover::after, .divClass:hover::before{
       position: absolute;
       width: 100%;
       height: 100%;
       background: #FFF;
       mix-blend-mode: difference;
       content: "";
    }
    

    https://codepen.io/spaceplant/pen/oZyMYG


    Since I posted this answer I made an other pen using a different method :

    * {
      box-sizing: border-box;
    }
    
    body {
      background-color: CadetBlue;
      font-family: "Lato", sans-serif;
      text-align: center;
    }
    button {
      display: flex;
      justify-content: center;
      min-width: 182px;
      padding: 0.5em 1em;
      margin: 2em auto;
      cursor: pointer;
      pointer-events: auto;
      border-radius: 4px;
      border: none;
      background: #85b5b7;
      box-shadow: 0 6px #6fa8aa;
    }
    label {
      font-weight: 400;
      font-size: 24px;
      margin: auto 0;
      color: white;
    }
    
    .icon {
      height: 64px;
      width: 64px;
      background-color: white;
      -webkit-mask-repeat: no-repeat;
              mask-repeat: no-repeat;
      -webkit-mask-position: left center;
              mask-position: left center;
      -webkit-mask-size: auto 48px;
              mask-size: auto 48px;
              mask-mode: luminance;
      -webkit-mask-image: url("https://upload.wikimedia.org/wikipedia/commons/thumb/d/d1/Bubbles-alt-icon.png/640px-Bubbles-alt-icon.png");
              mask-image: url("https://upload.wikimedia.org/wikipedia/commons/thumb/d/d1/Bubbles-alt-icon.png/640px-Bubbles-alt-icon.png");
    }
    button label span {
      color: #395f60;
    }
    button:hover {
      color: #395f60;
      transform: translatey(4px);
      box-shadow: 0 2px #6fa8aa;
    }
    button:hover .icon {
      background-color: #395f60;
    }

    answered Mar 24, 2017 at 19:12

    SalixSalix

    1,2608 silver badges13 bronze badges

    4

    I required a specific colour, so filter didn't work for me.

    Instead, I created a div, exploiting CSS multiple background images and the linear-gradient function (which creates an image itself). If you use the overlay blend mode, your actual image will be blended with the generated "gradient" image containing your desired colour (here, #BADA55)

    .colored-image {
            background-image: linear-gradient(to right, #BADA55, #BADA55), url("https://i.imgur.com/lYXT8R6.png");
            background-blend-mode: overlay;
            background-size: contain;
            width: 200px;
            height: 200px;        
        }

    answered Apr 10, 2017 at 7:22

    How do you change the color of an image to blue in css?

    rolznzrolznz

    6899 silver badges16 bronze badges

    2

    Use this great codepen example that you insert your hex color value and it returns the needed filter to apply this color to png

    CSS filter generator to convert from black to target hex color

    for example i needed my png to have the following color #EF8C57

    then you have to apply the following filter to you png Result:

    filter: invert(76%) sepia(30%) saturate(3461%) hue-rotate(321deg) brightness(98%) contrast(91%);
    

    How do you change the color of an image to blue in css?

    Sven Eberth

    2,97112 gold badges22 silver badges27 bronze badges

    answered Jun 30, 2021 at 22:05

    How do you change the color of an image to blue in css?

    2

    body{
      background: #333 url(/images/classy_fabric.png);
      width: 430px;
      margin: 0 auto;
      padding: 30px;
    }
    .preview{
      background: #ccc;
      width: 415px;
      height: 430px;
      border: solid 10px #fff;
    }
    
    input[type='radio'] {
      -webkit-appearance: none;
      -moz-appearance: none;
      width: 25px;
      height: 25px;
      margin: 5px 0 5px 5px;
      background-size: 225px 70px;
      position: relative;
      float: left;
      display: inline;
      top: 0;
      border-radius: 3px;
      z-index: 99999;
      cursor: pointer;
      box-shadow: 1px 1px 1px #000;
    }
    
    input[type='radio']:hover{
      -webkit-filter: opacity(.4);
      filter: opacity(.4);    
    }
    
    .red{
      background: red;
    }
    
    .red:checked{
      background: linear-gradient(brown, red)
    }
    
    .green{
      background: green;
    }
    
    .green:checked{
      background: linear-gradient(green, lime);
    }
    
    .yellow{
      background: yellow;
    }
    
    .yellow:checked{
      background: linear-gradient(orange, yellow);
    }
    
    .purple{
      background: purple;
    }
    
    .pink{
      background: pink;
    }
    
    .purple:checked{
      background: linear-gradient(purple, violet);
    }
    
    .red:checked ~ img{
      -webkit-filter: opacity(.5) drop-shadow(0 0 0 red);
      filter: opacity(.5) drop-shadow(0 0 0 red);
    }
    
    .green:checked ~ img{
      -webkit-filter: opacity(.5) drop-shadow(0 0 0 green);
      filter: opacity(.5) drop-shadow(0 0 0 green);
    }
    
    .yellow:checked ~ img{
      -webkit-filter: opacity(.5) drop-shadow(0 0 0 yellow);
      filter: opacity(.5) drop-shadow(0 0 0 yellow);
    }
    
    .purple:checked ~ img{
      -webkit-filter: opacity(.5) drop-shadow(0 0 0 purple);
      filter: opacity(.5) drop-shadow(0 0 0 purple);
    }
    
    .pink:checked ~ img{
      -webkit-filter: opacity(.5) drop-shadow(0 0 0 pink);
      filter: opacity(.5) drop-shadow(0 0 0 pink);
    }
    
    
    img{
      width: 394px;
      height: 375px;
      position: relative;
    }
    
    .label{
      width: 150px;
      height: 75px;
      position: absolute;
      top: 170px;
      margin-left: 130px;
    }
    
    ::selection{
      background: #000;
    }
    How do you change the color of an image to blue in css?

    Source: https://codepen.io/taryaoui/pen/EKkcu

    answered Sep 13, 2019 at 14:57

    How do you change the color of an image to blue in css?

    Mahdi BashirpourMahdi Bashirpour

    15.2k11 gold badges110 silver badges137 bronze badges

    Try this:

     -webkit-filter: brightness(0) invert(1);
     filter: brightness(0) invert(1); 
    

    How do you change the color of an image to blue in css?

    Hedam

    2,16425 silver badges53 bronze badges

    answered Apr 29, 2021 at 2:37

    /* change image color to white */
    filter: invert(100%) sepia(16%) saturate(7463%) hue-rotate(222deg) brightness(119%) contrast(115%);
    
    /* change image color to red */`
    filter: invert(16%) sepia(99%) saturate(7404%) hue-rotate(4deg) brightness(95%) contrast(118%);
    
    /* change image color to green */
    filter: invert(26%) sepia(89%) saturate(1583%) hue-rotate(95deg) brightness(96%) contrast(106%);
    
    /* change image color to blue */
    filter: invert(10%) sepia(90%) saturate(5268%) hue-rotate(245deg) brightness(109%) contrast(155%);
    

    answered Jun 28 at 1:37

    How do you change the color of an image to blue in css?

    There's no need for a whole font set if you only need one icon, plus I feel it being more "clean" as an individual element. So, for this purpose, in HTML5 you can place a SVG directly inside the document flow. Then you can define a class in your .CSS stylesheet and access its background color with the fill property:

    Working fiddle: http://jsfiddle.net/qmsj0ez1/

    Note that, in the example, I've used :hoverto illustrate the behaviour; if you just want to change color for the "normal" state, you should remove the pseudoclass.

    answered Aug 12, 2014 at 11:58

    How do you change the color of an image to blue in css?

    PerePere

    1,04812 silver badges20 bronze badges

    The solution that worked for me was using filter: drop-shadow

    filter: drop-shadow works differently than regular box-shadow.

    filter one applies shadow to real shape (so it supports transparent images).

    The trick now is to 'hide' real image and show only the shadow.

    https://jsfiddle.net/d4m8x0qb/2

    How do you change the color of an image to blue in css?

    Note that my use case is modifying icons colors into one, solid color, so this approach works for me, but might not for other use cases

    answered Dec 13, 2021 at 9:23

    How do you change the color of an image to blue in css?

    Adam PietrasiakAdam Pietrasiak

    12.3k7 gold badges74 silver badges90 bronze badges

    To literally change the color, you could incorporate a CSS transition with a -webkit-filter where when something happens you would invoke the -webkit-filter of your choice. For example:

    img {
        -webkit-filter:grayscale(0%);
        transition: -webkit-filter .3s linear;
        }
    img:hover 
        {
        -webkit-filter:grayscale(75%);
        }
    

    answered Jun 3, 2015 at 20:15

    beta208beta208

    5871 gold badge5 silver badges18 bronze badges

    You could use filter: hue-rotate(Ndeg), but if the image is black and white, the hue will never change.

    However, you could combine it with filter: sepia(100). That will add color to the image that the hue-rotate filter CAN change.

    Sepia adds a rather desaturated color, so enhance that a bit with filter: saturate(50); That makes it a deeper color that hue-rotate can better work with.

    Then combine them all together:

    filter: sepia(100) saturate(50) hue-rotate(280deg)

    Then experiment with the rotation degrees until you find your preferred color.

    answered Sep 20 at 16:13

    KWallaceKWallace

    1,42814 silver badges24 bronze badges

    Can I change image color in CSS?

    Given an image and the task is to change the image color using CSS. Use filter function to change the png image color. Filter property is mainly used to set the visual effect to the image. There are many property value exist to the filter function.

    How do I change the color of something in CSS?

    Simply add the appropriate CSS selector and define the color property with the value you want. For example, say you want to change the color of all paragraphs on your site to navy. Then you'd add p {color: #000080; } to the head section of your HTML file.

    How do I fill an image with color in CSS?

    You can set background-color CSS property. You can create non-transparent part that will be fixed, and transparent part of image which will be filled by any color you like via CSS.

    How do I change the color of a png in CSS?

    We can change the color of PNG image using following CSS styles: filter: none | blur() | brightness() | contrast() | drop-shadow() | grayscale() | hue-rotate() | invert() | opacity() | saturate() | sepia() | url() | initial | inherit; The above property is used to set the visual effect of the image.