12

I'm currently confused in using the icon in CSS pseudo-elements. There are 4 kind of font-family for fontawesome : Font Awesome 5 Free, Font Awesome 5 Solid, Font Awesome 5 Brands, Font Awesome 5 Regular

Here is the HTML :

<h1>Hello</h1>

Case 1

I use this icon : https://fontawesome.com/icons/twitter?style=brands

As you can see, its a brands icon, so font-family : Font Awesome 5 Brands

h1:before {
  display: inline-block;
  font-style: normal;
  font-variant: normal;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  content: "\f099"; /* TWITTER ICON */
  font-family: "Font Awesome 5 Brands";
  font-weight: 400;
}

IT WORKS!

Case 2

I use this icon : https://fontawesome.com/icons/phone?style=solid

As you can see, its a solid icon, so font-family : Font Awesome 5 Solid

h1:before {
  display: inline-block;
  font-style: normal;
  font-variant: normal;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  content: "\f095"; /* PHONE ICON */
  font-family: "Font Awesome 5 Solid";
  font-weight: 900;
}

DOESN'T WORK!

What did i do wrong?

How do we know when to use the correct font-family?

Temani Afif
  • 245,468
  • 26
  • 309
  • 415
Marcel Angir
  • 169
  • 1
  • 1
  • 11
  • When in doubt, look at the fontawesome.css file for the `fa-phone` css class that came with your download. – caesay Jun 04 '18 at 12:05

1 Answers1

17

Simply use all of them in the same font-family and the browser will do the job. If it doesn't find it in the first one, it will use the second one. (Multiple fonts in Font-Family property?)

By the way, the correct font-family is Free not Solid because the difference between Solid and Regular is the font-weight and both have the same font-family. There is no Solid and Regular in font-family, only Free and Brands.

You may also notice that almost all the Solid version of the icons are free BUT not all the regular version are free. Some of them are included in the PRO package. If an icon is not showing it's not necessarely a font-family issue.

All the Light and duotone version are PRO ones.

.icon {
  display: inline-block;
  font-style: normal;
  font-variant: normal;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  font-family: "Font Awesome 5 Brands","Font Awesome 5 Free";
}

.icon1:before {
  content: "\f099";
  /* TWITTER ICON */
  font-weight: 400;
}

.icon2:before {
  content: "\f095";
  /* PHONE ICON */
  font-weight: 900;
}

.icon3:before {
  content: "\f095";
  /* PHONE ICON */
  font-weight: 400;/*This one will not work because the regular version of the phone icon is in the Pro Package*/
}
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.11.0/css/all.css" >

<div class="icon1 icon"></div>
<div class="icon2 icon"></div>
<br>

<div class="icon3 icon"></div>

enter image description here

Reference: https://fontawesome.com/how-to-use/on-the-web/advanced/css-pseudo-elements#define


Related question dealing with the font-weight issue: Font Awesome 5 on pseudo elements shows square instead of icon

Temani Afif
  • 245,468
  • 26
  • 309
  • 415
  • you right.. especially in version 5 that `font-weight` is neccary so I think usink "Free" it is enough – לבני מלכה Jun 04 '18 at 12:22
  • 1
    @לבנימלכה it's not enough but mandatory ;) there is no `regular` or `solid` font-family ... there is only `Free` and `Brand`. – Temani Afif Jun 04 '18 at 12:24
  • This only seems to work if you're loading via the Web Fonts & CSS method (`link` tag) as opposed to the SVG & JS framework (`script` tag). – Todd Aug 24 '18 at 03:43
  • 1
    @Todd with the JS version it will also work but you need to do more manipulation. Here is an example : https://stackoverflow.com/questions/48753688/fontawesome-replacement-on-li-tag-shows-empty-square/48753896#48753896 – Temani Afif Aug 24 '18 at 07:55
  • thank you you just saved me :) btw, fontawesome 5 team should know it – Jamaluddin Rumi Sep 29 '20 at 12:46