Complementary colour finder — the opposite of any colour, three ways

Enter a colour to get its complement on the classic HSL colour wheel, on the perceptual OKLCH wheel and by the RGB max-plus-min rule, next to the plain inverse for comparison.

Live demo · real result from this tool
Complement (HSL wheel, 180°)#f6af3b
Complement (OKLCH, perceptual)
#b57a00
RGB complement (max + min − channel)
#f6af3b
Inverse (255 − channel, not a complement)
#c47d09

Colours

Processed on your device — nothing is uploaded.

How to use the complementary colour finder

  1. Enter your Colour as HEX, rgb(), hsl(), a CSS name or with the picker.
  2. Read the four results: Complement (HSL wheel, 180°), Complement (OKLCH, perceptual), RGB complement and Inverse.
  3. Compare the original, HSL and OKLCH swatches side by side.
  4. Copy the HEX value you prefer.

What it does and when to use it

Complementary colours sit opposite each other on the colour wheel. A complement makes an accent stand out against a main colour: an orange button on a blue page, or a highlight in a chart. This finder gives you the complement in more than one way, because “opposite” depends on the wheel you use, and the results can look very different.

Use the HSL result when you need to match another tool. Use the OKLCH result when you want a partner that looks equally light. If you want more than one partner, the colour harmonies tool shows triadic, split and tetradic sets. For a true channel inversion, use the colour inverter, and to check whether the pair can carry text, use the contrast checker.

How it works

HSL wheel. The colour is converted to hue, saturation and lightness, 180° is added to the hue, and the result is converted back to RGB.

OKLCH wheel. The colour is converted to OKLCH, 180° is added to the hue, and lightness and chroma are kept. If the result is outside the sRGB range, chroma is reduced until it fits (CSS Color 4 gamut mapping).

RGB complement. Each channel c becomes max(R, G, B) + min(R, G, B) − c.

Inverse. Each channel c becomes 255 − c. This is shown for comparison and is not a complement.

Worked examples

These are the tool’s own results.

Colour HSL OKLCH Inverse
Blue #3b82f6 #f6af3b #b57a00 #c47d09
Red #ff0000 #00ffff #009cb2 #00ffff
Grey #808080 #808080 #808080 #7f7f7f

For blue, the HSL complement is a light orange, while the OKLCH complement is a deeper amber at the blue’s own perceived lightness. For red, the HSL complement and the inverse agree on cyan, but the OKLCH complement is a darker teal.

Limits and tips

  • Hue rotation keeps transparency as it is.
  • A complement is a starting point. Most designs use it sparingly, for small accents.
  • Everything runs in your browser.

Frequently asked questions

Which complement should I use?
The HSL complement is what most colour pickers and design tools call the complement, so use it to match them. The OKLCH complement keeps the same perceived lightness as your colour, so the pair feels balanced and neither colour shouts over the other.
Is the complement the same as inverting a colour?
Not in general. Inverting subtracts each channel from 255, which also flips light and dark. Blue
What is the "RGB complement"?
For each channel it takes the largest plus the smallest channel and subtracts the channel. That rotates the hue by 180° while keeping HSL lightness and saturation, so it always equals the HSL result. It is shown because some code libraries use this formula.
What is the complement of grey, black or white?
The colour itself. Greys have no hue to rotate, so all three complements return the same grey. Only the inverse changes, for example
Are complementary colours good for text on a background?
Often not. They contrast in hue but can have similar lightness, which makes text hard to read and can vibrate visually. Check the pair's contrast ratio first.

Written by the ToolsRift team · Last updated

Pages are drafted with AI assistance and checked by automated tests. How we write and check pages.

Was this tool useful?

Report a problem

Start typing to search every tool.

↑ ↓ to moveEnter to openEsc to close