Skip to content
Design Academy My progress

Stage 1 · Lesson 5 of 10

Colour theory, palettes, contrast and semantic colour

Building a functional palette with roles, states and accessible contrast.

  • Beginner
  • 40 min
  • 6:58 video
  • 4 check questions
  • Exercise: 45 min
0:00 6:58

WatchSarah Renae Clark6:58

COLOR THEORY BASICS: Use the Color Wheel & Color Harmonies to Choose Colors that Work Well Together

The colour wheel, harmonies and how to build a palette that holds together. Watch it before choosing colours for the exercise: it is much easier to fix a bad palette than to design around one.

By the end of this lesson you can

  • Describe colour with hue, saturation and lightness, and explain why lightness matters most for interfaces.
  • Build a functional palette with neutrals, a primary colour and semantic colours, each in several shades.
  • Assign colours to roles (text, surface, action, success, warning, error) rather than to individual screens.
  • Check contrast and avoid relying on colour alone.

The idea

Colour in interfaces has three jobs: communicate brand, create hierarchy and signal meaning. It is the most emotional design tool and also the easiest to misuse.

Hue, saturation and lightness

Hue is the colour family (red, blue, green). Saturation is how intense it is. Lightness is how close it is to white or black. For readability and contrast, lightness matters far more than hue: dark blue text on white is readable, light yellow is not, whatever the brand says.

A functional palette

A practical interface palette has three parts:

  • Neutrals: greys (often slightly warm or cool) for text, borders, backgrounds and surfaces. Most of an interface is neutral.
  • Primary (brand) colour: used sparingly for primary actions, links, selection and focus. Its power comes from scarcity.
  • Semantic colours: green for success, amber for warning, red for errors or destructive actions, blue for information. Their meanings must stay consistent.

Each colour needs a range of shades, usually from very light (backgrounds) to very dark (text on light backgrounds). Many systems use numbered steps such as 50 to 900.

Roles, not colours

Instead of saying "this button is #1E40AF", say "this is the primary action colour", which happens to be a particular blue. Naming colours by role (text primary, text secondary, surface, border, action primary, danger) keeps usage consistent and makes changes, including dark themes, much easier. These role names become semantic design tokens later.

Contrast and colour independence

WCAG asks for at least 4.5:1 contrast for normal text, 3:1 for large text, and 3:1 for meaningful non-text elements such as icons, input borders and focus indicators. Separately, never use colour as the only way to communicate meaning. About 1 in 12 men and 1 in 200 women have some form of colour vision deficiency, and everyone struggles with colour in bright sunlight. Pair colour with text, icons or patterns.

A rule of thumb for proportion

A common starting heuristic is roughly 60% neutral background, 30% secondary surfaces and text, and 10% accent. It is not a law, but it reminds you that accents work because they are rare.

Why it matters in real projects

Colour mistakes are among the most common accessibility failures on the web, and they directly affect whether people can read text and understand states. Inconsistent semantic colours cause real errors: if red sometimes means "error" and sometimes "sale", people misread both. A role-based palette also makes products cheaper to maintain, because a brand refresh or a dark theme changes a handful of tokens instead of hundreds of screens.

A realistic example

A banking app uses its brand red for the logo, for "Transfer" buttons, for negative balances and for error messages. Customers hesitate before transferring money because the button looks like a warning, and some miss genuine errors because red is everywhere.

The team keeps red in the logo but introduces a dark blue for primary actions, reserves red strictly for errors and destructive actions, and shows negative balances with a minus sign and the word "overdrawn" in dark text, with red only as a supporting cue. Hesitation on the transfer screen drops in testing, and error messages become noticeable again.

Colours named by role. Text and action colours meet AA contrast on white. Pale tints are used only as backgrounds for dark text.

Step by step

  1. Start with neutrals

    Choose a text colour, a secondary text colour, a border colour, a page background and a surface colour. Check both text colours on both backgrounds.

  2. Choose one primary colour

    Pick a shade dark enough to carry white text and to work as link text on white (4.5:1 or more).

  3. Add semantic colours

    Choose success, warning, error and information colours, each with a dark shade for text and icons and a pale shade for backgrounds.

  4. Name every colour by role

    Write a table: role, colour value, where it is used, contrast result.

  5. Check states

    Hover, focus, pressed and disabled states each need colours. Focus indicators need 3:1 contrast with what is around them.

  6. Test without colour

    View your screens in greyscale. Every state and message should still be understandable.

Common mistakes

  • Mistake Using the brand colour for everything.

    Instead Reserve it for primary actions and key highlights so it keeps its power.

  • Mistake Communicating status only by colour (green dot, red dot).

    Instead Add a text label or a distinct icon.

  • Mistake Picking pale, trendy colours for text or buttons.

    Instead Measure contrast. Use pale tints for backgrounds, dark shades for text.

  • Mistake Using red for both errors and promotions.

    Instead Keep semantic colours exclusive to their meanings.

Check your understanding

Choose an answer, then check it. There is an explanation either way.

Question 1 of 4Which colour property matters most for text readability?
Show answer

Lightness, which determines contrast. Contrast depends mainly on the difference in lightness between text and background.

Question 2 of 4What is the minimum WCAG AA contrast for normal-sized body text?
Show answer

4.5:1. 4.5:1 is the AA requirement for normal text; 3:1 applies to large text and meaningful non-text elements.

Question 3 of 4An order status is shown only as a green or red dot. What is the best fix?
Show answer

Add a text label or a distinct icon for each status. Colour should support meaning, not carry it alone.

Question 4 of 4Why name colours by role, such as "action primary"?
Show answer

It keeps usage consistent and makes changes such as dark themes easier. Role-based names separate the decision from the value, so values can change safely.

Practice exercise

Exercise · about 45 min

Build a role-based palette

Create a palette for a library's book reservation app. Use the walkthrough.

Steps

  1. Define neutrals for text, borders and surfaces.
  2. Choose a primary colour and semantic colours with light and dark shades.
  3. Create a role table with contrast results.
  4. Design one screen (a reservation list with available, waiting and overdue items) using only your palette.
  5. Check the screen in greyscale and fix anything that depends on colour.

Deliverable

A palette sheet with role names and contrast values, and one screen in colour and greyscale.

Self-assessment

Tick each item when it is true of your exercise. Be honest; this is for you.

5 items

Summary

  • Lightness, not hue, decides readability.
  • A functional palette has neutrals, one primary colour and semantic colours, each in several shades.
  • Name colours by role, not by value.
  • Meet contrast requirements and never rely on colour alone.

Further reading

Third-party sources, chosen for reliability. They open in a new tab.

Your notes

Marking complete updates your course and roadmap progress.

Back to Visual design fundamentals Roadmap