color.is-powerless() belongs to the built-in sass:color module. It answers: is this channel powerless—would changing it leave the color looking the same? This page covers the official hsl / hwb / lch / oklch rules, optional $space, how it differs from is-missing, the Dart Sass 1.79+ requirement, and five examples.
01
Concept
Powerless channels
02
Module
@use "sass:color"
03
Rules
hsl · hwb · lch
04
Space
Optional $space
05
Vs
is-missing()
06
Practice
5 examples
Concept
What Is color.is-powerless()?
Powerless means “this dial is connected, but turning it does nothing right now.” Classic case: a grey in HSL still stores a hue angle, but with saturation: 0% that hue cannot change the look. Official docs return whether $channel is powerless in $space.
Greys are the teaching hero here. If there is no colorfulness (saturation / chroma), hue has no power—so hue-based mixins should check is-powerless first.
Foundation
📝 Syntax
Load the color module, then pass a color, a quoted channel, and an optional space:
Optional space to evaluate in (defaults to $color’s space), e.g. hsl, oklch.
Return value
Type
Meaning
Boolean
true if that channel is powerless in the chosen space; otherwise false.
Modules
📦 Loading sass:color
There is no separate global is-powerless() built-in. Use the module form on Dart Sass 1.79+.
styles.scss
// Recommended — namespaced (Dart Sass 1.79+)
@use "sass:color";
$p: color.is-powerless(hsl(180deg 0% 40%), "hue");
// Optional — bring members into the current namespace
@use "sass:color" as *;
$p: is-powerless(hsl(180deg 0% 40%), "hue");
// Optional — custom namespace
@use "sass:color" as c;
$p: c.is-powerless(hsl(180deg 0% 40%), "hue");
⚠️
Version gate
If Dart Sass reports Undefined function for color.is-powerless, upgrade to 1.79+.
Rules
🎨 When Is a Channel Powerless?
Official docs list these circumstances:
Space
Powerless channel
Condition
hsl
hue
saturation is 0%
hwb
hue
whiteness + blackness > 100%
lch / oklch
hue
chroma is 0%
Compare
📋 is-powerless vs is-missing
Both are boolean channel checks, but they answer different questions.
Helper
Question
Typical case
color.is-powerless()
Would changing this channel change the look?
Hue on a grey (sat/chroma is 0)
color.is-missing()
Is this channel absent?
rgb(100 none 200) green, or powerless channel represented as missing after conversion
💡
Often related
Converting a grey into lch can leave hue missing. Checking powerless in HSL/oklch catches the same “hue does not matter” idea before you rotate accents.
Support
🛠 Compatibility
This is about Sass compilers, not browsers. The boolean is resolved at compile time—CSS never sees a color.is-powerless() call.
With saturation at 0%, any hue looks the same grey—so hue is powerless. Saturation itself still controls whether colorfulness returns, so it is not powerless.
Example 2 — Hex Grey Checked in HSL Space
Pass $space: hsl so a hex is evaluated with HSL powerless rules.
In HSL the grey still has a hue value, but it is powerless. After converting grey to LCH, hue may be missing instead. Both flags warn you not to treat hue as a useful accent dial.
Applications
🚀 Real-World Use Cases
Accent mixins — skip hue rotates / complements on greys.
Palette audits — flag tokens where hue is stored but meaningless.
Design-system guards — refuse hue-based variants when sat/chroma is 0.
Space migrations — check hex greys with $space: hsl or oklch.
Teaching color models — show why greys still print a hue angle.
🧠 How Compilation Works
1
Write SCSS
Call color.is-powerless($color, "hue") after @use.
Source
2
Pick a space
Use $space, or default to the color’s own space.
Space
3
Apply powerless rules
Check sat/chroma/whiteness+blackness conditions for hue.
Rules
4
✓
Plain CSS ships
Browsers see true/false or branched results—not a Sass call.
Watch Out
⚠️ Common Pitfalls
Old Dart Sass — color.is-powerless needs 1.79+.
Unquoted channel names — use "hue", not bare hue.
Checking hex without $space — hex is rgb; pass $space: hsl (or oklch) to test hue powerlessness.
Confusing with missing — powerless ≠ absent; use both helpers when needed.
Rotating hue on greys — the math may run, but the visual result stays grey.
Pro Tips
💡 Best Practices
✅ Do
Run Dart Sass 1.79+ before relying on is-powerless
Quote channel names; leave space names unquoted
Pass $space when inspecting hex/RGB colors for hue
Guard hue-based mixins for greys and near-greys
Prefer @use "sass:color"
❌ Don’t
Ship CI on older Dart Sass and expect this function to exist
Assume every stored hue angle is visually meaningful
Treat powerless and missing as identical without checking
Rely on LibSass / Ruby Sass
Build accent systems that only rotate hue on desaturated tokens
Summary
Key Takeaways
Knowledge Unlocked
Five things to remember about color.is-powerless()
Hue without colorfulness does nothing—check before you rotate, Dart Sass 1.79+.
5
Core concepts
📝01
Call
is-powerless($c, "hue")
API
📦02
Needs
Dart Sass 1.79+
Version
🎨03
Classic
sat 0% → hue
HSL
⚡04
Modern
chroma 0% → hue
oklch
✓05
Sibling
is-missing()
Related
❓ Frequently Asked Questions
color.is-powerless($color, $channel, $space: null) returns true if that channel is powerless in the chosen space—changing it would not change how the color looks. Example: color.is-powerless(hsl(180deg 0% 40%), "hue") is true.
Official docs: in hsl when saturation is 0%; in hwb when whiteness + blackness is greater than 100%; in lch/oklch when chroma is 0%.
Missing means the channel is absent (for example CSS none). Powerless means the channel may still have a value, but it does not affect appearance—like hue on a grey.
color.is-powerless() and its $space argument need Dart Sass 1.79+. Older compilers report Undefined function.
Pass a quoted channel string such as "hue". Pass an unquoted space name such as hsl or oklch for $space.
No. Use the module form color.is-powerless() after @use "sass:color".
Did you know?
Official Sass docs call out a third powerless case besides HSL and LCH/OKLCH: in hwb, hue is powerless when whiteness + blackness is greater than 100%. That is the HWB way of saying the color is fully washed out, so hue cannot change what you see.
color.is-powerless() tells you when a channel—usually hue—cannot change how a color looks. Use it to guard accent mixins on greys, pass $space for hex tokens, and pair it with is-missing when converting spaces—on Dart Sass 1.79+.