Skip to the color picker

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.

Example: #2a7fbf
FormatValue
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.

HarmonyHue anglesColor 2Color 3Color 4Color 5
Complementary0°, 180°#ab6708
Split-complementary0°, 150°, 210°#b85a42#907800
Analogous0°, −30°, +30°#008aa7#6571c3
Triadic0°, 120°, 240°#b6566e#678626
Tetradic (rectangle)0°, 60°, 180°, 240°#8c64b4#ab6708#678626
Square0°, 90°, 180°, 270°#a75a96#ab6708#258f58
MonochromaticSame 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.

RoleHSL rotationOKLCH LOKLCH rotationOKLCH L
Base#f4b4000.808#f4b4000.808
Complementary#0040f40.489#97c0ff0.802
Triadic, +120°#00f4b40.857#00dcec0.817
Triadic, +240°#b400f40.586#f299fe0.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.

BaseRYB complementRGB (HSL) complementOKLCH complement
#ff0000Green#00ffff#009cb2
#0000ffOrange#ffff00#734f00
#ffff00Violet#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.

RoleShareColorOKLCHUsed for
Dominant60%#eff6fdL 0.97, C 0.012Page background, cards
Secondary30%#2a7fbfL 0.577, C 0.127Header, links, selected states
Accent10%#ab6708L 0.577, C 0.127Main call to action, highlights
Textn/a#15232fL 0.25, C 0.03Body 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.

TextBackgroundWCAG ratioAPCA LcVerdict
#2a7fbf#ab67081.05:10Unreadable, same lightness
#ffffff#2a7fbf4.30:1-74.8Fails AA for body text
#ffffff#106ead5.45:1-82.0Passes, base at L 0.52
#ffffff#9956005.70:1-83.3Passes, accent at L 0.52
#ab6708#eff6fd4.12:164.9Large text and icons only
#5c2d00#d8eafb9.42:182.5Complementary 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.

Try it in PickShade

Related guides