The filter: saturate() function controls the intensity of colours rendered inside an element without changing hue or lightness.
Loading Filter Effects Builder…
Live preview from saturate(0) greyscale through to oversaturated vivid colours
Preview hover saturation boost on image gallery elements
Combine saturate with brightness for polished image treatments
One-click CSS copy for any saturation value
Drop the Filter Effects Builder into any page — blog post, product docs, intranet, school portal — with a single line of HTML. Your visitors get the full tool, processed entirely in their browser. No backend, no uploads, no signup.
Embed code
<iframe
src="https://www.fixtools.io/css-tool/filter-effects-builder?embed=1"
width="100%"
height="780"
frameborder="0"
style="border:0;border-radius:16px;max-width:900px;"
title="Filter Effects Builder by FixTools"
loading="lazy"
allow="clipboard-write"
></iframe>Attribution-friendly: a small "Powered by FixTools" link appears in the embed footer.
The saturate() function accepts numbers and percentages in the same way as grayscale() and brightness(). saturate(0) and saturate(0%) produce greyscale output, equivalent to grayscale(1). saturate(1) is the identity value and renders the image unchanged. saturate(2) doubles saturation, making a moderately vivid image look intensely colourful and almost cartoon like in places. There is no upper limit defined in the specification, though values above 3 to 4 produce fully saturated primary colour output with no tonal variation left in the original photograph. Percentage values map directly so that saturate(150%) equals saturate(1.5). The function operates on the colour components of each pixel after the standard sRGB to linear conversion, modifying the perceived chroma while leaving hue and lightness relationships effectively unchanged. Because the computation is per pixel and parallel friendly, modern GPUs handle even very large saturate filtered images without measurable cost on desktop browsers.
Saturation boost on hover for image galleries is one of the most widely used filter effects in production UI across portfolios, e-commerce, and editorial sites. The standard pattern applies filter: saturate(0.8) to gallery thumbnails at rest, making them feel slightly muted and editorial, and transitions to filter: saturate(1.2) on :hover. The resting desaturation causes images to recede into the grid, and the hover boost makes the selected image feel vivid and immediate as the cursor enters its bounds. The transition between them with transition: filter 0.2s ease creates a responsive, polished interaction without any JavaScript or extra DOM. Combine this pattern with a subtle scale(1.02) transform on the same hover rule to add physical depth to the saturation lift, and reach for transform-origin: center if the scale produces unwanted layout shifts at the edges of the grid container.
Values between 0.3 and 0.8 produce the partial desaturation range useful for secondary content, inactive states, archived posts, and thumbnails that should not compete with primary content above them in the visual hierarchy. saturate(0.5) retains clear colour identity, meaning red still reads as red and blue still reads as blue, but both appear muted and somewhat unconvincing compared to their fully saturated counterparts at saturate(1). This range is particularly valuable for image grids where one featured item should appear at full saturation, or even slightly boosted at saturate(1.1) or above, while surrounding items are visually de-prioritised. Applying the partial desaturation to a parent container and using a :hover or .active override on the featured item achieves this hierarchy from a minimal number of CSS rules, and the same pattern scales well to dashboards, news feeds, and catalogue layouts that need clear focal points.
Combining saturate() with brightness() and contrast() forms the core of a CSS based photo treatment pipeline that mirrors the basic adjustments available in image editors. A pleasing default for hero photography on marketing pages is filter: brightness(1.04) saturate(1.12) contrast(1.05), which lifts the image slightly without crossing into the obviously processed territory. The order matters: putting saturate() after brightness() means saturation operates on the already brightened pixels, producing slightly different colour intensity than the reverse order would yield. For consistent cross page treatments, define the chosen filter chain as a CSS custom property like --photo-treatment and reuse it across hero, card, and section image selectors. This keeps the look consistent and easy to update from one place when the brand visual direction shifts during a redesign or seasonal campaign.
Drag the saturation slider left below 1 to mute colours or right above 1 to intensify them. Pause at 0 to see full greyscale, at 1 for no change, and at 1.5 to 2.0 to observe colour oversaturation. Copy the filter declaration when the colour intensity matches your design.
Step-by-step guide to css saturate filter generator:
Add saturate() to the filter builder
Select saturate from the function panel inside the FixTools filter effects builder. The slider starts at 1, the identity value, with the sample image rendered exactly as supplied. Drag left to desaturate the colours toward neutral grey, or drag right to intensify them toward vivid primaries. Watch the preview update in real time so you can lock in the exact value that matches the look in your reference comp.
Set the saturation level
Choose a value below 1 for a muted resting state on gallery thumbnails or archived content, exactly 1 for the unmodified original, or above 1 for a confident saturation boost on hero photography and feature cards. Pause briefly at 0 to preview full greyscale and confirm the image still reads well in tonal form. The slider snaps to common waypoints like 0.5, 0.75, 1.0, and 1.5 to speed up exploration.
Pair with brightness if needed
Add brightness(1.05) to the stack when boosting saturation aggressively to prevent the image from appearing over processed or muddy in shadow areas. The two functions complement each other: brightness lifts the tonal range, saturate adds colour confidence, and contrast can join them for a complete photo treatment. Adjust both values together with the live preview until the combination matches your reference imagery without drifting into obviously filtered territory.
Copy and apply hover transitions
Copy the generated filter declaration using the copy button beside the output panel and paste it into your stylesheet. Add a second rule with a different saturation value targeted at :hover, :focus, or an active state class, then connect the two values with transition: filter 0.2s ease so the change reads as a polished interaction rather than a sudden snap. Consider adding will-change: filter on elements that animate frequently.
Common situations where this approach makes a real difference:
Photography gallery with hover saturation boost
A photography portfolio uses filter: saturate(0.78) on all thumbnails at rest, making the grid feel calm and editorial. On :hover, the filter changes to saturate(1.25) with transition: filter 0.25s ease. The resting desaturation and hover boost together create a clear, satisfying interaction signal. The generator helps the developer find 0.78 as the resting value: just enough muting to read as intentional without losing colour identity.
Featured product card emphasis
An e-commerce category page applies filter: saturate(0.7) to all product cards by default. The promoted or featured product card has filter: saturate(1.15) applied via a .featured modifier class. The single featured card reads as more vivid and physically present than the muted grid around it, directing attention without changing layout, size, or typography.
Colour-fill image entrance animation
A news site uses a staggered page load animation where article images appear in greyscale with filter: saturate(0) and transition to saturate(1) over 0.9s after the page load event. Images near the top of the viewport animate first, with images further down the page animating on scroll entry via an IntersectionObserver class toggle. The effect makes the page feel like it is gradually coming alive with colour.
Inactive team member photo treatment
A company team page shows current and alumni team members. Alumni photos use filter: saturate(0.4) grayscale(0.3) to produce a subtly faded, low-saturation look that distinguishes them from current team members at full colour without making them appear completely greyscale or invisible. The combined filter produces a soft, respectful treatment for former colleagues.
Get better results with these expert suggestions:
Apply resting desaturation to a grid container and boost on child hover
Instead of applying saturate() to each child, set filter: saturate(0.75) on the parent grid. On .grid-item:hover, apply filter: saturate(1.2) to override at the child level. This reduces the number of rules and means all new items added to the grid automatically inherit the resting desaturation without requiring additional CSS.
Combine saturate with hue-rotate to shift and intensify colour simultaneously
filter: saturate(1.3) hue-rotate(10deg) both intensifies colours and shifts their hue slightly. The combined effect reads as a more stylised colour treatment than either function alone. Applied to a hero image, this produces a subtle otherworldly quality while keeping the image recognisable.
Use saturate(0) with a slow transition for a content loading effect
Render image content initially with filter: saturate(0) and transition to filter: saturate(1) over 0.8s to 1.2s after load. The colour-fill reveal draws attention to the image after the initial page render settles, creating a sophisticated entrance that feels like the image coming to life.
Test saturate on brand colours with a strict palette
Oversaturating an element that contains brand colours can push those colours outside their specified hex values into more vivid variants that no longer match brand guidelines. If your design system uses precise brand colours, test any saturate(>1) filter against the actual brand-coloured elements in your UI before shipping.
Use saturate(0) instead of grayscale(1) for transitions
When transitioning between colour and greyscale, filter: saturate(0) and filter: saturate(1) interpolate smoothly as a single function. Using grayscale(1) and grayscale(0) also works, but mixing grayscale() and saturate() in the same transition may not interpolate correctly across all browsers.
Pair saturate(1.15) with brightness(1.05) for a polished hero photo treatment
A slight brightness lift combined with a saturate boost produces a vivid, professionally processed look for hero photography without aggressive editing. The combination avoids the washed-out appearance that high brightness alone can create.
Keep oversaturation below 1.6 for credible image rendering
Values above 1.6 start to produce unnaturally vivid colours that look over-processed or artificial. For most photograph-based UI treatments, saturate(1.1) to saturate(1.3) is the credible range. Higher values work for flat illustrations and icons where oversaturation reads as intentional rather than photographic degradation.
More use-case guides for the same tool:
Other tools you might find useful:
Open the full Filter Effects Builder — free, no account needed, works on any device.
Open Filter Effects Builder →Free · No account needed · Works on any device