Sass
CSS preprocessor

Sass saturate() Function

Beginner
⏱️ 12 min read
📚 Updated: Jul 2026
🎯 5 Examples
Deprecated
Global · Dart Sass

What You’ll Learn

saturate() is a global Sass helper documented in the sass:color module page (Deprecated Functions). It makes a legacy color more vivid by increasing HSL saturation by $amount at compile time. This page covers the fixed-amount trap, why the module system skipped it, how it differs from color.scale(), migration to color.adjust(), and five compiled examples.

01

Concept

Add HSL saturation

02

Status

Deprecated global

03

$amount

0% … 100%

04

Prefer

color.scale()

05

Same math

color.adjust()

06

Practice

5 examples

What Is saturate()?

Saturate means “push this color toward a richer, more vivid look.” Official docs: it increases the HSL saturation of $color by $amount (0%100%). Hue and lightness stay related; only saturation moves up by a fixed chunk.

  • saturate(#c69, 20%)#e05299 (saturation 50% → 70%)
  • saturate(#6b717f, 30%)#4863a2 (a quieter slate gets punchier)
  • saturate(#0e4982, 30%)#004990 (80% → 100%, fully saturated)
💡
Beginner tip

Fixed addition is like pouring the same cup of pigment into every glass. A glass that is already almost full (high saturation) overflows to full chroma. Relative scaling is like “fill 30% of the remaining empty space”—that is color.scale.

📝 Syntax

Call the global function with a legacy color and a percentage:

styles.scss
// Deprecated global (legacy colors only)
saturate($color, $amount)

// Preferred — relative saturation
@use "sass:color";
color.scale($color, $saturation: $amount)

// Same fixed math as saturate (Dart Sass 1.79+ with $space)
color.adjust($color, $saturation: $amount, $space: hsl)

Parameters

ParameterTypeDescription
$colorColorMust be in a legacy color space (rgb, hsl, or hwb).
$amountNumber %How much to add to HSL saturation, between 0% and 100% (inclusive).

Return value

TypeMeaning
ColorA more saturated color (may clamp to full saturation at 100%).

📦 Why There Is No color.saturate()

Official docs: because saturate() is usually not the best way to make a color more saturated, it is not included in the new module system. You will not find color.saturate after @use "sass:color".

styles.scss
// Old (deprecated global)
$vivid: saturate(#c69, 20%);

@use "sass:color";

// Same fixed addition as saturate
$vivid: color.adjust(#c69, $saturation: 20%); // works on older Dart Sass too
// Official form (Dart Sass 1.79+):
// color.adjust(#c69, $saturation: 20%, $space: hsl)

// Usually better — 20% more saturated relative to the original
$vivid: color.scale(#c69, $saturation: 20%);
⚠️
Version note for $space

Official migration uses $space: hsl, which needs Dart Sass 1.79+. On older compilers, color.adjust($c, $saturation: $amount) still matches saturate for typical hex/RGB colors.

📋 saturate vs color.scale vs color.adjust

Official docs call out this trap with #0e4982 (already 80% saturation):

CallResultWhy
saturate(#0e4982, 30%)#004990Adds 30% saturation to 80% → clamps to 100%
color.scale(#0e4982, $saturation: 30%)#0a4986Moves 30% of the way toward maximum saturation
color.adjust(..., $saturation: 30%)Same fixed math as saturateUse only when you need identical legacy behavior

🛠 Compatibility

This is about Sass compilers, not browsers. Compiled CSS receives a finished color—no saturate() call remains at runtime.

FeatureDart SassNotes
Global saturate()Yes (deprecated)Legacy colors only; omitted from sass:color
color.scale($saturation: …)Yes (module)Preferred relative saturation
color.adjust(..., $space: hsl)1.79+Official same-math migration form
LibSass / Ruby SassGlobal likelyLack modern module / $space APIs

⚡ Quick Reference

GoalCode
Saturate 20% (legacy)saturate(#c69, 20%)#e05299
Slate punchsaturate(#6b717f, 30%)#4863a2
Overshoot trapsaturate(#0e4982, 30%)#004990
Relative saturatecolor.scale(#0e4982, $saturation: 30%)#0a4986
Same math as saturatecolor.adjust($c, $saturation: 20%, $space: hsl)
Desaturate twindesaturate($c, $amount) (also deprecated)

Examples Gallery

Examples use deprecated global saturate() plus modern scale / adjust migrations. Open View Compiled CSS for verified output (matches official Sass docs samples).

📚 Getting Started

Official docs samples for everyday saturate amounts.

Example 1 — Saturation 50% → 70% (Official Docs)

A soft magenta punch gets richer by a fixed 20% saturation.

styles.scss
// Saturation 50% becomes 70%.
@debug saturate(#c69, 20%); // #e05299

.button {
  background: #c69;
  &:hover {
    background: saturate(#c69, 20%);
  }
}

How It Works

Sass adds 20% to HSL saturation and emits a finished hex. Fine for mid saturation colors with room to spare—risky when the color is already vivid.

Example 2 — Quiet Slate Gets Punchier

A muted gray-blue gains 30% saturation for a clearer brand accent.

styles.scss
@debug saturate(#6b717f, 30%); // #4863a2

.badge {
  --quiet: #6b717f;
  --vivid: #{saturate(#6b717f, 30%)};
}

How It Works

Low-saturation neutrals have lots of room. In new code, try color.scale(#6b717f, $saturation: 30%) and compare the look.

📈 Practical Patterns

The full-chroma trap, preferred scale, and adjust migration.

Example 3 — High Saturation + Amount → Full Chroma (Official Docs)

Saturation 80% plus 30% clamps to fully saturated.

styles.scss
// #0e4982 has saturation 80%, so when saturate() adds 30% it just becomes
// fully saturated.
@debug saturate(#0e4982, 30%); // #004990

.deep {
  color: saturate(#0e4982, 30%);
}

How It Works

This is the classic reason official docs discourage saturate. You asked for “a bit more vivid,” but fixed math snapped to maximum chroma.

Example 4 — Prefer color.scale() (Official Docs)

Same seed color, relative 30% saturation keeps a softer navy.

styles.scss
@use "sass:color";

// scale() instead makes it 30% more saturated than it was originally.
@debug color.scale(#0e4982, $saturation: 30%); // #0a4986

.deep {
  --saturate: #{saturate(#0e4982, 30%)};
  --scale: #{color.scale(#0e4982, $saturation: 30%)};
}

How It Works

Side-by-side: saturate hits full chroma; scale keeps a usable mid step. Prefer scale in new SCSS.

Example 5 — Preserve Old Math with color.adjust()

Match saturate(#c69, 20%) exactly when migrating.

styles.scss
@use "sass:color";

// Prefer on Dart Sass 1.79+:
// color.adjust($c, $saturation: 20%, $space: hsl)

.tokens {
  --legacy: #{saturate(#c69, 20%)};
  --adjust: #{color.adjust(#c69, $saturation: 20%)};
  --brand: #{saturate(#336699, 20%)};
}

How It Works

--legacy and --adjust match, so you can swap calls without visual diffs. Still consider scale when you redesign accent states.

🚀 Real-World Use Cases

  • Reading legacy SCSS — recognize saturate() in older accent/hover themes.
  • Safe migrations — swap to color.adjust for identical output, or scale for better UX.
  • Teaching HSL — show fixed saturation steps vs relative scaling.
  • Audit traps — find saturate on already-vivid brands that snap to full chroma.
  • Pairing with desaturate — both globals are deprecated twins; migrate together.

🧠 How Compilation Works

1

Write SCSS

Call saturate($c, 20%) or migrate to scale / adjust.

Source
2

Read HSL saturation

Sass works in HSL for this legacy helper on rgb/hsl/hwb colors.

HSL
3

Add $amount

Saturation rises by a fixed percent; may clamp at 100%.

Saturate
4

Finished CSS color

Browsers see hex—not a Sass function call.

⚠️ Common Pitfalls

  • Using it in new code — prefer color.scale (or adjust for same math).
  • Expecting color.saturate() — that name does not exist in sass:color.
  • Already-vivid colors + large amounts — easy to clamp to full saturation unexpectedly.
  • Modern color spaces$color must be legacy for global saturate.
  • Assuming “30% more saturated” means scalesaturate is fixed addition, not relative.

💡 Best Practices

✅ Do

  • Use color.scale($c, $saturation: $n) for relative saturation
  • Use color.adjust(..., $saturation: $n, $space: hsl) when matching old saturate
  • Audit already-vivid brands before applying large amounts
  • Migrate desaturate siblings in the same pass
  • Document accent/token recipes with the modern API

❌ Don’t

  • Add new saturate() calls in greenfield projects
  • Look for color.saturate in the module
  • Pass modern oklch colors into global saturate
  • Expect the browser to re-run Sass at runtime
  • Assume fixed saturation steps feel “30% more vivid”

Key Takeaways

Knowledge Unlocked

Five things to remember about saturate()

Deprecated fixed saturation adder—prefer scale.

5
Core concepts
⚠️ 02

Status

Deprecated

Docs
🎨 03

Does

Adds fixed saturation

HSL
🔄 04

Prefer

color.scale()

Modern
05

Same math

color.adjust(…)

Migrate

❓ Frequently Asked Questions

saturate($color, $amount) increases a legacy color’s HSL saturation by $amount (0%–100%). Example: saturate(#c69, 20%) is #e05299; saturate(#0e4982, 30%) is fully saturated #004990.
Yes. Official Sass docs list it under Deprecated Functions and omit it from the sass:color module. Prefer color.scale() for relative saturation, or color.adjust($color, $saturation: $amount, $space: hsl) to keep the old math.
Because saturate() is usually not the best way to raise saturation, it is not included in the new module system. Use color.scale or color.adjust instead.
saturate adds a fixed saturation amount (80% + 30% becomes fully saturated). color.scale($c, $saturation: 30%) makes the color 30% more saturated than it was, which is usually what designers want.
No for modern spaces. Official docs require a legacy color space (rgb, hsl, or hwb). Convert first, or use color.scale / color.adjust with an explicit $space.
For the same fixed addition: color.adjust($color, $saturation: $amount, $space: hsl) on Dart Sass 1.79+. For better relative saturation: color.scale($color, $saturation: $amount).
Did you know?

Official Sass docs keep saturate() and desaturate() for compatibility, but neither lives in sass:color. The modern story is color.scale for relative steps and color.adjust when you must match the old fixed math exactly.

Conclusion

saturate() is the classic global way to add HSL saturation on legacy colors. Treat it as deprecated documentation: prefer color.scale($color, $saturation: $amount) for relative saturation, or color.adjust when you need identical old math.

Continue with color.saturation(), color.scale(), desaturate(), or color.adjust().

Next: color.saturation()

You learned deprecated saturate()—next, read HSL saturation with color.saturation().

color.saturation() →

About the author

Mari Selvan M P
Mari Selvan M P 🔗

Developer, cloud engineer, and technical writer

  • Experience 12 years building web and cloud systems
  • Focus Full Stack Development, AWS, and Developer Education

I write practical tutorials so students and working developers can learn by doing—from databases and APIs to deployment on AWS.

5 people found this page helpful