Latest icon fonts and CSS for self-hosting material design icons.
npx @tessl/cli install tessl/npm-material-icons@1.13.0Material Icons provides icon fonts and CSS for self-hosting Google's Material Design Icons, offering developers a comprehensive solution for incorporating Material Design iconography into web applications without relying on external CDNs. It includes multiple icon variants (filled, outlined, round, sharp, two-tone) in both font ligature and CSS class formats, with WOFF/WOFF2 font files for cross-browser compatibility and Sass variables for customization.
npm install material-icons@latestCSS import in JavaScript/TypeScript:
import 'material-icons/iconfont/material-icons.css';CSS import in stylesheets:
@import 'material-icons/iconfont/material-icons.css';Sass import:
@import 'material-icons/iconfont/material-icons.scss';TypeScript definitions:
import { MaterialIcon } from 'material-icons';<!-- Icon font ligatures (recommended) -->
<span class="material-icons">pie_chart</span>
<span class="material-icons-outlined">home</span>
<span class="material-icons-round">search</span>
<span class="material-icons-sharp">add</span>
<span class="material-icons-two-tone">settings</span>
<!-- CSS classes alternative -->
<span class="material-icons mi-pie-chart"></span>
<span class="material-icons-outlined mi-home"></span>
<!-- Angular Material integration -->
<mat-icon>pie_chart</mat-icon>
<mat-icon fontSet="material-icons-outlined">home</mat-icon>
<mat-icon fontIcon="mi-pie-chart"></mat-icon>CSS classes for displaying Material Design Icons using font ligatures.
/* Primary icon font classes */
.material-icons {
font-family: "Material Icons";
font-weight: normal;
font-style: normal;
font-size: 24px;
line-height: 1;
letter-spacing: normal;
text-transform: none;
display: inline-block;
white-space: nowrap;
word-wrap: normal;
direction: ltr;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-rendering: optimizeLegibility;
font-feature-settings: "liga";
}
.material-icons-outlined {
font-family: "Material Icons Outlined";
/* Same properties as above */
}
.material-icons-round {
font-family: "Material Icons Round";
/* Same properties as above */
}
.material-icons-sharp {
font-family: "Material Icons Sharp";
/* Same properties as above */
}
.material-icons-two-tone {
font-family: "Material Icons Two Tone";
/* Same properties as above */
}Usage Examples:
<!-- Display icons using font ligatures -->
<span class="material-icons">home</span>
<span class="material-icons">search</span>
<span class="material-icons">favorite</span>
<!-- Different variants -->
<span class="material-icons-outlined">settings</span>
<span class="material-icons-round">add_circle</span>
<span class="material-icons-sharp">delete</span>
<span class="material-icons-two-tone">account_circle</span>Optimized CSS files for specific icon variants to reduce bundle size.
/* Available individual CSS files */
/* iconfont/filled.css - Filled icons only */
/* iconfont/outlined.css - Outlined icons only */
/* iconfont/round.css - Round icons only */
/* iconfont/sharp.css - Sharp icons only */
/* iconfont/two-tone.css - Two-tone icons only */Usage Examples:
// Import only needed variants to reduce bundle size
import 'material-icons/iconfont/filled.css';
import 'material-icons/iconfont/outlined.css';
// Instead of importing the full material-icons.cssAlternative usage method with CSS classes instead of font ligatures, generating 2124 individual CSS classes.
/* CSS class generation pattern */
/* Base pattern: .{$material-icons-css-prefix}-{icon-name-with-replacements} */
/* Default: underscore (_) replaced with dash (-) in icon names */
/* Generated classes for each icon variant */
.mi-123::before { content: "\eeaa"; }
.mi-360::before { content: "\e577"; }
.mi-10k::before { content: "\e951"; }
.mi-pie-chart::before { content: "\e99a"; }
.mi-home::before { content: "\e88a"; }
.mi-search::before { content: "\e8b6"; }
.mi-account-circle::before { content: "\e853"; }
/* ... 2118+ more icon classes following same pattern */
/* Classes work with all font variants */
.material-icons .mi-{icon-name}::before { /* content for filled variant */ }
.material-icons-outlined .mi-{icon-name}::before { /* content for outlined variant */ }
.material-icons-round .mi-{icon-name}::before { /* content for round variant */ }
.material-icons-sharp .mi-{icon-name}::before { /* content for sharp variant */ }
.material-icons-two-tone .mi-{icon-name}::before { /* content for two-tone variant */ }Usage Examples:
<!-- Using CSS classes with different variants -->
<span class="material-icons mi-pie-chart"></span>
<span class="material-icons-outlined mi-home"></span>
<span class="material-icons-round mi-search"></span>
<span class="material-icons-sharp mi-account-circle"></span>
<span class="material-icons-two-tone mi-settings"></span>
<!-- Icons with underscores become dashes in CSS classes -->
<span class="material-icons mi-18-up-rating"></span> <!-- icon: 18_up_rating -->
<span class="material-icons mi-account-circle"></span> <!-- icon: account_circle -->// Import CSS class styles (large file - 2124 classes)
import 'material-icons/css/material-icons.css';
// Or import minified version
import 'material-icons/css/material-icons.min.css';Customizable Sass variables for font configuration.
/* iconfont Sass variables */
$material-icons-font-path: './' !default;
$material-icons-font-size: 24px !default;
$material-icons-font-display: block !default;
/* css Sass variables */
$material-icons-css-prefix: 'mi' !default;
$material-icons-css-search: '_' !default;
$material-icons-css-replace: '-' !default;Usage Examples:
// Customize before importing
$material-icons-font-path: '~material-icons/iconfont/';
$material-icons-font-size: 18px;
@import 'material-icons/iconfont/material-icons.scss';
// Or for CSS classes approach
$material-icons-css-prefix: 'icon';
@import 'material-icons/css/material-icons.scss';Advanced Sass utilities for custom icon font implementation and CSS class generation.
/**
* Creates a font-face declaration and CSS class for a Material Icon font variant
* @param font-family - Font family name (e.g., 'Material Icons', 'Material Icons Outlined')
*/
@mixin material-icons-font($font-family);
/**
* Applies base styling properties for Material Icon font classes
* @param font-family - Font family name to apply
*/
@mixin material-icons-font-class($font-family);
/**
* Generates CSS content for a specific icon using its codepoint
* @param name - Icon name (e.g., 'home', 'search')
* @param pseudo - Pseudo-element to target ('before' or 'after'), defaults to 'before'
*/
@mixin material-icon($name, $pseudo: 'before');
/**
* String replacement utility function
* @param string - Input string to process
* @param search - String to search for
* @param replace - Replacement string, defaults to empty string
* @returns Modified string with replacements
*/
@function material-icons-str-replace($string, $search, $replace: '');
/**
* Converts icon codepoint to CSS content value
* @param codepoint - Unicode codepoint (e.g., 'e88a')
* @returns Quoted CSS content string
*/
@function material-icons-content($codepoint);
/**
* @deprecated As of v1.0, use '@extend .material-icons;' instead
* Legacy mixin for Material Icons base styling
*/
@mixin material-icons();Usage Examples:
// Create custom font variant
@include material-icons-font('Material Icons Custom');
// Apply base styling to custom class
.my-icon {
@include material-icons-font-class('Material Icons');
}
// Create custom icon class with specific codepoint
.my-custom-home {
@include material-icon('home');
}
// Use with ::after pseudo-element
.my-icon-after {
@include material-icon('search', 'after');
}
// String manipulation
$cleaned-name: material-icons-str-replace('my_icon_name', '_', '-');
// Result: 'my-icon-name'Type definitions for icon names providing type safety.
/**
* Readonly tuple array containing all 2124 valid Material Design icon names
*/
type MaterialIcons = readonly [
"123",
"360",
"10k",
"10mp",
"11mp",
"12mp",
// ... (includes all 2124 icon names)
"zoom_in",
"zoom_in_map",
"zoom_out",
"zoom_out_map"
];
/**
* Union type of all valid Material Design icon names
* Derived from MaterialIcons[number] for type safety
*/
type MaterialIcon = MaterialIcons[number];
export { MaterialIcon };Usage Examples:
import { MaterialIcon } from 'material-icons';
// Type-safe icon name usage
const iconName: MaterialIcon = 'home'; // ✓ Valid
const badIcon: MaterialIcon = 'invalid'; // ✗ TypeScript error
// In React components
interface IconProps {
name: MaterialIcon;
}
function Icon({ name }: IconProps) {
return <span className="material-icons">{name}</span>;
}Specialized usage patterns for Angular Material's mat-icon component.
<!-- mat-icon with ligatures -->
<mat-icon>icon_name</mat-icon>
<mat-icon fontSet="material-icons-outlined">icon_name</mat-icon>
<mat-icon fontSet="material-icons-round">icon_name</mat-icon>
<mat-icon fontSet="material-icons-sharp">icon_name</mat-icon>
<mat-icon fontSet="material-icons-two-tone">icon_name</mat-icon>
<!-- mat-icon with CSS classes -->
<mat-icon fontIcon="mi-icon-name"></mat-icon>
<mat-icon fontSet="material-icons-outlined" fontIcon="mi-icon-name"></mat-icon>Usage Examples:
<!-- Standard Angular Material usage -->
<mat-icon>home</mat-icon>
<mat-icon>search</mat-icon>
<mat-icon>settings</mat-icon>
<!-- With different variants -->
<mat-icon fontSet="material-icons-outlined">favorite</mat-icon>
<mat-icon fontSet="material-icons-round">add_circle</mat-icon>
<!-- With CSS classes -->
<mat-icon fontIcon="mi-pie-chart"></mat-icon>The package includes 2124 Material Design icons covering all standard categories:
Icon names use snake_case format for ligatures (e.g., pie_chart, account_circle) and kebab-case for CSS classes (e.g., mi-pie-chart, mi-account-circle).
/**
* Readonly tuple array containing all 2124 valid Material Design icon names
*/
type MaterialIcons = readonly [
"123",
"360",
"10k",
"10mp",
"11mp",
"12mp",
"13mp",
"14mp",
"15mp",
"16mp",
"17mp",
"18_up_rating",
"18mp",
"19mp",
"1k",
"1k_plus",
"1x_mobiledata",
// ... (includes all 2124 icon names)
"zoom_in",
"zoom_in_map",
"zoom_out",
"zoom_out_map"
];
/**
* Union type of all valid Material Design icon names
* Derived from MaterialIcons[number] for type safety
*/
type MaterialIcon = MaterialIcons[number];
export { MaterialIcon };