Système d'icônes Material Symbols v3

VérifiéSûr

Système d'icônes variables de Material Design 3. Fournit plus de 2 500 icônes avec axes de remplissage, poids, grade et taille optique.

Spar Skills Guide Bot
DeveloppementIntermédiaire
23/07/2026
Claude CodeCursorWindsurfCopilot
#icons#material-symbols#variable-fonts#css#ui-components

Recommandé pour

Synthèse automatique

Fournit le mode d'emploi du système d'icônes Material Symbols v3 à police variable : import CDN ou auto-hébergement, classes de taille, axes FILL/wght/GRAD/opsz et intégration aux jetons de couleur du projet.

Points forts

  • Couvre les quatre axes de la police variable (remplissage, graisse, grade, taille optique) avec des classes utilitaires prêtes à l'emploi
  • Décrit à la fois l'import depuis Google Fonts et une procédure d'auto-hébergement hors ligne en woff2
  • Relie les icônes aux jetons de couleur du projet (couleurs sémantiques, héritage, états) plutôt qu'à des valeurs codées en dur
  • Fournit un barème de tailles cohérent, y compris un dimensionnement fluide via les échelles Utopia

Limites

  • Le fichier fourni s'interrompt au niveau de la section « Interactive Icons » : les parties sur les icônes interactives et les animations sont absentes
  • L'accessibilité des boutons icône seule n'est pas traitée ici, seulement renvoyée à la skill ux-accessibility
  • Les noms d'icônes sont des ligatures textuelles : une faute de frappe affiche le mot en clair au lieu de signaler une erreur
Quand l'utiliser

À utiliser dès qu'il faut ajouter ou styliser des icônes Material Symbols dans une interface (boutons, navigation, indicateurs d'état) avec les bons axes et les bonnes couleurs.

Quand l'éviter

À éviter si le projet n'utilise pas Material Symbols ou si vous cherchez des règles d'accessibilité et d'animation des icônes, qui relèvent d'autres skills.

Analyse de sécurité

Sûr
Score qualité85/100

This is a pure styling reference document for the Material Symbols variable icon font. It contains no shell commands, no credential handling, no obfuscated payloads, and no instructions that weaken safety mechanisms. The only external touchpoints are a public font CDN import and a well-known download URL, which are standard practice for web fonts. Risk is minimal.

Points d'attention
  • •No executable commands; declared tools are limited to Read/Write/Edit/Glob/Grep (no Bash, no network access).
  • •References external assets: a Google Fonts CDN @import and fonts.google.com download link — informational only, browser-side font loading, no data exfiltration.
  • •Writes are limited to documentation-described CSS/HTML snippets under project paths (e.g. css/styles/icons.css); no destructive or overwrite-prone operations.
Comment cette analyse est faite

Exemples

Ajouter une icône à un bouton
Ajoute une icône Material Symbols « save » dans mon bouton d'enregistrement, en taille md et avec la couleur on-primary du thème.
Variantes d'axes
Donne-moi le HTML et le CSS pour afficher l'icône « favorite » en version remplie, poids 600, taille optique 40, et explique l'effet de chaque axe.
Auto-hébergement hors ligne
Remplace l'import Google Fonts de Material Symbols par un @font-face auto-hébergé en woff2 pour un usage hors ligne.

name: material-symbols-v3 description: Material Symbols v3 variable icon font system. Use when adding icons to buttons, navigation, status indicators, or any UI element. Provides 2,500+ icons with fill, weight, grade, and optical size axes. Integrates with project color tokens. allowed-tools: Read, Write, Edit, Glob, Grep

Material Symbols v3

Material Design 3 icon system using variable fonts. This project uses Material Symbols Outlined loaded from Google Fonts CDN.

Related Skills

  • ux-iconography: UX patterns for icon usage, accessibility, and animations
  • ux-accessibility: ARIA requirements for icon-only buttons
  • utopia-fluid-scales: Type scale tokens for fluid icon sizing

Project Setup

Location: css/styles/icons.css

@import url('https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap');

Self-Hosting (Offline)

For offline/production without CDN:

  1. Download from fonts.google.com/icons
  2. Place in /fonts/material-symbols-outlined.woff2
  3. Replace CDN import:
@font-face {
  font-family: 'Material Symbols Outlined';
  src: url('/fonts/material-symbols-outlined.woff2') format('woff2');
  font-weight: 100 700;
  font-style: normal;
}

Basic Usage

<span class="icon">home</span>
<span class="icon">settings</span>
<span class="icon">favorite</span>

Use the icon name from Material Symbols as text content.


Icon Sizes

| Class | Size | Optical Size | Use Case | |-------|------|--------------|----------| | .icon--sm | 20px | 20 | Dense UI, inline text | | .icon--md | 24px | 24 | Default, buttons | | .icon--lg | 40px | 40 | Emphasis, headers | | .icon--xl | 48px | 48 | Hero sections |

<span class="icon icon--sm">info</span>
<span class="icon icon--md">info</span>
<span class="icon icon--lg">info</span>
<span class="icon icon--xl">info</span>

Fluid Sizing with Utopia

For icons that scale with typography:

.icon-fluid {
  font-size: var(--step-1);
  --icon-optical-size: 24;
}

Variable Font Axes

Material Symbols is a variable font with 4 axes:

| Axis | Range | Default | Purpose | |------|-------|---------|---------| | FILL | 0–1 | 0 | Outlined (0) vs filled (1) | | wght | 100–700 | 400 | Stroke weight | | GRAD | -25–200 | 0 | Fine thickness adjustment | | opsz | 20–48 | 24 | Optical size optimization |

Fill Styles

<span class="icon icon--outlined">favorite</span>  <!-- Outline (default) -->
<span class="icon icon--filled">favorite</span>    <!-- Filled -->

Weight Variants

<span class="icon icon--thin">home</span>     <!-- 100 -->
<span class="icon icon--light">home</span>    <!-- 300 -->
<span class="icon icon--regular">home</span>  <!-- 400 (default) -->
<span class="icon icon--medium">home</span>   <!-- 500 -->
<span class="icon icon--bold">home</span>     <!-- 700 -->

Grade Variants

<span class="icon icon--grade-low">home</span>    <!-- -25: thinner on dark bg -->
<span class="icon icon--grade-normal">home</span> <!-- 0 (default) -->
<span class="icon icon--grade-high">home</span>   <!-- 200: bolder emphasis -->

Custom Variation

.custom-icon {
  --icon-fill: 1;
  --icon-weight: 600;
  --icon-grade: 0;
  --icon-optical-size: 24;
}

Icon Colors

Semantic Colors

<span class="icon icon--primary">check_circle</span>
<span class="icon icon--secondary">info</span>
<span class="icon icon--disabled">block</span>

Inherit from Parent

.icon {
  color: inherit;  /* Default behavior */
}

.btn-primary .icon {
  color: var(--theme-on-primary);
}

State Colors

.icon-success { color: var(--color-success); }
.icon-error { color: var(--color-error); }
.icon-warning { color: var(--color-warning); }

Interactive Icons

<span class="icon icon--interactive">settings</span>
.icon--interactive {
  cursor: pointer;
  transition: color 0.2s ease, transform 0.2s ease;
}

.icon--interactive:hover {
  color: var(--icon-color-primary);
  transform: scale(1.1);
}

.icon--interactive:active {
  transform: scale(0.95);
}

Button Patterns

Icon + Text Button

<button class="btn">
  <span class="icon" aria-hidden="true">add</span>
  <span>Add Item</span>
</button>
.btn {
  display: inline-flex;
  align-items: center;
  gap: var(--space-xs);
}

Icon-Only Button

<button class="btn-icon" aria-label="Settings">
  <span class="icon" aria-hidden="true">settings</span>
</button>
.btn-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: var(--min-touch-target);
  min-height: var(--min-touch-target);
  padding: var(--space-xs);
}

Trailing Icon

<button class="btn">
  <span>Next</span>
  <span class="icon" aria-hidden="true">arrow_forward</span>
</button>

Accessibility

Decorative Icons (with visible label)

<button>
  <span class="icon" aria-hidden="true">save</span>
  Save
</button>

Meaningful Icons (icon-only)

<button aria-label="Close dialog">
  <span class="icon" aria-hidden="true">close</span>
</button>

Screen Reader Text

<button class="btn-icon">
  <span class="icon" aria-hidden="true">delete</span>
  <span class="sr-only">Delete item</span>
</button>

High Contrast Mode

@media (forced-colors: active) {
  .icon {
    forced-color-adjust: auto;
  }
}

Common Icons Reference

Navigation

| Icon | Name | Usage | |------|------|-------| | home | home | Home/main | | menu | menu | Hamburger menu | | arrow_back | arrow_back | Back navigation | | arrow_forward | arrow_forward | Forward/next | | close | close | Close/dismiss |

Actions

| Icon | Name | Usage | |------|------|-------| | add | add | Create new | | edit | edit | Edit/modify | | delete | delete | Remove | | save | save | Save | | search | search | Search |

Status

| Icon | Name | Usage | |------|------|-------| | check_circle | check_circle | Success/complete | | error | error | Error state | | warning | warning | Warning | | info | info | Information | | help | help | Help |

Media

| Icon | Name | Usage | |------|------|-------| | play_arrow | play_arrow | Play | | pause | pause | Pause | | volume_up | volume_up | Sound on | | volume_off | volume_off | Sound off |

Settings

| Icon | Name | Usage | |------|------|-------| | settings | settings | Settings | | tune | tune | Adjustments | | brightness_6 | brightness_6 | Theme toggle | | lock | lock | Locked/secure |

Browse all icons: fonts.google.com/icons


Animation

With Anime.js

import { animate } from 'animejs';

// Wiggle
animate(iconEl, {
  rotate: [0, -10, 10, -10, 10, 0],
  duration: 300,
  ease: 'easeOutQuad'
});

// Bounce
animate(iconEl, {
  scale: [1, 1.2, 1],
  duration: 200,
  ease: 'easeOutBack'
});

CSS Transitions

.icon {
  transition: transform 0.15s ease;
}

.btn:hover .icon {
  transform: scale(1.1);
}

.btn:active .icon {
  transform: scale(0.95);
}

Web Component Wrapper

class MIcon extends HTMLElement {
  static observedAttributes = ['name', 'size', 'filled'];

  connectedCallback() {
    this.render();
  }

  attributeChangedCallback() {
    this.render();
  }

  render() {
    const name = this.getAttribute('name') || 'help';
    const size = this.getAttribute('size') || 'md';
    const filled = this.hasAttribute('filled');

    this.innerHTML = `<span class="icon icon--${size}${filled ? ' icon--filled' : ''}" aria-hidden="true">${name}</span>`;
  }
}

customElements.define('m-icon', MIcon);

Usage:

<m-icon name="home"></m-icon>
<m-icon name="favorite" filled size="lg"></m-icon>

CSS Custom Properties

:root {
  /* Font */
  --icon-font: 'Material Symbols Outlined';

  /* Sizes */
  --icon-size-sm: 20px;
  --icon-size-md: 24px;
  --icon-size-lg: 40px;
  --icon-size-xl: 48px;

  /* Variable font axes */
  --icon-fill: 0;
  --icon-weight: 400;
  --icon-grade: 0;
  --icon-optical-size: 24;

  /* Colors */
  --icon-color: var(--color-on-surface);
  --icon-color-primary: var(--color-primary);
  --icon-color-secondary: var(--color-on-surface-variant);
  --icon-color-disabled: var(--color-outline);
}

Migration from Emoji

Replace emoji icons with Material Symbols:

| Old (Emoji) | New (Material Symbol) | |-------------|----------------------| | <span aria-hidden="true">📖</span> | <span class="icon" aria-hidden="true">menu_book</span> | | <span aria-hidden="true">⚙️</span> | <span class="icon" aria-hidden="true">settings</span> | | <span aria-hidden="true">🏠</span> | <span class="icon" aria-hidden="true">home</span> | | <span aria-hidden="true">⭐</span> | <span class="icon" aria-hidden="true">star</span> | | <span aria-hidden="true">🔒</span> | <span class="icon" aria-hidden="true">lock</span> | | <span aria-hidden="true">🔊</span> | <span class="icon" aria-hidden="true">volume_up</span> | | <span aria-hidden="true">🔇</span> | <span class="icon" aria-hidden="true">volume_off</span> | | <span aria-hidden="true">✓</span> | <span class="icon" aria-hidden="true">check</span> |


Files

  • css/styles/icons.css - Icon system styles and CSS custom properties

Du fichier au premier essai

Le téléchargement contient exactement le contenu affiché sur cette fiche. Cette copie peut différer de la dernière version du dépôt source.

Consulter la source et ses fichiers annexes

Ce téléchargement contient uniquement SKILL.md. Les scripts, références, modèles et dépendances éventuels ne sont pas inclus. Récupérez les fichiers nécessaires depuis la source en conservant leur arborescence avant de poursuivre.

1. Télécharger le fichier

Télécharger SKILL.md

Depuis la racine d’un projet de test, enregistrez le fichier sous .skill-downloads/material-symbols-v3-icon-font-system-mrx3xxuc/SKILL.md, ou utilisez la commande suivante. Ce dossier sert à examiner la skill avant son installation.

Commande pour macOS/Linux ou WSL : un shell POSIX et curl sont nécessaires. Sous Windows sans WSL, utilisez le bouton de téléchargement et créez le dossier manuellement.

mkdir -p '.skill-downloads/material-symbols-v3-icon-font-system-mrx3xxuc' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/material-symbols-v3-icon-font-system-mrx3xxuc/download' --output '.skill-downloads/material-symbols-v3-icon-font-system-mrx3xxuc/SKILL.md.part' && mv '.skill-downloads/material-symbols-v3-icon-font-system-mrx3xxuc/SKILL.md.part' '.skill-downloads/material-symbols-v3-icon-font-system-mrx3xxuc/SKILL.md'

2. Vérifier les prérequis

Lisez SKILL.md avant de l’utiliser. Si le fichier cite des scripts ou services externes, examinez-les et préparez les accès nécessaires dans votre environnement de test.

Outils déclarés par l’auteur (à vérifier dans votre agent) : Read, Write, Edit, Glob, Grep

Aucune section de prérequis reconnue dans ce fichier. Cela ne signifie pas qu’il est autonome : les bibliothèques, outils et accès peuvent être cités ailleurs dans le contenu ou dans le dépôt source.

Les plateformes de la fiche sont des indications du catalogue. Les chemins ci-dessous suivent la documentation des outils ; ils ne prouvent pas que cette skill y a été exécutée. Aucune version minimale de ces outils n’est attestée pour cette fiche.

3. Charger la skill

Après vérification, copiez le dossier complet dans le projet avec l’une des commandes ci-dessous, puis ouvrez une nouvelle session de l’outil. La commande s’arrête si un dossier du même nom existe déjà : comparez les fichiers avant de le remplacer.

Claude Code
test -f '.skill-downloads/material-symbols-v3-icon-font-system-mrx3xxuc/SKILL.md' && test -s '.skill-downloads/material-symbols-v3-icon-font-system-mrx3xxuc/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/material-symbols-v3' && cp -R '.skill-downloads/material-symbols-v3-icon-font-system-mrx3xxuc' '.claude/skills/material-symbols-v3'

Cursor
test -f '.skill-downloads/material-symbols-v3-icon-font-system-mrx3xxuc/SKILL.md' && test -s '.skill-downloads/material-symbols-v3-icon-font-system-mrx3xxuc/SKILL.md' && mkdir -p '.cursor/skills' && test ! -e '.cursor/skills/material-symbols-v3' && cp -R '.skill-downloads/material-symbols-v3-icon-font-system-mrx3xxuc' '.cursor/skills/material-symbols-v3'

OpenSkills

OpenSkills doit déjà être installé. La procédure locale install/read est contrôlée avec OpenSkills 1.5.0, qui exige Node.js ≥ 20.6.0. Aucun slug du catalogue n’est résolu automatiquement.

Installation officielle d’OpenSkills
openskills install './.skill-downloads/material-symbols-v3-icon-font-system-mrx3xxuc'

openskills read 'material-symbols-v3-icon-font-system-mrx3xxuc'

La lecture doit afficher le contenu du fichier installé et son dossier de base. Elle ne lance ni la skill ni ses dépendances.

Pour un agent qui lit AGENTS.md, synchronisez ensuite l’index. Cette commande modifie AGENTS.md : relisez le diff avant de l’utiliser.

openskills sync

Mode manuel ou autre outil : joignez SKILL.md à une conversation, ou ouvrez-le dans un agent capable de lire les fichiers. Ajoutez les ressources annexes nécessaires. Il n’existe pas de dossier universel reconnu par tous les outils.

4. Faire un premier essai

Utilisez une entrée courte et fictive : un endpoint d’API, un petit document ou un brief d’interface. Dans une nouvelle conversation, joignez le fichier ou donnez son chemin à l’agent, puis adaptez cette demande :

Lis .skill-downloads/material-symbols-v3-icon-font-system-mrx3xxuc/SKILL.md et applique ses instructions à cet exemple : [décrire une entrée de test]. Indique les fichiers, dépendances ou accès qui manquent. Produis le résultat demandé par la skill sans inventer de données ni exécuter de script non examiné.

Résultat attendu : une sortie correspondant aux instructions de la skill, ou une liste précise des prérequis manquants. Une simple confirmation de lecture ne valide pas le premier usage. Si une ressource externe est indisponible, ce parcours reste à tester.

Skills similaires