The iconic font, CSS, and SVG framework providing scalable vector icons, web fonts, and CSS styling for web and desktop applications
—
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
Font Awesome provides comprehensive SCSS source files for customization, theming, and build-time optimization. The SCSS files offer variables, mixins, and modular imports for fine-grained control over Font Awesome's appearance and functionality.
// Complete Font Awesome
@import '~@fortawesome/fontawesome-free/scss/fontawesome';
@import '~@fortawesome/fontawesome-free/scss/solid';
@import '~@fortawesome/fontawesome-free/scss/regular';
@import '~@fortawesome/fontawesome-free/scss/brands';scss/fontawesome.scss: Core Font Awesome frameworkscss/solid.scss: Solid icon style definitionsscss/regular.scss: Regular icon style definitionsscss/brands.scss: Brand icon style definitionsscss/_variables.scss: SCSS variables and icon definitions (152KB)scss/_mixins.scss: SCSS mixins and utility functionsscss/_functions.scss: SCSS utility functionsscss/_core.scss: Core Font Awesome stylingscss/_icons.scss: Icon-specific SCSS rules// Font paths and display
$fa-font-path: '../webfonts' !default;
$fa-font-display: block !default;
// CSS class configuration
$fa-css-prefix: 'fa' !default;
$fa-version: '7.0.1' !default;
$fa-border-color: #eee !default;
$fa-inverse: #fff !default;
$fa-li-width: 2em !default;Customization example:
// Custom font path
$fa-font-path: '/assets/fonts';
// Custom CSS prefix
$fa-css-prefix: 'icon';
// Custom border color
$fa-border-color: #ccc;
@import '~@fortawesome/fontawesome-free/scss/fontawesome';// Animation durations
$fa-animation-duration: 1s !default;
$fa-spin-animation-duration: 2s !default;
// Animation timing functions
$fa-animation-timing: linear !default;// Base sizing
$fa-size-scale-base: 1em !default;
// Named sizes
$fa-2xs: 0.625em !default;
$fa-xs: 0.75em !default;
$fa-sm: 0.875em !default;
$fa-lg: 1.25em !default;
$fa-xl: 1.5em !default;
$fa-2xl: 2em !default;@mixin fa-icon($icon: null, $style: solid) {
// Apply Font Awesome icon styles
}Usage:
.custom-icon {
@include fa-icon('user', solid);
}@mixin fa-size($size) {
font-size: $size;
}Usage:
.large-icon {
@include fa-size(2em);
}@mixin fa-content($icon-unicode) {
content: $icon-unicode;
}Usage:
.my-icon::before {
@include fa-content('\f007'); // user icon unicode
font-family: 'Font Awesome 7 Free';
font-weight: 900;
}Font Awesome provides SCSS variables for all icon Unicode values:
// Solid icons
$fa-var-user: \f007;
$fa-var-home: \f015;
$fa-var-heart: \f004;
$fa-var-search: \f002;
$fa-var-envelope: \f0e0;
$fa-var-phone: \f095;
$fa-var-calendar: \f133;
$fa-var-download: \f019;
// Regular icons (far-)
$fa-var-user: \f007; // Regular user
$fa-var-heart: \f004; // Regular heart
$fa-var-file: \f15b; // Regular file
$fa-var-folder: \f07b; // Regular folder
// Brand icons (fab-)
$fa-var-github: \f09b;
$fa-var-twitter: \f099;
$fa-var-facebook: \f09a;
$fa-var-linkedin: \f08c;Usage:
.github-icon::before {
content: $fa-var-github;
font-family: 'Font Awesome 7 Brands';
font-weight: 400;
}@mixin fa-spin($duration: $fa-spin-animation-duration) {
animation: fa-spin $duration infinite linear;
}
@mixin fa-pulse($duration: $fa-animation-duration) {
animation: fa-pulse $duration infinite;
}Usage:
.spinning-loader {
@include fa-spin(1s);
}
.pulsing-heart {
@include fa-pulse(0.5s);
}@mixin fa-rotate($degrees) {
transform: rotate(#{$degrees}deg);
}
@mixin fa-flip($axis: horizontal) {
@if $axis == horizontal {
transform: scaleX(-1);
} @else if $axis == vertical {
transform: scaleY(-1);
} @else if $axis == both {
transform: scale(-1);
}
}Usage:
.rotated-icon {
@include fa-rotate(45);
}
.flipped-icon {
@include fa-flip(horizontal);
}// Override default colors
$fa-primary-color: #007bff !default;
$fa-secondary-color: #6c757d !default;
$fa-success-color: #28a745 !default;
$fa-danger-color: #dc3545 !default;
$fa-warning-color: #ffc107 !default;
$fa-info-color: #17a2b8 !default;Custom theme example:
// Dark theme variables
$fa-primary-color: #0d6efd;
$fa-border-color: #333;
$fa-inverse: #000;
// Custom icon colors
.fa-primary { color: $fa-primary-color; }
.fa-success { color: $fa-success-color; }
.fa-danger { color: $fa-danger-color; }
@import '~@fortawesome/fontawesome-free/scss/fontawesome';// Custom size scale
$fa-size-scale-base: 1.2em;
// Custom named sizes
$fa-xs: 0.8em;
$fa-sm: 1em;
$fa-lg: 1.5em;
$fa-xl: 2em;
$fa-2xl: 2.5em;
// Generate custom size classes
@each $size, $value in (
'tiny': 0.5em,
'huge': 4em,
'massive': 6em
) {
.fa-#{$size} {
font-size: $value;
}
}// Import only core framework (no icons)
@import '~@fortawesome/fontawesome-free/scss/fontawesome';// Import core + solid icons only
@import '~@fortawesome/fontawesome-free/scss/fontawesome';
@import '~@fortawesome/fontawesome-free/scss/solid';// Import core framework
@import '~@fortawesome/fontawesome-free/scss/_variables';
@import '~@fortawesome/fontawesome-free/scss/_mixins';
@import '~@fortawesome/fontawesome-free/scss/_core';
// Define only needed icons
.fa-user::before { content: $fa-var-user; }
.fa-home::before { content: $fa-var-home; }
.fa-heart::before { content: $fa-var-heart; }@function fa-content($icon-name) {
@return map-get($fa-icons, $icon-name);
}Usage:
.custom-icon::before {
content: fa-content('user');
font-family: 'Font Awesome 7 Free';
}@function strip-unit($number) {
@if type-of($number) == 'number' and not unitless($number) {
@return $number / ($number * 0 + 1);
}
@return $number;
}
@function fa-divide($dividend, $divisor) {
@return $dividend / $divisor;
}// Only import needed partials
@import '~@fortawesome/fontawesome-free/scss/_variables';
@import '~@fortawesome/fontawesome-free/scss/_mixins';
@import '~@fortawesome/fontawesome-free/scss/_core';
// Custom icon definitions (smaller subset)
.fa-user::before { content: $fa-var-user; }
.fa-home::before { content: $fa-var-home; }
// ... only icons you need// Custom font-face definitions
@font-face {
font-family: 'My Custom FA';
src: url('custom-subset.woff2') format('woff2');
font-weight: 900;
font-display: swap; // Better performance
}
// Override font family
$fa-font-family: 'My Custom FA';// Generate CSS custom properties
:root {
--fa-primary: #{$fa-primary-color};
--fa-border: #{$fa-border-color};
--fa-inverse: #{$fa-inverse};
}
// Use in styles
.fa-primary { color: var(--fa-primary); }
.fa-border { border-color: var(--fa-border); }// Responsive sizing mixins
@mixin fa-responsive-size($base-size: 1em) {
font-size: $base-size;
@media (min-width: 768px) {
font-size: $base-size * 1.2;
}
@media (min-width: 1024px) {
font-size: $base-size * 1.5;
}
}
// Usage
.responsive-icon {
@include fa-responsive-size(1em);
}// Custom bounce animation
@keyframes fa-bounce {
0%, 20%, 53%, 80%, 100% {
animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
transform: translate3d(0,0,0);
}
40%, 43% {
animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
transform: translate3d(0, -8px, 0);
}
70% {
animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
transform: translate3d(0, -4px, 0);
}
90% {
transform: translate3d(0,-1px,0);
}
}
.fa-bounce {
animation: fa-bounce 1s;
}