Color harmonies: complementary, analogous, triadic and more
A color harmony picks hues at fixed angles on a color wheel: 180° apart for complementary, 30° apart for analogous, 120° apart for triadic. Rotate the hue in OKLCH rather than HSL, and the colors stay equally light, so no single hue jumps out by accident.
5 min read
What a color harmony is
A harmony is a rule for choosing colors that belong together. You take a base color, keep how light and how colorful it is, and turn only the hue by set angles on a color wheel.
The angles are the easy part. Which wheel you turn matters just as much, because the classic HSL wheel and a perceptual wheel like OKLCH give visibly different results for the same angle. All examples below start from #2a7fbf, a medium blue.
| Format | Value |
|---|---|
| HEX | |
| HSL | |
| OKLCH |
Complementary, split-complementary, analogous, triadic, tetradic, square
Each row keeps the OKLCH lightness of the base, 0.577, and its chroma, 0.127. Only the hue turns by the listed angles. When a turned color falls outside sRGB, chroma is lowered slightly to fit, which is why a couple of colors are a little less vivid. Monochromatic is the exception: it keeps the hue and steps lightness by 0.12.
| Harmony | Hue angles | Color 2 | Color 3 | Color 4 | Color 5 |
|---|---|---|---|---|---|
| Complementary | 0°, 180° | #ab6708 | |||
| Split-complementary | 0°, 150°, 210° | #b85a42 | #907800 | ||
| Analogous | 0°, −30°, +30° | #008aa7 | #6571c3 | ||
| Triadic | 0°, 120°, 240° | #b6566e | #678626 | ||
| Tetradic (rectangle) | 0°, 60°, 180°, 240° | #8c64b4 | #ab6708 | #678626 | |
| Square | 0°, 90°, 180°, 270° | #a75a96 | #ab6708 | #258f58 | |
| Monochromatic | Same hue, L ±0.12, ±0.24 | #00396f | #005b98 | #53a4e7 | #7dcbff |
- Complementary: the strongest tension. Use the second color only for small accents such as a call-to-action button.
- Split-complementary: the same energy as complementary but easier to balance, because the accent is split into two neighbors of the opposite hue.
- Analogous: calm and cohesive. Good for illustrations and backgrounds, weak when you need one element to stand out.
- Triadic, tetradic and square: lively and hard to control. Let one color lead and keep the others small.
- Monochromatic: one hue in several lightness steps. The safest choice for interfaces, since contrast comes from lightness anyway.
Why the HSL color wheel gives unbalanced harmonies
Most color wheels in design tools are HSL: they turn the hue and keep the HSL saturation and lightness numbers. But HSL lightness is a formula, not what you see. Turn a golden yellow by 180° in HSL and you get a deep blue that looks far darker than the yellow.
Rotating in OKLCH keeps perceived lightness equal. Here is #f4b400 turned both ways, with the OKLCH lightness of every result.
| Role | HSL rotation | OKLCH L | OKLCH rotation | OKLCH L |
|---|---|---|---|---|
| Base | #f4b400 | 0.808 | #f4b400 | 0.808 |
| Complementary | #0040f4 | 0.489 | #97c0ff | 0.802 |
| Triadic, +120° | #00f4b4 | 0.857 | #00dcec | 0.817 |
| Triadic, +240° | #b400f4 | 0.586 | #f299fe | 0.808 |
The HSL set spans lightness from 0.489 to 0.857, so the blue and purple sink and the mint green glows. The OKLCH set stays between 0.802 and 0.817. The same happens with pure RGB primaries: #ff0000, #00ff00 and #0000ff are a perfect HSL triad, yet their OKLCH lightness is 0.628, 0.866 and 0.452.
There is a trade-off. A blue as light as this yellow cannot be very vivid on an sRGB screen, so the OKLCH complement #97c0ff has chroma 0.10 instead of 0.166. You choose between equal lightness and equal vividness; with yellow and blue you cannot have both.
Artist’s RYB wheel vs the screen RGB wheel
The wheel from art class is RYB: red, yellow and blue as primaries, as in mixing paint. On it, the complement of red is green and the complement of blue is orange. Screens mix light, so digital tools use an RGB wheel, where the complement of red is cyan and the complement of blue is yellow.
Neither is wrong, they answer different questions. RYB follows painting tradition, RGB and OKLCH follow how screens and eyes work. If a design tool gives you cyan where you expected green, it is using the RGB wheel.
| Base | RYB complement | RGB (HSL) complement | OKLCH complement |
|---|---|---|---|
| #ff0000 | Green | #00ffff | #009cb2 |
| #0000ff | Orange | #ffff00 | #734f00 |
| #ffff00 | Violet | #0000ff | #f3f1ff |
The OKLCH column shows what equal lightness does to extreme colors. The complement of pure blue becomes a dark ochre with the same lightness, 0.45, and the complement of pure yellow becomes an almost white lavender at 0.96.
The 60-30-10 rule applied to a harmony
A harmony tells you which colors to use, not how much of each. The 60-30-10 rule fills that gap: about 60% of the area goes to a dominant color, 30% to a secondary one and 10% to an accent. Equal shares make even a good harmony look noisy.
In an interface the 60% is usually a near-neutral tinted with the base hue, the 30% is the base and the 10% is the complementary accent. Here is a copy-ready set built from #2a7fbf.
| Role | Share | Color | OKLCH | Used for |
|---|---|---|---|---|
| Dominant | 60% | #eff6fd | L 0.97, C 0.012 | Page background, cards |
| Secondary | 30% | #2a7fbf | L 0.577, C 0.127 | Header, links, selected states |
| Accent | 10% | #ab6708 | L 0.577, C 0.127 | Main call to action, highlights |
| Text | n/a | #15232f | L 0.25, C 0.03 | Body text on the dominant color |
CSS
:root {
--surface: #eff6fd;
--primary: #2a7fbf;
--accent: #ab6708;
--text: #15232f;
}How to check a harmony for contrast
Hue difference does not make text readable, lightness difference does. The complementary pair above is as far apart in hue as colors get, yet #2a7fbf on #ab6708 has a WCAG ratio of 1.05:1 and an APCA Lc of 0: practically invisible as text.
Equal lightness has an upside. White text on every color of the OKLCH harmonies above lands between 4.04:1 and 4.62:1. On the HSL version of the same harmonies, it swings from 2.15:1 to 8.90:1. One fix therefore works for the whole OKLCH set: lower the lightness to 0.52, and white text passes 4.5:1 on any hue at chroma 0.127, from 5.00:1 to 5.91:1.
| Text | Background | WCAG ratio | APCA Lc | Verdict |
|---|---|---|---|---|
| #2a7fbf | #ab6708 | 1.05:1 | 0 | Unreadable, same lightness |
| #ffffff | #2a7fbf | 4.30:1 | -74.8 | Fails AA for body text |
| #ffffff | #106ead | 5.45:1 | -82.0 | Passes, base at L 0.52 |
| #ffffff | #995600 | 5.70:1 | -83.3 | Passes, accent at L 0.52 |
| #ab6708 | #eff6fd | 4.12:1 | 64.9 | Large text and icons only |
| #5c2d00 | #d8eafb | 9.42:1 | 82.5 | Complementary pair split into dark and light |
To use two harmony colors together as text and background, move them apart in lightness: keep the hues and push one toward 0.35 and the other toward 0.93. Then check the real pair in a contrast checker, and run the palette through a color blindness simulator if the accent carries meaning.
Questions and answers
What are the main types of color harmony?
The common harmonies are complementary (hues 180° apart), split-complementary (150° and 210°), analogous (30° to each side), triadic (three hues 120° apart), tetradic or rectangle (0°, 60°, 180°, 240°), square (four hues 90° apart) and monochromatic (one hue in different lightness steps).
What is the complementary color of red?
It depends on the color wheel. On the painter’s RYB wheel the complement of red is green. On the RGB wheel used by screens and design tools it is cyan, #00ffff for pure red, and in OKLCH with equal lightness it is a teal like #009cb2.
Why do my complementary colors look unbalanced?
Most tools rotate hue in HSL, whose lightness does not match perception. The HSL complement of a golden yellow like #f4b400 is #0040f4, with an OKLCH lightness of 0.489 against the yellow’s 0.808. Rotating hue in OKLCH keeps both colors equally light.
Can complementary colors be used for text and background?
Only if their lightness differs a lot. Complementary colors with equal lightness, like #2a7fbf and #ab6708, have a contrast ratio of just 1.05:1. Make one dark and one light, for example #5c2d00 on #d8eafb at 9.42:1.
What is the 60-30-10 color rule?
The 60-30-10 rule splits a design into about 60% dominant color, 30% secondary color and 10% accent. With a harmony, the dominant is usually a tinted neutral, the secondary is the base color and the accent is the complementary or triadic color.