htmlcssfont-awesomefont-awesome-5

FontAwesome 5 - Multi color icon


FontAwesome 5 offers thousands of icons that are built with SVG. This way, it's easy to color the entire icon by using fill. But what if I want to use multiple colors? For example, given the icon Google, I want to color it like so:

CSS multi color icon of Google


Solution

  • By using gradient for the color and two icons we may achieve this but it remains a hacky way and you need to handle each case (icon + coloration) specifically:

    .fa-google path{
      fill:url(#grad1);
    }
    .fa-google + .fa-google path{
      fill:url(#grad2);
    }
    .icon {
      display:inline-block;
      position:relative;
    }
    .fa-google + .fa-google {
       position:absolute;
       left:0;
       top:0;
       clip-path: polygon(0% 0%,120% 0%,0% 75%);
    }
    <script defer src="https://use.fontawesome.com/releases/v5.3.1/js/all.js" ></script>
    <svg style="width:0;height:0;">
      <defs>
        <linearGradient id="grad1" x1="0%" y1="30%" x2="50%" y2="0%">
          <stop offset="50%" stop-color="#34a853" />
          <stop offset="50%" stop-color="#4285f4" />
        </linearGradient>
        <linearGradient id="grad2" x1="0%" y1="30%" x2="50%" y2="0%">
          <stop offset="50%" stop-color="#fbbc05" />
          <stop offset="50%" stop-color="#ea4335" />
        </linearGradient>
      </defs>
    </svg>
    <div class="icon"> 
    <i class="fab fa-google fa-7x"></i>
    <i class="fab fa-google fa-7x"></i>
    </div>

    We can also consider the use of conic-gradient() with one icon. Again, it is specific to this particular case:

    .fa-google {
      background: conic-gradient(from -45deg, #ea4335 110deg, #4285f4 90deg 180deg, #34a853 180deg 270deg, #fbbc05 270deg) 73% 55%/150% 150% no-repeat;
      -webkit-background-clip: text;
      background-clip: text;
      color: transparent;
      -webkit-text-fill-color: transparent;
    }
    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.12.0/css/all.css">
    
    <i class="fab fa-google fa-10x"></i>
    <i class="fab fa-google fa-6x"></i>
    <i class="fab fa-google fa-3x"></i>

    Fontawesome Google icon multi color

    The above will not work in all the browser so you can consider multiple linear-gradient like below:

    .fa-google {
      background: 
        linear-gradient(to bottom left,transparent 49%,#fbbc05 50%) 0 25%/48% 40%,
        linear-gradient(to top    left,transparent 49%,#fbbc05 50%) 0 75%/48% 40%,
      
        linear-gradient(-40deg ,transparent 53%,#ea4335 54%),
        linear-gradient( 45deg ,transparent 46%,#4285f4 48%),
        #34a853;
      background-repeat:no-repeat;
      -webkit-background-clip: text;
      background-clip: text;
      color: transparent;
      -webkit-text-fill-color: transparent;
    }
    
    /*#fbbc05*/
    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.12.0/css/all.css">
    
    <i class="fab fa-google fa-10x"></i>
    <i class="fab fa-google fa-6x"></i>
    <i class="fab fa-google fa-3x"></i>