skills/material-design-3-icons/SKILL.md
Applies Material Design 3 icon guidelines using Material Symbols — Google's variable font icon system. Use this when working with icons, Material Symbols, icon sizing, icon accessibility, or when the user asks to apply Material Design 3 icon guidelines.
npx skillsauth add shelbeely/shelbeely-agent-skills material-design-3-iconsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill guides the implementation of Material Design 3 (M3) icons using Material Symbols — Google's variable font icon system that provides 2,500+ icons with dynamic customization through font variation axes.
Keywords: Material Design 3, M3, icons, Material Symbols, variable font icons, icon guidelines, icon accessibility, icon sizing, filled icons, outlined icons
M3 icons are designed to:
Material Symbols are available in three styles, each with its own visual character:
| Style | Character | Use | |-------|-----------|-----| | Outlined | Clean, lightweight | Default for most interfaces | | Rounded | Soft, friendly | Approachable, casual contexts | | Sharp | Precise, geometric | Technical, professional contexts |
Material Symbols use four variable font axes for dynamic customization:
| Axis | Property | Range | Default | Effect | |------|----------|-------|---------|--------| | FILL | Fill | 0–1 | 0 | Outline (0) to filled (1) | | wght | Weight | 100–700 | 400 | Stroke thickness | | GRAD | Grade | -25–200 | 0 | Fine weight without size change | | opsz | Optical Size | 20–48 | 24 | Stroke optimization for size |
<!-- Via Google Fonts (recommended) -->
<link rel="stylesheet"
href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,[email protected],100..700,0..1,-50..200" />
<!-- Or Rounded -->
<link rel="stylesheet"
href="https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL,[email protected],100..700,0..1,-50..200" />
<!-- Or Sharp -->
<link rel="stylesheet"
href="https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL,[email protected],100..700,0..1,-50..200" />
<span class="material-symbols-outlined">home</span>
<span class="material-symbols-outlined">search</span>
<span class="material-symbols-outlined">settings</span>
/* Base icon styles */
.material-symbols-outlined {
font-family: 'Material Symbols Outlined';
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';
}
/* Default icon (outlined, regular weight) */
.icon-default {
font-variation-settings:
'FILL' 0,
'wght' 400,
'GRAD' 0,
'opsz' 24;
}
/* Filled icon */
.icon-filled {
font-variation-settings:
'FILL' 1,
'wght' 400,
'GRAD' 0,
'opsz' 24;
}
/* Bold icon */
.icon-bold {
font-variation-settings:
'FILL' 0,
'wght' 700,
'GRAD' 0,
'opsz' 24;
}
/* Light icon */
.icon-light {
font-variation-settings:
'FILL' 0,
'wght' 200,
'GRAD' 0,
'opsz' 24;
}
/* Small icon (optimized for 20dp) */
.icon-small {
font-size: 20px;
font-variation-settings:
'FILL' 0,
'wght' 400,
'GRAD' 0,
'opsz' 20;
}
/* Large icon (optimized for 48dp) */
.icon-large {
font-size: 48px;
font-variation-settings:
'FILL' 0,
'wght' 400,
'GRAD' 0,
'opsz' 48;
}
M3 defines standard icon sizes that pair with the optical size axis:
| Size | Use | Optical Size (opsz) | |------|-----|---------------------| | 20dp | Dense layouts, small controls | 20 | | 24dp | Default, most components | 24 | | 40dp | Large buttons, featured actions | 40 | | 48dp | Hero icons, empty states | 48 |
/* Icon in a button */
.md3-button .material-symbols-outlined {
font-size: 18px;
font-variation-settings: 'opsz' 20;
}
/* Icon in navigation */
.md3-nav-item .material-symbols-outlined {
font-size: 24px;
font-variation-settings: 'opsz' 24;
}
/* Icon in FAB */
.md3-fab .material-symbols-outlined {
font-size: 24px;
font-variation-settings: 'opsz' 24;
}
/* Icon in large FAB */
.md3-fab-large .material-symbols-outlined {
font-size: 36px;
font-variation-settings: 'opsz' 40;
}
Icons use M3 color tokens and inherit color from their parent:
/* Default icon color */
.icon-default {
color: var(--md-sys-color-on-surface);
}
/* Icon on primary background */
.icon-on-primary {
color: var(--md-sys-color-on-primary);
}
/* Icon as interactive element */
.icon-interactive {
color: var(--md-sys-color-on-surface-variant);
}
.icon-interactive:hover {
color: var(--md-sys-color-on-surface);
}
/* Active/selected icon */
.icon-active {
color: var(--md-sys-color-primary);
font-variation-settings: 'FILL' 1;
}
/* Disabled icon */
.icon-disabled {
color: var(--md-sys-color-on-surface);
opacity: 0.38;
}
/* Error icon */
.icon-error {
color: var(--md-sys-color-error);
}
Use fill to indicate selection state — transitioning from outline to filled:
/* Toggle fill on selection */
.icon-toggle {
font-variation-settings: 'FILL' 0;
transition: font-variation-settings 200ms var(--md-sys-motion-easing-standard);
}
.icon-toggle[aria-selected="true"],
.icon-toggle.selected {
font-variation-settings: 'FILL' 1;
}
| Component | Unselected | Selected | |-----------|-----------|----------| | Navigation icon | FILL 0 | FILL 1 | | Favorite/like | FILL 0 | FILL 1, color: error | | Checkbox icon | FILL 0 | FILL 1, color: primary | | Bookmark | FILL 0 | FILL 1 | | Tab icon | FILL 0 | FILL 1, color: primary |
Grade adjusts weight without changing icon size — useful for emphasis without layout shift:
/* Low emphasis icon */
.icon-low-emphasis {
font-variation-settings: 'GRAD' -25;
}
/* High emphasis icon (dark text on light bg) */
.icon-high-emphasis {
font-variation-settings: 'GRAD' 200;
}
/* Adjust grade for dark mode */
[data-theme="dark"] .material-symbols-outlined {
font-variation-settings: 'GRAD' -25;
}
aria-hidden="true" when icons accompany textaria-label or title when icons are used alone<button> with accessible name<!-- Decorative icon (with text label) -->
<button>
<span class="material-symbols-outlined" aria-hidden="true">delete</span>
Delete
</button>
<!-- Standalone icon button (needs label) -->
<button aria-label="Delete item">
<span class="material-symbols-outlined" aria-hidden="true">delete</span>
</button>
<!-- Informational icon (supplementary) -->
<span class="material-symbols-outlined" aria-hidden="true">info</span>
<span>More details available</span>
.md3-icon-button {
width: 48px;
height: 48px;
display: inline-flex;
align-items: center;
justify-content: center;
border-radius: var(--md-sys-shape-corner-full);
border: none;
background: transparent;
cursor: pointer;
position: relative;
}
/* The icon itself can be smaller than the touch target */
.md3-icon-button .material-symbols-outlined {
font-size: 24px;
}
aria-hidden="true" for decorative icons that accompany texttransform: scale() — use font-size and opsz insteadWhen implementing M3 icons, ensure:
tools
Guide for creating effective skills. This skill should be used when users want to create a new skill (or update an existing skill) that extends Claude's capabilities with specialized knowledge, workflows, or tool integrations.
development
Generate Material Design 3 color themes programmatically from a source color using @material/material-color-utilities, the same engine that powers the Material Theme Builder. Use this when the user asks to generate an M3 color palette, create a custom theme from a brand color, or export M3 tokens to CSS, JSON, or framework configs.
testing
Applies Material Design 3 Expressive typography principles including variable fonts, type scales, and hierarchy. Use this when working on text styling, type hierarchy, readable interfaces, or when the user asks to apply Material Design 3 typography guidelines.
testing
Applies Material Design 3 Expressive shape and containment principles including rounded corners, morphing shapes, and container design. Use this when working on component shapes, borders, containment, or when the user asks to apply Material Design 3 shape guidelines.