Change Icon Color
Overview
I encountered this issue when I was working on a website and I needed to change the color of the social media icons at the footer sections, in the same way that you can change the color of fonts.
PNG Icons
After some research, I learned that I cannot directly change the color of icons in PNG format using CSS, but there are some options.
Option 1: Use an SVG Instead of PNG
If possible, replace the PNG icons with SVG files, then use fill
or color
in CSS:
footer.footer img {
fill: red; /* Works for SVG */
}
Option 2: Use CSS filter
to Tint the PNG Icons
If PNG icons cannot be replaced, use CSS filter
to apply a color effect.
footer.footer img {
filter: brightness(0) invert(1); /* Turns the image white */
}
To change the color, adjust invert()
, sepia()
, and hue-rotate()
, like this:
/* Turns image color to teal-green or hex code #0a7c7c */
footer.footer img {
filter: invert(31%)
sepia(87%)
saturate(1318%)
hue-rotate(152deg)
brightness(84%)
contrast(92%);
}
If you the hex code of your desired color, you can convert it to CSS filter by going to this site: Hex Color To CSS Filter Converter
This method works best for monochrome icons.
Option 3: Use Transparent PNGs with background-color
If the PNG icons have transparency, set thebackground-color
:
footer.footer img {
background-color: red;
}
This works if the icons have a transparent background.
Option 4: Use Colored Overlay with mix-blend-mode
Modify the HTML and wrap the image inside a div
, then use mix-blend-mode
:
.icon-container {
position: relative;
display: inline-block;
}
.icon-container img {
display: block;
}
.icon-container::after {
content: "";
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: red;
mix-blend-mode: multiply;
pointer-events: none;
}
This overlays a red tint on the icon.