CSS filter — графічні фільтри: розмиття, ч/б, контраст


CSS властивість filter визначає, які візуальні ефекти застосувати до елемента, наприклад, розмиття чи контраст. Найчастіше застосовується до елемента <img>).

автор: NagarD

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

автор: NagarD

Нотатка

Щоб використовувати кілька фільтрів, кожен фільтр потрібно розділити з пропуском.

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

Chrome, Opera і Safari підтримують властивість -webkit-filter.

автор: NagarD

Синтаксис

filter: none | blur() | brightness() | contrast() | drop-shadow() | grayscale() | hue-rotate() | invert() | opacity() | saturate() | sepia() | url();

Властивість filter може отримувати 14 значень:

none

Ефекти відсутні. Без задання.

автор: NagarD

blur(px)

Задає розмиття. Чим більше значення, тим більше розмиття.

Якщо значення не вказано, використовується 0. Від'ємне значення заборонено.

автор: NagarD

brightness(%)

Яскравість зображення:

  • 0% зробить зображення повністю чорним.

  • 100% (1) Зображення залишиться без змін. Без задання.

  • Значення більше за 100% зробить зображення більш світлим.

автор: NagarD

contrast(%)

Контрастность зображення:

  • Значення меньше 100% чи 1 зменьшить контрастність.

  • 100% чи 1 Зображення залишиться без змін. Без задання.

  • Значення більше 100% чи 1збільшить контрастність.

Від'ємне значення не допускається. Пусте значення сприймається як 1.

автор: NagarD

grayscale(%)

Перетворить зображення у чорно-біле.

  • 100% чи 1 - Перетворює зображення в чорно-біле.

  • 0% чи 0- Зображення не змінюється.

  • Від 0% до 100% (або від 0 до 1) змінюють кольорову гамму картинки.

Від'ємні значення заборонені. Порожнє значення сприймається як 0.

автор: NagarD

hue-rotate(deg)

Змінює кольоровість зображення за рахунок повороту відтінку на колірному колі.

  • 0 або 360 градусів залишає зображення незмінним.

  • Будь-які інші значення будуть змінювати колірну гамму.

Від'ємні значенні дозволені. Максимальне значення 360deg. Порожнє значення сприймається як 0deg.

автор: NagarD

invert(%)

Інвертує кольору в зображенні. За своєю дією схоже на перетворення фотографії в негатив.

  • 0% або 0 - Зображення буде без змін.

  • 100% або 1 - Повністю інвертує кольору картинки.

  • Від 0% до 100% або від 0 до 1 - Частково інвертує кольори.

Від'ємні значення заборонені. Порожнє значення сприймається як 0.

автор: NagarD

opacity(%)

Задає ступінь прозорості зображень. За своєю дією схожа на властивість opacity, але деякі браузери для фільтрів застосовують апаратне прискорення щоб підвищити їх продуктивність.

  • 100% або 1 Зображення залишиться без змін.

  • 0% або 0 Зображення стане повністю прозорим.

  • 0% до 100% або від 0 до 1 задає ступінь прозорості зображення.

Від'ємне значення не допускається. Порожнє значення сприймається як 1.

автор: NagarD

saturate(%)

Насиченість кольорів в зображенні.

  • 0% або 0 прибирає насиченість кольорів в зображенні, перетворюючи його в чорно-біле.

  • 100% або 1 залишає зображення незмінним.

  • 100% та більше робить зображення більш насиченими.

Від'ємне значення не допускається. Порожнє значення сприймається як 1.

автор: NagarD

sepia(%)

Перетворює зображення в сепію - так зване чорно-біле зображення з коричневим відтінком. Сепія надає фотографіям старовинний вигляд:

  • 0% або 0 Зображення не змінюється.

  • 100% або 1 Сепія в максимальну силу.

  • 0% до 100% або від 0 до 1 лінійно застосовують сепію.

Від'ємні значення не допускаються. Порожнє значення сприймається як 0.

автор: NagarD

url()

Приймає розташування XML файлу, який визначає SVG фільтр. Посилання, також може включати в себе якір для конкретного фільтра.

Приклад: filter: url(svg-url#element-id)

автор: NagarD

initial

Встановлює властивість у значення без задання

автор: NagarD

inherit

Вказує на спадковість властивості від свого батьківського елемента

автор: NagarD

drop-shadow(h-shadow v-shadow blur spread color)

Застосовується ефект тіні до зображення.

Можливі значення:

  • h-shadow - Обов'язково. Задає значення ширини горизонтальної тіні. Від'ємні значення відобразять тінь зліва від зображення.

  • v-shadow- Обов'язково. Задає значення пікселя для вертикальної тіні. Від'ємні значення відобразять тінь над зображенням.

  • blur - Необов'язково. Це третє значення і воно має бути в пікселях. Додає ефект розмиття тіні. Більше значення буде створювати більше розмиття (тінь стає більшою та світлішою). Від'ємні значення не допускаються. Якщо значення не вказано, використовується 0 (тіні не буде видно).

  • spread - Необов'язково. Це четверте значення і воно має бути в пікселях. Додатнє значення змусить тінь розширюватися, а від'ємні значення змусять тінь скорочуватися. Якщо це значення не вказано, то воно буде 0 (тінь матиме той же розмір, що й елемент). Примітка: Chrome, Safari, Opera можливо й інші браузери, не підтримують це значення.

  • колір - необов'язково. Додає колір тіні. Якщо не вказано, то колір залежить від браузера (найчастіше, тінь буде чорного кольору).

Приклад створення червоної тіні, ширина та висота якої 8px з ефектом розмивання в 10 пікселів:

filter: drop-shadow(8px 8px 10px red);

Підказка: Цей фільтр аналогічний властивості box-shadow.

автор: NagarD

Значення без задання: none
Наслідує: Ні
Анімується: Ні
JavaScript синтаксис: object.style.WebkitFilter="grayscale(100%)"

Переглядачі

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

Приклади

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

Інструмент

Підбирає фільтри наживо й віддає готовий filter.

Генератор CSS-фільтрів — окремою сторінкою, з поясненням пасток.

Праве зображення розмите функцією blur(5px) — ліве для порівняння.

HTML

<img src="/img/logo.svg" alt="чітке">
<img class="blurred" src="/img/logo.svg" alt="розмите">

CSS

img {
    width: 140px;
}

.blurred {
    filter: blur(5px);
}
автор: Svitlana

Праве зображення — те саме, але grayscale(100%) прибирає з нього весь колір.

HTML

<img src="/img/logo.svg" alt="кольорове">
<img class="gray" src="/img/logo.svg" alt="чорно-біле">

CSS

img {
    width: 140px;
}

.gray {
    filter: grayscale(100%);
}
автор: NagarD

Одне й те саме зображення під десятьма різними фільтрами — порівняй кожен з оригіналом.

HTML

<figure><img src="/img/logo.svg" alt=""><figcaption>оригінал</figcaption></figure>
<figure><img class="blur" src="/img/logo.svg" alt=""><figcaption>blur(4px)</figcaption></figure>
<figure><img class="brightness" src="/img/logo.svg" alt=""><figcaption>brightness(0.3)</figcaption></figure>
<figure><img class="contrast" src="/img/logo.svg" alt=""><figcaption>contrast(180%)</figcaption></figure>
<figure><img class="grayscale" src="/img/logo.svg" alt=""><figcaption>grayscale(100%)</figcaption></figure>
<figure><img class="huerotate" src="/img/logo.svg" alt=""><figcaption>hue-rotate(180deg)</figcaption></figure>
<figure><img class="invert" src="/img/logo.svg" alt=""><figcaption>invert(100%)</figcaption></figure>
<figure><img class="opacity" src="/img/logo.svg" alt=""><figcaption>opacity(50%)</figcaption></figure>
<figure><img class="saturate" src="/img/logo.svg" alt=""><figcaption>saturate(7)</figcaption></figure>
<figure><img class="sepia" src="/img/logo.svg" alt=""><figcaption>sepia(100%)</figcaption></figure>
<figure><img class="shadow" src="/img/logo.svg" alt=""><figcaption>drop-shadow</figcaption></figure>

CSS

figure {
    display: inline-block;
    margin: 6px;
    text-align: center;
    font-size: 12px;
}

img { width: 90px; }

.blur       { filter: blur(4px); }
.brightness { filter: brightness(0.30); }
.contrast   { filter: contrast(180%); }
.grayscale  { filter: grayscale(100%); }
.huerotate  { filter: hue-rotate(180deg); }
.invert     { filter: invert(100%); }
.opacity    { filter: opacity(50%); }
.saturate   { filter: saturate(7); }
.sepia      { filter: sepia(100%); }
.shadow     { filter: drop-shadow(8px 8px 10px green); }
автор: NagarD

HTML

<div class="box"> 
  <p>Демонтрація роботи значення filter</p>
  
<label for="select">Задати значення для filter: </label>
<select class="input" id="select">
  <option value="original" name="filter" selected>original</option>
  <option value="blur" name="filter">blur</option>
  <option value="brightness" name="filter">brightness</option>
  <option value="contrast" name="filter">contrast</option>
  <option value="grayscale" name="filter">grayscale</option>
  <option value="huerotate" name="filter">huerotate</option>
  <option value="invert" name="filter">invert</option>
  <option value="opacity" name="filter">opacity</option>
  <option value="saturate" name="filter">saturate</option>
  <option value="sepia" name="filter">sepia</option>
  <option value="shadow" name="filter">shadow</option>
</select> 
</div>

CSS

body{
  font-size: 17px;
  text-align: center;
}
p{
  font-weight: 700;
}
.wrap{
  display: flex;
  justify-content: center;
  flex-wrap: wrap;
}
.block{
  width: 200px;
  height: 200px;
  background-image:  url("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='%23264653'/%3E%3Cpath d='M0 40 12 18 22 30 30 22 40 40Z' fill='%232a9d8f'/%3E%3Ccircle cx='30' cy='9' r='5' fill='%23e9c46a'/%3E%3C/svg%3E");
  margin: 20px;
  display: flex;
  align-items: center;
  justify-content: center;
}
.blur{
    -webkit-filter: blur(4px);
    filter: blur(4px);
}
.brightness {
    -webkit-filter: brightness(0.30);
    filter: brightness(0.30);
}
.contrast {
    -webkit-filter: contrast(180%);
    filter: contrast(180%);
}
.grayscale {
    -webkit-filter: grayscale(100%);
    filter: grayscale(100%);
}
.huerotate {
    -webkit-filter: hue-rotate(180deg);
    filter: hue-rotate(180deg);
}
.invert {
    -webkit-filter: invert(70%);
    filter: invert(70%);
}
.opacity {
    -webkit-filter: opacity(50%);
    filter: opacity(50%);
}
.saturate {
    -webkit-filter: saturate(7);
    filter: saturate(7);
}
.sepia {
    -webkit-filter: sepia(100%);
    filter: sepia(100%);
}
.shadow {
    -webkit-filter: drop-shadow(8px 8px 10px green);
    filter: drop-shadow(8px 8px 10px green);
}

JS

document.querySelectorAll('#select').forEach((el) => el.addEventListener('change', function () {
  var filter = this.value;
  document.querySelectorAll('.box').forEach((n) => n.style.setProperty('filter', filter));
}));
автор: Svitlana

HTML

<div class="box"> 
  <p>Демонтрація роботи значення filter</p>
  
<label for="select">Задати значення для filter: </label>
<select class="input" id="select">
  <option value="original" name="filter" selected>original</option>
  <option value="blur" name="filter">blur</option>
  <option value="brightness" name="filter">brightness</option>
  <option value="contrast" name="filter">contrast</option>
  <option value="grayscale" name="filter">grayscale</option>
  <option value="huerotate" name="filter">huerotate</option>
  <option value="invert" name="filter">invert</option>
  <option value="opacity" name="filter">opacity</option>
  <option value="saturate" name="filter">saturate</option>
  <option value="sepia" name="filter">sepia</option>
  <option value="shadow" name="filter">shadow</option>
</select> 
</div>
<div class="block"></div>

CSS

body{
  font-size: 17px;
  text-align: center;
}
p{
  font-weight: 700;
}
.block{
  width: 200px;
  height: 200px;
  margin: 20px auto;
  background-image:  url("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='%23264653'/%3E%3Cpath d='M0 40 12 18 22 30 30 22 40 40Z' fill='%232a9d8f'/%3E%3Ccircle cx='30' cy='9' r='5' fill='%23e9c46a'/%3E%3C/svg%3E");
}
.blur{
    -webkit-filter: blur(4px);
    filter: blur(4px);
}
.brightness {
    -webkit-filter: brightness(0.30);
    filter: brightness(0.30);
}
.contrast {
    -webkit-filter: contrast(180%);
    filter: contrast(180%);
}
.grayscale {
    -webkit-filter: grayscale(100%);
    filter: grayscale(100%);
}
.huerotate {
    -webkit-filter: hue-rotate(180deg);
    filter: hue-rotate(180deg);
}
.invert {
    -webkit-filter: invert(70%);
    filter: invert(70%);
}
.opacity {
    -webkit-filter: opacity(50%);
    filter: opacity(50%);
}
.saturate {
    -webkit-filter: saturate(7);
    filter: saturate(7);
}
.sepia {
    -webkit-filter: sepia(100%);
    filter: sepia(100%);
}
.shadow {
    -webkit-filter: drop-shadow(8px 8px 10px green);
    filter: drop-shadow(8px 8px 10px green);
}

JS

const block = document.querySelector('.block');
let filter = '';

document.querySelector('#select').addEventListener('change', function () {
  // classList.remove('') кидає помилку, тому порожній фільтр відсіюємо
  if (filter) {
    block.classList.remove(filter);
  }
  filter = this.value;
  if (filter) {
    block.classList.add(filter);
  }
});
автор: Svitlana

Коментарі

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

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

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[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`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

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

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