Material Color Guide

Complete reference to Google's Material Design color palette — all families, the 50-900 scale, and how Material 3 uses color roles.

What Is Material Design Color?

Material Design is Google's design system used across Android, Google products, and millions of third-party apps. Its color palette is a curated set of 19 color families, each with 10 shades from 50 to 900.

The 19 families:

red, pink, purple, deep-purple, indigo, blue, light-blue, cyan, teal, green, light-green, lime, yellow, amber, orange, deep-orange, brown, gray, blue-gray

Material 2 vs Material 3

Material Design has evolved through two major color systems:

Material 2 (2014–2021)

Direct shade-based system: "primary 500" or "accent A200". Simple, predictable, but does not support dynamic theming well.

Material 3 (2021–present)

Role-based system: "primary", "on-primary", "primary-container", "on-primary-container", and so on. Each role has a defined semantic meaning, enabling automatic theming and dynamic color.

Material 3 Color Roles

Material 3 uses 26 color roles organized into 5 categories:

Primary (4 roles)

  • primary: The main brand color — used for FABs, prominent buttons, active states
  • on-primary: Text/icons on primary surfaces
  • primary-container: A lighter/tonal version of primary for containers
  • on-primary-container: Text/icons on primary-container

Secondary and Tertiary (4 roles each)

Similar structure: secondary / on-secondary / secondary-container / on-secondary-container, plus a tertiary equivalent. Secondary is a supporting color; tertiary is an accent.

Error (4 roles)

error / on-error / error-container / on-error-container — used for error states.

Surface (6 roles)

  • surface: The main background color
  • on-surface: Text on surface
  • surface-variant: Secondary surface for cards and panels
  • on-surface-variant: Text on surface-variant
  • surface-container: Container background
  • outline: Borders and dividers

The 50-900 Scale in Material

Material 3 uses tonal palettes with the same 0-100 tonal structure. The traditional Material 2 scale of 50-900 maps roughly as follows:

Shade Material 2 Use Material 3 Equivalent
50Backgroundssurface-container-lowest
100Hover statessurface-container-low
200Bordersoutline-variant
300Disabledoutline
400Inactiveon-surface-variant
500Primaryprimary
600Hoverprimary (darkened)
700Activeprimary (darker)
800Strong texton-primary-container
900Headingson-surface

Using Material Colors

In HTML/CSS

.button-primary {
  background: #1976D2;  /* Material blue 700 */
  color: #FFFFFF;
}

.button-primary:hover {
  background: #1565C0;  /* Material blue 800 */
}

In React with Material UI

import { blue } from '@mui/material/colors';

In Material 3 (Android/Compose)

val colorScheme = lightColorScheme(
  primary = Color(0xFF1976D2),
  onPrimary = Color(0xFFFFFFFF),
  surface = Color(0xFFF8FAFF),
)

Color Family Overview

Cool families

  • Blue: Trust, professional, standard
  • Light-blue: Fresh, modern
  • Cyan: Bright, tech
  • Teal: Calm, natural
  • Indigo: Deep, premium
  • Purple / Deep-purple: Creative, luxury

Warm families

  • Red: Alert, energetic
  • Pink: Playful, friendly
  • Orange / Deep-orange: Warm, action
  • Amber / Yellow: Attention, caution

Natural families

  • Green: Growth, success
  • Light-green / Lime: Fresh, youthful
  • Brown: Earth, grounded

Neutrals

  • Gray: Pure neutral
  • Blue-gray: Cool neutral

Best Practices

Use tonal palettes, not fixed shades

Material 3 encourages generating tonal palettes from a seed color, so the entire UI updates when the brand color changes.

Pair primary with on-primary

Material 3 explicitly pairs each "surface" color with an "on-surface" color to guarantee contrast. Follow this pattern for accessibility.

Respect the role system

Do not use "primary" for backgrounds if the role is for buttons. The semantic system exists so components can be reused and re-themed.

Test contrast

Material 3's defaults are designed for accessibility but you should still verify combinations you actually use.

Common Mistakes

Using Material 2 shades in Material 3

Material 3 expects color roles, not shade numbers. Using "primary-500" in Material 3 code will work syntactically but breaks theming.

Ignoring dark mode

Material 3 has separate color roles for light and dark themes. Do not try to reuse light theme colors in dark mode — use the dark theme roles.

Mixing with other design systems

Material colors paired with Tailwind colors creates inconsistency. Pick one system.

Not testing with dynamic color

Material 3's dynamic color (Android 12+) generates palettes from the user's wallpaper. Test how your UI looks with wallpapers that produce unexpected color schemes.

Related Tools

Frequently Asked Questions

Open Material Color Reference →