filter

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

Кілька функцій, як-от blur() та contrast(), дозволяють досягнути наперед визначених ефектів.

Спробуйте його в дії

Синтаксис

/* Значення <filter-function> */
filter: blur(5px);
filter: brightness(0.4);
filter: contrast(200%);
filter: drop-shadow(16px 16px 20px blue);
filter: grayscale(50%);
filter: hue-rotate(90deg);
filter: invert(75%);
filter: opacity(25%);
filter: saturate(30%);
filter: sepia(60%);

/* URL-адреса */
filter: url("filters.svg#filter-id");

/* Декілька фільтрів */
filter: contrast(175%) brightness(3%);
filter: drop-shadow(3px 3px red) sepia(100%) drop-shadow(-3px -3px blue);

/* Фільтр не використовується */
filter: none;

/* Глобальні значення */
filter: inherit;
filter: initial;
filter: revert;
filter: revert-layer;
filter: unset;

Для застосування функції пишіть так:

filter: <filter-function> [<filter-function>]* | none;

Щоб скористатися фільтровим елементом SVG, застосуйте url(). Використовується наступний синтаксис:

filter: url(file.svg#filter-element-id);

Функції

Властивість filter може бути задана як none або однією чи кількома з наведених нижче функцій. Якщо параметр будь-якої функції є невалідним, вона повертає none. За винятком випадків, зазначених окремо, функції, які приймають значення у відсотках (наприклад, 34%), також можуть приймати їх у вигляді дробів (наприклад, 0.34).

Якщо значення властивості filter містить кілька функцій, фільтри застосовуються у зазначеному порядку.

blur()

Застосовує до вхідного зображення Гаусове розмиття.

filter: blur(5px);
brightness()

Застосовує до вихідного зображення лінійний множник, змінюючи його яскравість. Значення є лінійними множниками ефекту: 0% створює повністю чорне зображення, 100% ніяк не діє, а значення понад 100% роблять зображення яскравішим.

filter: brightness(2);
contrast()

Регулює контрастність вихідного зображення. Значення 0% перетворює його на сіре, 100% ніяк не діє, а значення понад 100% підвищують контрастність.

filter: contrast(200%);
drop-shadow()

Застосовує параметр <shadow> як тінь, яка повторює контури зображення. Синтаксис тіні подібний до <box-shadow> (значення, визначеного в модулі Фонових зображень і меж CSS), за винятком того, що ключове слово inset і параметр spread не підтримуються. Як і в разі всіх інших значень властивості filter, будь-які фільтри після drop-shadow() застосовуються до тіні.

filter: drop-shadow(16px 16px 10px black);
grayscale()

Перетворює зображення на відтінки сірого. Значення 100% робить зображення повністю сірим. Початкове значення 0% залишає вихідне зображення незмінним. Значення між 0% і 100% є лінійними множниками ефекту.

filter: grayscale(100%);
hue-rotate()

Застосовує обертання відтінків. Значення <angle> визначає кількість градусів, на яку зсуваються вихідні дані. Значення 0deg залишає вихідне зображення незмінним.

filter: hue-rotate(90deg);
invert()

Інвертує зразки вихідного зображення. Значення 100% повністю інвертує зображення. Значення 0% залишає його незмінним. Значення між 0% і 100% створюють лінійні множники для застосування ефекту.

filter: invert(100%);
opacity()

Застосовує прозорість. Значення 0% робить зображення повністю прозорим, а 100% залишає без змін.

filter: opacity(50%);
saturate()

Насичує зображення: 0% робить його повністю ненасиченим, 100% залишає без змін, а значення понад 100% збільшують насиченість.

filter: saturate(200%);
sepia()

Перетворює зображення на сепію: значення 100% робить його повністю сепійним, а 0% не вносить жодних змін.

filter: sepia(100%);

Комбінування функцій

Можна комбінувати для зміни візуалізації будь-яку кількість функцій. Фільтри застосовуються в порядку їх оголошення. Наступний приклад покращує контрастність і яскравість зображення:

filter: contrast(175%) brightness(103%);

Інтерполяція

Під час анімації, якщо початковий і кінцевий фільтри мають однакову кількість функцій без url() в однаковому порядку, кожна функція буде інтерпольована відповідно до її специфічних правил.

Якщо списки фільтрів мають різну довжину, відсутні функції з довшого списку додаються до кінця коротшого, використовуючи початкові значення без змін. Потім всі фільтри інтерполюються згідно з правилами функцій. В іншому випадку застосовується дискретна інтерполяція.

Формальне визначення

Формальний синтаксис

none | <filter-function-list>

де
<filter-function-list> = [ <filter-function> | <url> ]+

де
<filter-function> = <blur()> | <brightness()> | <contrast()> | <drop-shadow()> | <grayscale()> | <hue-rotate()> | <invert()> | <opacity()> | <saturate()> | <sepia()>

де
<blur()> = blur( <length> )
<brightness()> = brightness( <number-percentage> )
<contrast()> = contrast( [ <number-percentage> ] )
<drop-shadow()> = drop-shadow( <length>{2,3} <color>? )
<grayscale()> = grayscale( <number-percentage> )
<hue-rotate()> = hue-rotate( <angle> )
<invert()> = invert( <number-percentage> )
<opacity()> = opacity( [ <number-percentage> ] )
<saturate()> = saturate( <number-percentage> )
<sepia()> = sepia( <number-percentage> )

де
<number-percentage> = <number> | <percentage>
<color> = <rgb()> | <rgba()> | <hsl()> | <hsla()> | <hwb()> | <lab()> | <lch()> | <hex-color> | <named-color> | currentcolor | <deprecated-system-color>

де
<rgb()> = rgb( <percentage>{3} [ / <alpha-value> ]? ) | rgb( <number>{3} [ / <alpha-value> ]? ) | rgb( <percentage>#{3} , <alpha-value>? ) | rgb( <number>#{3} , <alpha-value>? )
<rgba()> = rgba( <percentage>{3} [ / <alpha-value> ]? ) | rgba( <number>{3} [ / <alpha-value> ]? ) | rgba( <percentage>#{3} , <alpha-value>? ) | rgba( <number>#{3} , <alpha-value>? )
<hsl()> = hsl( <hue> <percentage> <percentage> [ / <alpha-value> ]? ) | hsl( <hue>, <percentage>, <percentage>, <alpha-value>? )
<hsla()> = hsla( <hue> <percentage> <percentage> [ / <alpha-value> ]? ) | hsla( <hue>, <percentage>, <percentage>, <alpha-value>? )
<hwb()> = hwb( [<hue> | none] [<percentage> | none] [<percentage> | none] [ / [<alpha-value> | none] ]? )
<lab()> = lab( [<percentage> | <number> | none] [ <percentage> | <number> | none] [ <percentage> | <number> | none] [ / [<alpha-value> | none] ]? )
<lch()> = lch( [<percentage> | <number> | none] [ <percentage> | <number> | none] [ <hue> | none] [ / [<alpha-value> | none] ]? )

де
<alpha-value> = <number> | <percentage>
<hue> = <number> | <angle>

Приклади

Застосування функцій фільтра

Властивість filter застосовується до другого зображення, яке разом зі своєю межею стає сірим і розмитим.

img {
  border: 5px solid yellow;
}
/* Робить друге зображення сірим на 40% і розмитим на 5px */
img:nth-of-type(2) {
  filter: grayscale(0.4) blur(5px);
}
<img src="pencil.jpg" alt="Оригінальне зображення різке" />
<img src="pencil.jpg" alt="Зображення та межа розмиті й приглушені" />

Повторення функцій фільтра

Функції фільтра застосовуються у порядку їх появи. Ту саму функцію фільтра можна повторювати.

#MDN-logo {
  border: 1px solid blue;
  filter: drop-shadow(5px 5px 0 red) hue-rotate(180deg) drop-shadow(5px 5px 0
        red);
}

Фільтри застосовуються по черзі. Саме тому тіні різних кольорів: відтінок першої тіні змінюється функцією hue-rotate(), а друга тінь залишається без змін.

Специфікації

Сумісність із браузерами

desktop mobile
Chrome Edge Firefox Internet Explorer Opera Safari WebView Android Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet
filter
Chrome Full support 53
Edge Full support 12
Firefox Full support 35
Internet Explorer No support Ні
footnote
Opera Full support 40
Safari Full support 9.1
WebView Android Full support 53
Chrome Android Full support 53
Firefox for Android Full support 35
Opera Android Full support 41
Safari on iOS Full support 9.3
Samsung Internet Full support 6.0
On SVG elements
Chrome No support Ні
Edge No support Ні
Firefox Full support 35
Internet Explorer No support Ні
Opera No support Ні
Safari No support Ні
WebView Android No support Ні
Chrome Android No support Ні
Firefox for Android Full support 35
Opera Android No support Ні
Safari on iOS No support Ні
Samsung Internet No support Ні

Дивіться також