CSS saturate() — насиченість кольорів


Опис

Функція saturate() дозволяє змінювати насиченість кольору елемента, надаючи дизайнеру можливість точного керування відтінками кольору на веб-сторінці.

Використання saturate() може привести до динамічних та виразних візуальних ефектів. Функція приймає значення, яке може бути додатним або навіть від'ємним. Значення впливає на насиченість кольору: збільшення значення збільшує насиченість, тоді як зменшення робить кольори менш насиченими. Ось приклад:

filter: saturate(1.5);

У цьому випадку насиченість кольору елемента збільшується у 1.5 рази, надаючи йому яскравіший вигляд.

Інші значення:

  • -1: максимальне зменшення насиченості;
  • 0: збереження насиченості без змін;
  • 1: збільшення насиченості у 2 рази;
  • 2: збільшення насиченості у 3 рази.

Значення можуть бути інтерпольовані для проміжних ступенів насиченості, що дає можливість детального керування кольором.

автор: Bond

Загальний опис

автор: NagarD

Порада

Збільшення насиченості може зробити кольори яскравішими та насиченішими, що може бути корисно для створення живих та виразних дизайнів.

автор: Bond
Порада

Зменшення насиченості може призвести до відтінків сірого та зменшення насиченості кольорів, що створює більш приглушені та пом'якшені ефекти.

автор: Bond
Порада

Зверніть увагу, що функція saturate() є частиною фільтрів CSS та може бути застосована разом з іншими фільтрами для досягнення бажаного ефекту.

автор: Bond
Нотатка

Функція saturate() є потужним інструментом для створення динамічного та атрактивного візуального враження. Вона допомагає дизайнерам та розробникам забезпечити яскравий та живий вигляд елементів веб-сайту, зберігаючи при цьому строгий контроль над кольоровою гамою.

автор: Bond

Синтаксис

saturate(<value>)

Функція saturate може отримувати єдине значення:

<value>

Значення можуть бути додатніми або від'ємними. Використовуючи додатні значення, насиченість збільшується, а від'ємні значення зменшують насиченість. Значення 0 залишає насиченість без змін.

автор: Bond

Значення без задання: 1

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE
18 35 6 15 12
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
4.4 53 35 6

Приклади

+ запропонувати свій приклад у пісочниці

HTML

<div id="description">
  <h2>Приклад 2: зміна насиченності елемента</h2>
  <p>Три картинки з різними значеннями функції saturate().</p>
</div>

<div id="result">
  <div class="image-container">
    <img class="image image0" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200' viewBox='0 0 40 40' preserveAspectRatio='none'%3E%3Crect width='40' height='40' fill='%23e63946'/%3E%3Crect y='20' width='40' height='20' fill='%232a9d8f'/%3E%3Ccircle cx='20' cy='20' r='11' fill='%23ffb703'/%3E%3C/svg%3E" alt="Зображення 1">
    <p class="value">saturate(0.15)</p>
  </div>
  <div class="image-container">
    <img class="image image1" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200' viewBox='0 0 40 40' preserveAspectRatio='none'%3E%3Crect width='40' height='40' fill='%23e63946'/%3E%3Crect y='20' width='40' height='20' fill='%232a9d8f'/%3E%3Ccircle cx='20' cy='20' r='11' fill='%23ffb703'/%3E%3C/svg%3E" alt="Зображення 2">
    <p class="value">saturate(0.45)</p>
  </div>
  <div class="image-container">
    <img class="image image2" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200' viewBox='0 0 40 40' preserveAspectRatio='none'%3E%3Crect width='40' height='40' fill='%23e63946'/%3E%3Crect y='20' width='40' height='20' fill='%232a9d8f'/%3E%3Ccircle cx='20' cy='20' r='11' fill='%23ffb703'/%3E%3C/svg%3E" alt="Зображення 3">
    <p class="value">saturate(1)</p>
  </div>
</div>

CSS

#description {
  background-color: #f2f2f2;
  padding: 20px;
  font-family: Arial, sans-serif;
  margin-bottom: 20px;
}

.image-container {
  display: inline-block;
  text-align: center;
  margin-right: 20px;
}

.image {
  width: 200px;
  height: 200px;
}

.value {
  margin-top: 10px;
  font-family: Arial, sans-serif;
}

.image0 {
  filter: saturate(0.15);
}

.image1 {
  filter: saturate(0.45);
}

.image2 {
  filter: saturate(1);
}
автор: Bond

HTML

<div id="description">
  <h2>Приклад 1: зміна насиченності елемента</h2>
  <p>Наведіть курсор на квадрат, щоб побачити ефект функції saturate().</p>
</div>

<div id="result">
  <img class="image" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200' viewBox='0 0 40 40' preserveAspectRatio='none'%3E%3Crect width='40' height='40' fill='%23e63946'/%3E%3Crect y='20' width='40' height='20' fill='%232a9d8f'/%3E%3Ccircle cx='20' cy='20' r='11' fill='%23ffb703'/%3E%3C/svg%3E" alt="Зображення 1">
</div>

CSS

#description {
  background-color: #f2f2f2;
  padding: 20px;
  font-family: Arial, sans-serif;
  margin-bottom: 20px;
}

.image {
  width: 200px;
  height: 200px;
  transition: filter 0.5s ease;
}

.image:hover {
  filter: saturate(0.5);
}
автор: Bond

Верхній ряд — сходинка насиченості від 0 до 4: видно, як після ~2 півтони злипаються, а канали впираються в межу. Далі — доказ, що saturate(0) і grayscale(1) дають однакову картинку, сірий блок, якому насиченість накрутити неможливо, доказ того, що після grayscale(1) фільтр уже безсилий, пара з переставленими saturate() і brightness() та невалідний saturate(-1), який гасить і розмиття поруч.

HTML

<p class="head">filter: saturate(N) — та сама смуга під різними значеннями:</p>
<div class="col">
    <div class="strip v0">0</div>
    <div class="strip v05">0.5</div>
    <div class="strip v1">1 — як було</div>
    <div class="strip v15">1.5</div>
    <div class="strip v2">2</div>
    <div class="strip v3">3</div>
    <div class="strip v4">4</div>
</div>

<p class="head">saturate(0) і grayscale(1) — та сама картинка:</p>
<div class="row">
    <span class="tile v0">saturate(0)</span>
    <span class="tile gs">grayscale(1)</span>
</div>

<p class="head">Із сірого насиченість не витягнути жодним множником:</p>
<div class="row">
    <span class="tile gray">сірий, без фільтра</span>
    <span class="tile gray s5">сірий + saturate(5)</span>
</div>

<p class="head">Після grayscale(1) жоден saturate() уже нічого не змінює:</p>
<div class="row">
    <span class="tile o1">grayscale(1)</span>
    <span class="tile o2">grayscale(1) saturate(3)</span>
</div>

<p class="head">А ось де порядок вирішує все: saturate(3) спершу впирає канали
    в межу, і подальше затемнення працює вже з обрізаним:</p>
<div class="row">
    <span class="tile o3">saturate(3) brightness(0.6)</span>
    <span class="tile o4">brightness(0.6) saturate(3)</span>
</div>

<p class="head">saturate(-1) — відкинуто ВЕСЬ список, разом із blur(2px):</p>
<div class="row">
    <span class="tile bad">saturate(-1) blur(2px)</span>
    <span class="tile good">saturate(1) blur(2px)</span>
</div>

CSS

.head {
    margin: 18px 0 6px;
    color: #5a6472;
    font-size: .9em;
}

.col {
    display: flex;
    flex-direction: column;
    gap: 3px;
}

.row {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
}

.strip {
    display: flex;
    align-items: center;
    width: 420px;
    max-width: 100%;
    height: 34px;
    padding-left: 8px;
    background: linear-gradient(90deg, #c0392b, #f2b134 35%, #3a9a4f 65%, #2f6fd0);
    color: #fff;
    font: 600 12px/1 ui-monospace, monospace;
    text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
}

.tile {
    display: flex;
    align-items: flex-end;
    width: 150px;
    height: 78px;
    padding: 6px;
    background: linear-gradient(135deg, #c0392b, #f2b134 50%, #2f6fd0);
    color: #fff;
    font: 600 11px/1.25 ui-monospace, monospace;
    text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
}

.v0 { filter: saturate(0); }
.v05 { filter: saturate(0.5); }
.v1 { filter: saturate(1); }
.v15 { filter: saturate(1.5); }
.v2 { filter: saturate(2); }
.v3 { filter: saturate(3); }
.v4 { filter: saturate(4); }

.gs { filter: grayscale(1); }
.gray { background: #808080; }
.s5 { filter: saturate(5); }

.o1 { filter: grayscale(1); }
.o2 { filter: grayscale(1) saturate(3); }
.o3 { filter: saturate(3) brightness(0.6); }
.o4 { filter: brightness(0.6) saturate(3); }

.bad {
    filter: saturate(-1) blur(2px);
    outline: 2px dashed #d64545;
}

.good {
    filter: saturate(1) blur(2px);
    outline: 2px dashed #3a9a4f;
}
автор: NagarD

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле веде сходинками (розділ → тип → сторінка), а хибний ключ підкреслить хвилею.
[[!sandbox/S0oh1hBm]] Живий приклад окремим рядком — саме вікно результату. Той самий ключ зі знаком !: наберіть [[! і дійдіть сходинками до потрібної сторінки, список покаже її приклади.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Правка
Зворотний зв'язок
Вхід