Sass saturate()

Beginner
12 min read
Updated: Nov 2026
5 examples
Deprecated writer

Definition and Usage

saturate($color, $amount) increases a legacy color’s HSL saturation by a fixed percentage (0%–100%) and returns a new color. It is a global built-in — there is no color.saturate().

Deprecated.

Official Sass docs list saturate() under Deprecated Functions. Fixed addition often overshoots (an 80% saturated color saturated by 30% becomes fully saturated). Prefer color.scale($color, $saturation: $amount) for relative saturation, or color.adjust($color, $saturation: $amount, $space: hsl) to keep the old math.

Official idea.

saturate(#c69, 20%) → #e05299. But saturate(#0e4982, 30%) → #004990 (fully saturated), while color.scale(#0e4982, $saturation: 30%) → #0a4986.

Legacy colors only.

$color must be in rgb, hsl, or hwb. For modern spaces, use color.scale / color.adjust with an explicit $space.

Syntax

SCSS
// Deprecated global
saturate($color, $amount);

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

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

Pattern: recognize old saturate → choose scale for design intent or adjust for pixel-matching migrations.

Migrate to scale / adjust

Official migration paths:

Old / intentPrefer
saturate($c, $amount) — relative “% punchier”color.scale($c, $saturation: $amount)
Keep exact old mathcolor.adjust($c, $saturation: $amount, $space: hsl)
desaturate($c, $amount)color.scale($c, $saturation: -$amount) or adjust with -$amount
No module formThere is no color.saturate()

Quick mental model: saturate = fixed add, scale = percent of remaining room, adjust = same fixed math, modern API.

SCSS Examples

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

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

A soft mauve gains a fixed 20% saturation.

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

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

How It Works

  1. Add 20% to HSL saturation.
  2. Mid-range colors still look fine.
  3. Vivid state emits finished hex #e05299.
  4. Risky when saturation is already high (see Example 2).

Example 2 — High Saturation + Large Amount → Full (Official Docs)

Saturation 80% plus 30% clamps to fully saturated.

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

  1. #0e4982 saturation is 80%.
  2. Add 30% → past 100% → fully saturated #004990.
  3. You asked for “a bit punchier” and maxed the dial.
  4. Classic reason official docs discourage saturate.

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

Relative saturation keeps headroom; compare the full-sat trap side by side.

SCSS
@use "sass:color";

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

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

How It Works

  1. Side-by-side shows the trap vs the fix.
  2. saturate clamps to full saturation.
  3. scale moves 30% of the remaining room → #0a4986.
  4. Prefer scale in new SCSS for accent / hover punch.

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

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

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%)};
}

How It Works

  1. --legacy and --adjust match — safe visual swap.
  2. Pass $space: hsl on Dart Sass 1.79+ when you can.
  3. Still consider scale when redesigning accents.
  4. Module form documents where the helper comes from.

Example 5 — Accent Hover with Fixed Saturate

Legacy pattern you will still find in older themes (same mauve as Example 1).

SCSS
$brand: #c69;

.link {
  color: $brand;
  &:hover {
    color: saturate($brand, 20%);
  }
}

How It Works

  1. Base brand stays the soft mauve.
  2. Hover adds a fixed 20% saturation.
  3. Result matches the official #e05299 sample.
  4. Modern rewrite: color.scale($brand, $saturation: 20%).

Edge Cases & Pitfalls

Most saturate bugs are fixed math on already-rich colors, or expecting a module API.

clamp

Overshoot → fully saturated

If saturation plus $amount hits 100%, you max out. Use color.scale instead.

module

No color.saturate()

After @use "sass:color", call scale or adjust — not color.saturate.

space

Legacy colors only

oklch / lab colors need modern writers with an explicit $space.

intent

Fixed ≠ relative

saturate($c, 30%) is not “30% more saturated.” That phrase maps to scale(..., $saturation: 30%).

Sass Support

Global saturate still compiles, but new work should use the module writers.

FeatureStatus
Global saturate()Deprecated — still available for legacy SCSS
color.scale(..., $saturation: …)Preferred relative saturation
color.adjust(..., $space: hsl)Same fixed math (Dart Sass 1.79+ for $space)
color.saturate()Does not exist

Compile with the Dart Sass CLI.

Key Takeaways

  • Deprecated: fixed HSL saturation addition on legacy colors.
  • Prefer color.scale for “percent more saturated.”
  • Use color.adjust when you must match old pixels.
  • No module form — there is no color.saturate().

One line: learn saturate to read legacy SCSS; write scale (or adjust) in new code.

Migrate Notes

Conceptual flow:

flow.txt
1. Find saturate($color, $amount)
2. Want "% punchier"? → color.scale($color, $saturation: $amount)
3. Need same pixels? → color.adjust($color, $saturation: $amount, $space: hsl)
4. @use "sass:color"
5. Delete the global saturate() call

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).

Next: Sass color.saturation()

Read HSL saturation 0%–100% — prefer color.channel in new code.

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.

8 people found this page helpful