Similar to saturation — how far a colour is from neutral grey — but measured in a way that stays consistent across different lightness levels.
In perceptually uniform spaces such as LCH/OKLCH, chroma measures colourfulness relative to a reference white, avoiding some of the lightness-dependent distortion that HSL saturation shows near white or black.
Chroma and saturation are often used interchangeably in casual writing; the technical distinction only really matters when comparing colours across very different lightness levels.
Colourwise's own hue-family and neutral classification uses HSV saturation for simplicity, but its LCH/OKLCH values (shown on every colour profile) report chroma directly.
Chroma is why a pale yellow and a deep red can be described as 'equally colourful' even though their HSL saturation numbers look very different.
The CIE defines chroma as the colourfulness of an area judged as a proportion of the brightness of a similarly lit white. It is calculated as distance from the neutral axis of a colour space: C*ab = √(a*² + b*²) in CIELAB, and the same construction on OKLab's a and b for OKLCH. It is an open-ended scale with no percentage, and Munsell chroma is open-ended in the same way.
| Colour | HSV saturation | CIELAB chroma | OKLCH chroma |
|---|---|---|---|
| Yellow #ffff00 | 100% | 96.9 | 0.211 |
| Red #ff0000 | 100% | 104.6 | 0.258 |
| Blue #0000ff | 100% | 133.8 | 0.313 |
| Cyan #00ffff | 100% | 50.1 | 0.155 |
| Teal #008080 | 100% | 30.1 | 0.093 |
Every row is as saturated as its RGB channels allow, yet CIELAB chroma runs from 30.1 for Teal to 133.8 for Blue. Chroma is an absolute distance from grey, so it has no fixed maximum: how far a colour can go depends on its hue, its lightness and the gamut of the device. The CIELAB and OKLCH columns also rank the colours differently, since the two spaces stretch the blue region by different amounts.
How this was calculated: Chroma is √(a*² + b*²) in CIELAB under D65 and √(a² + b²) in OKLab, both computed from the catalogue HEX values.
Writing an oklch() colour with a chroma copied from another hue.
The chroma a screen can show varies widely with hue and lightness, so a value that is comfortable for a blue can be outside sRGB for a cyan. The browser maps it inwards and the rendered colour is duller than specified.
Setting a colour tolerance for a production match.
CIEDE2000 scales chroma differences down more steeply than hue differences as chroma rises, because observers tolerate them more. A tolerance written in plain ΔE*ab treats the two alike, so for strong colours it rejects batches that look fine and passes hue shifts that do not.