CSS-графика

CSS-фильтр изображения с выбранными эффектами

Настройте визуальные эффекты CSS-фильтра и получите готовый код.

Живой
предпросмотр эффектов

Настройте параметры CSS-фильтра и сразу оцените визуальный результат на тестовом изображении.

Изображение
Эффекты
CSS

Настройка CSS-фильтра

Меняйте эффекты и получайте готовое свойство filter для изображения.

Предпросмотр CSS-фильтра
Результат
—
После настройки здесь появится готовое CSS-свойство filter.

Онлайн-генератор позволяет сформировать CSS-фильтр изображения с выбранными эффектами для прямой интеграции в таблицы стилей. Инструмент предназначен для визуальной настройки параметров графики и веб-элементов с последующим получением готового CSS-кода свойства filter. Пользователь задает значения цветовой коррекции, размытия, прозрачности или теней, наблюдая изменения на предпросмотре. На выходе формируется точная декларация, готовая к вставке в селектор элемента.

Такой подход решает задачу неразрушающей обработки графического содержимого непосредственно на стороне клиента. Исходные файлы на сервере остаются неизменными, а все визуальные трансформации выполняются браузерным движком в момент рендеринга страницы.

Генератор избавляет от ручного подбора числовых и процентных аргументов для каждой отдельной функции. Настройка охватывает базовые операции модификации пиксельной матрицы и геометрии свечения, которые можно комбинировать в единой цепочке. Сгенерированное правило одинаково применимо к различным типам объектов документа:

  • растровым изображениям в форматах JPG, PNG и других, подключенным через стандартный HTML-тег img;
  • масштабируемым векторным элементам SVG и встроенным иконкам интерфейса;
  • блочным контейнерам с фоновыми изображениями, где требуется изменить отображение как самого фона, так и всего дочернего содержимого.

Использование деклараций таблиц стилей вместо предварительной подготовки дубликатов изображений в графических редакторах сокращает количество запросов к серверу и объем передаваемых данных. Одно исходное изображение может менять яркость, контрастность, насыщенность или цветовую гамму в зависимости от состояния интерфейса, действий пользователя или активной цветовой схемы устройства.

Генератор CSS Filter

Принцип работы генератора и формирование свойства filter

Процесс формирования визуальных эффектов строится на переводе заданных параметров обработки изображения в стандартизированную синтаксическую конструкцию CSS. При настройке интенсивности одного или нескольких преобразований формируется итоговая декларация свойства filter , готовая к переносу в таблицу стилей целевого веб-элемента.

Структура выходного CSS-кода

В спецификации каскадных таблиц стилей за графические модификации элементов отвечает свойство filter . Выходной код представляет собой пару «свойство - значение», завершающуюся точкой с запятой. В зависимости от выбранных параметров правая часть выражения принимает одну из двух базовых форм:

  • ключевое слово none , если ни один эффект не задействован или все показатели приведены к исходному нейтральному состоянию;
  • структурированный список функций <filter-value-list> , в котором каждая отдельная операция записывается со своим аргументом в круглых скобках.

При использовании единственного эффекта запись остается компактной. Если требуется комбинированная обработка, функции выстраиваются в единую строку и разделяются обычным пробелом. Запятые между отдельными функциями в списке <filter-value-list> не ставятся - их наличие приведет к синтаксической ошибке, из-за которой браузер проигнорирует все правило целиком.

/* Базовая структура с одним и несколькими фильтрами */
filter: none;
filter: функция1(аргумент);
filter: функция1(аргумент) функция2(аргумент) функция3(аргумент);

Математический принцип последовательного наложения эффектов

При передаче в свойство filter списка из нескольких функций <filter-value-list> они применяются к изображению не одновременно, а строго поочередно слева направо. С математической точки зрения такая цепочка представляет собой композицию функций, где результат выполнения первой операции становится входным массивом данных для второй.

На техническом уровне это означает пошаговую модификацию пиксельной матрицы изображения:

  • первая функция в списке берет исходную растровую сетку элемента (значения каналов R, G, B и альфа-канала для каждого пикселя) и пересчитывает ее по своему алгоритму;
  • формируется промежуточный буфер изображения с уже измененными цветовыми или пространственными характеристиками;
  • вторая функция в строке кода получает на вход не оригинальную картинку, а этот измененный буфер, и применяет свои вычисления поверх него;
  • процесс повторяется для каждого следующего объявления в цепочке до тех пор, пока не будет выполнена последняя операция, результат которой выводится на экран.

Влияние порядка объявления функций на итоговый результат

Из-за конвейерной обработки пиксельной матрицы перестановка одних и тех же функций с одинаковыми аргументами местами часто дает совершенно разный визуальный результат. Операции фильтрации в большинстве своем некоммутативны: от перемены мест слагаемых в строке filter итоговое изображение меняется.

Зависимость визуального представления от порядка следования функций в коде наглядно проявляется при комбинировании тонирования и обесцвечивания, а также при сочетании цветовых сдвигов и контрастных модификаций:

Порядок функций в свойстве filter Последовательность обработки пиксельной матрицы Итоговое визуальное представление
sepia(100%) grayscale(100%) Сначала пиксели изображения окрашиваются в характерные коричнево-желтые тона, после чего второй фильтр приравнивает цветовые каналы друг к другу, полностью убирая цветовую составляющую из уже тонированной матрицы. Абсолютно черно-белое изображение без какого-либо теплого оттенка. Эффект первой функции полностью перекрывается второй.
grayscale(100%) sepia(100%) Первым шагом удаляется исходная цветовая информация (картинка становится черно-белой), а вторым шагом на полученную монохромную матрицу накладывается тонирование. Изображение в теплых коричневых тонах сепии.
brightness(150%) contrast(200%) Сначала линейно повышается яркость всех пикселей (многие светлые участки приближаются к белому пределу), затем к высветленной матрице применяется сильное растяжение контраста. Изображение с выраженными пересветами в светлых зонах, где детали теряются из-за предварительного сдвига яркости вверх.
contrast(200%) brightness(150%) Сначала темные тона делаются еще темнее, а светлые - светлее относительно исходного среднего уровня, и только после этого общая яркость полученной контрастной картинки поднимается. Более равномерно высветленное изображение с сохранением глубоких проработанных теней, сформированных на первом этапе.

Понимание этого принципа позволяет точно конструировать сложные визуальные эффекты. Если требуется сначала скорректировать базовую экспозицию и контраст фотографии, а затем придать ей легкий цветовой оттенок или размытие, соответствующие функции располагаются в коде именно в такой технологической последовательности.

Функции цветовой и тональной коррекции в CSS

Модификация светотеневого рисунка и цветовой палитры выполняется набором встроенных функций, которые напрямую изменяют значения каналов RGB каждого пикселя элемента. В зависимости от математической модели конкретной операции в качестве аргументов передаются числа <number> , проценты <percentage> или угловые величины <angle> . Каждая функция имеет исходное нейтральное состояние, при котором визуальное представление графики остается без изменений.

Управление яркостью, контрастом и насыщенностью

Базовая тональная коррекция опирается на три функции, работающие как линейные множители с открытым верхним пределом. Для каждой из них значением по умолчанию выступает 100% или 1 .

Функция brightness() применяет линейный множитель к яркости изображения. Передача параметра 0% (или 0 ) полностью гасит свечение пикселей, превращая картинку в абсолютно черное поле. Значения в интервале от 0% до 100% затемняют графику, а показатели свыше 100% - высветляют ее. Например, запись filter: brightness(140%) увеличивает интенсивность свечения всех тонов в 1.4 раза.

Функция contrast() регулирует разницу между самыми светлыми и самыми темными участками изображения. При значении 0% вся цветовая матрица схлопывается в однородную серую заливку со средней яркостью. Показатели меньше 100% смягчают переходы и приглушают тональный разброс, тогда как значения больше 100% усиливают микроконтраст, делая тени глубже, а света - резче.

Функция saturate() управляет интенсивностью цветовых тонов без сдвига общей светлоты кадра. Аргумент 0% полностью удаляет цветовую составляющую, оставляя черно-белое изображение. Значения выше 100% переводят цвета в режим перенасыщения: при saturate(250%) приглушенные пастельные оттенки становятся ярко выраженными и плотными.

Монохромные преобразования и инверсия каналов

Вторая группа функций действует в фиксированном рабочем диапазоне от 0% (или 0 ) до 100% (или 1 ). Исходному состоянию элемента здесь соответствует 0% , так как этот аргумент обозначает нулевую степень наложения эффекта.

  • grayscale() - переводит изображение в оттенки серого путем выравнивания весов цветовых каналов. При 100% графика становится полностью ахроматической, а промежуточные значения (например, grayscale(60%) ) создают эффект частично выцветшей фотографии.
  • sepia() - выполняет монохромное тонирование в теплую коричнево-бежевую гамму, имитирующую архивные фотоснимки. При 100% исходные цвета целиком замещаются шкалой сепии, а меньшие значения добавляют изображению мягкий теплый фильтр.
  • invert() - обращает цветовые каналы в противоположные значения по принципу фотонегатива. Белые участки становятся черными, синие - желтыми, зеленые - пурпурными. Пограничным случаем этой операции выступает аргумент 50% (или 0.5 ): в этой точке встречного движения каналов все пиксели сходятся в середине тональной шкалы, и изображение превращается в сплошной равномерный серый прямоугольник с полной потерей деталей.

Сдвиг оттенка по цветовому кругу

Функция hue-rotate() изменяет цветовой тон пикселей, поворачивая всю палитру изображения по стандартному цветовому кругу на заданный угол <angle> . Яркость и насыщенность цветов при этом сохраняются на прежнем уровне. Нейтральным значением является угол 0deg .

В качестве аргумента используются стандартные угловые единицы измерения CSS:

  • deg - градусы (полный оборот круга составляет 360deg );
  • rad - радианы (полный круг равен приблизительно 6.2832rad );
  • turn - обороты ( 0.5turn поворачивает палитру ровно на половину круга, а 1turn возвращает цвета в исходную точку).

При установке filter: hue-rotate(120deg) все красные оттенки на изображении смещаются в зеленый спектр, зеленые переходят в синий, а синие - в красный. Сходное поведение наблюдается при пошаговом изменении долей оборота, например hue-rotate(0.25turn) сдвигает гамму на прямой угол.

Сводная таблица параметров цветовых и тональных функций

Синтаксические характеристики, рабочие диапазоны и контрольные точки разобранных функций систематизированы в справочной таблице ниже.

Функция Тип параметра Исходное состояние Характер преобразования в крайних и особых точках
brightness() <number> , <percentage> 100% или 1 0% - абсолютно черное изображение; свыше 100% - линейное высветление тонов
contrast() <number> , <percentage> 100% или 1 0% - сплошная серая заливка; свыше 100% - усиление разницы между светом и тенью
saturate() <number> , <percentage> 100% или 1 0% - полное обесцвечивание; свыше 100% - перенасыщение цветовых каналов
grayscale() <number> , <percentage> 0% или 0 Диапазон до 100% ; в верхней точке - полный перевод в черно-белую палитру
sepia() <number> , <percentage> 0% или 0 Диапазон до 100% ; в верхней точке - полное замещение цветов теплой шкалой сепии
invert() <number> , <percentage> 0% или 0 50% - равномерный серый цвет без деталей; 100% - полная инверсия в негатив
hue-rotate() <angle> ( deg , rad , turn ) 0deg ( 0rad , 0turn ) 180deg или 0.5turn - замена цветов на противоположные по кругу; 360deg - возврат к исходным цветам

Пространственные эффекты и прозрачность: blur, opacity и drop-shadow

Помимо модификации цветовых каналов, спецификация включает функции, которые управляют геометрией размытия пиксельной сетки и альфа-каналом элемента. Эти операции изменяют пространственное восприятие объекта, его видимость относительно фона и контурную светотень.

Гауссово размытие с помощью функции blur

Функция blur() применяет к целевому изображению математический алгоритм размытия по Гауссу (Gaussian blur). В результате обработки резкие границы и мелкие детали сглаживаются за счет усреднения цветовых значений соседних точек. В качестве аргумента функция принимает строго тип данных <length> - абсолютные или относительные единицы длины, такие как px , em или rem . Процентные значения для этого фильтра недействительны, так как радиус сглаживания не может вычисляться в долях от габаритов контейнера.

Передаваемое числовое значение определяет радиус стандартного отклонения (standard deviation) в гауссовой функции распределения. Технически этот параметр задает количество пикселей на экране, которые смешиваются друг с другом: чем выше указанный радиус, тем шире зона взаимного проникновения соседних точек и тем сильнее визуальная расфокусировка. Исходным состоянием без искажений является значение 0px .

/* Примеры задания радиуса размытия в разных единицах длины */
filter: blur(0px);     /* Исходное четкое изображение */
filter: blur(5px);     /* Мягкая расфокусировка деталей */
filter: blur(0.75rem); /* Зависимость радиуса от корневого шрифта */

Управление прозрачностью через функцию opacity

Фильтр opacity() изменяет степень прозрачности графического объекта, напрямую воздействуя на его альфа-канал. Рабочий диапазон функции простирается от полной прозрачности до исходной плотности пикселей:

  • Значение 0% (или 0 ) делает элемент полностью невидимым, при этом сам узел продолжает занимать место в разметке.
  • Промежуточные показатели, например 50% (или 0.5 ), создают эффект полупрозрачности, сквозь который проступает нижележащий фон.
  • Значение по умолчанию 100% (или 1 ) сохраняет исходную непрозрачность изображения без изменений.

Визуальный результат работы фильтра filter: opacity() совпадает с действием стандартного CSS-свойства opacity . Ключевое техническое отличие заключается в механизме обработки на уровне браузера: в ряде графических подсистем применение фильтра задействует аппаратное ускорение, что меняет способ композитинга полупрозрачного слоя по сравнению с базовым свойством таблиц стилей.

Синтаксис и параметры контурной тени drop-shadow

Функция drop-shadow() генерирует сдвинутую и размытую копию альфа-маски исходного изображения, окрашенную в заданный цвет и размещенную позади самого объекта. Синтаксическая конструкция принимает набор аргументов, разделенных пробелами: drop-shadow(offset-x offset-y blur-radius color) .

Каждый параметр в объявлении функции отвечает за конкретную геометрическую или цветовую характеристику тени:

  • offset-x (обязательный параметр, тип <length> ) - задает горизонтальное смещение тени по оси X относительно исходного положения объекта.
  • offset-y (обязательный параметр, тип <length> ) - определяет вертикальный сдвиг тени вдоль оси Y.
  • blur-radius (необязательный параметр, тип <length> ) - устанавливает радиус стандартного отклонения для размытия краев тени по алгоритму Гаусса; при значении 0 формируется абсолютно резкий контур, а при пропуске аргумента берется нулевое значение по умолчанию.
  • <color> (необязательный параметр) - определяет оттенок и плотность заливки тени; цвет можно передать в любом стандартном формате CSS, включая HEX, RGB, RGBA, HSL и HSLA.
/* Примеры конфигурации тени с различными цветовыми моделями */
filter: drop-shadow(4px 6px 8px #1a1a1a);
filter: drop-shadow(0px 10px 15px rgba(0, 0, 0, 0.35));
filter: drop-shadow(2px 4px 6px hsla(210, 50%, 20%, 0.5));

Техническое сравнение фильтра drop-shadow и свойства box-shadow

В верстке для создания теней используются два инструмента со схожим набором параметров: фильтр drop-shadow() и блочное свойство box-shadow . Несмотря на внешнее сходство кода, алгоритмы построения теневого контура у них принципиально различаются при работе с графикой, содержащей прозрачные участки, такой как растровые файлы transparent PNG или векторная разметка SVG.

Свойство box-shadow игнорирует внутреннее содержимое графического файла и накладывает тень строго по внешней прямоугольной рамке (bounding box) DOM-элемента. Если на странице размещена иконка сложной формы или фотография объекта с вырезанным фоном, box-shadow очертит вокруг них прямоугольник контейнера <img> . В отличие от него, фильтр drop-shadow() анализирует альфа-маску (alpha shape) самого изображения и строит тень точно по реальному контуру непрозрачных пикселей, повторяя все изгибы графического объекта и пропуская прозрачные зоны.

Различия в геометрии построения и параметрах двух подходов систематизированы в сравнительной таблице:

Критерий сравнения Фильтр filter: drop-shadow() Свойство box-shadow
Геометрическая основа тени Реальный контур непрозрачных пикселей с учетом альфа-маски (alpha shape) Прямоугольная рамка (bounding box) самого DOM-элемента
Работа с transparent PNG и SVG Повторяет силуэт внутреннего объекта, прозрачные области не отбрасывают тень Очерчивает внешний прямоугольный периметр контейнера независимо от прозрачности файла
Принимаемые параметры offset-x , offset-y , blur-radius , <color> Смещения, размытие, цвет, а также растяжение контура и внутренняя тень

Правила синтаксиса, единицы измерения и валидация параметров

При переносе сгенерированного кода в таблицы стилей (stylesheet) необходимо соблюдать синтаксические требования спецификации CSS. Если хотя бы одна функция в цепочке записана с нарушением формата или содержит недопустимую единицу измерения, вся декларация свойства filter признается невалидной и полностью игнорируется при обработке стилей. Значения внутри круглых скобок указываются слитно с единицами измерения (например, 10px , 50% , 90deg ), а между названием функции и открывающей скобкой не допускаются пробелы.

Эквивалентность числовых долей и процентов

Функции модификации цвета, тона и прозрачности допускают два взаимозаменяемых формата записи аргументов: безразмерные числа <number> (десятичные доли) и проценты <percentage> . Такое правило действует для семи функций: brightness() , contrast() , invert() , saturate() , sepia() , grayscale() и opacity() .

Пересчет между форматами линеен: единица в десятичной записи соответствует ста процентам. Так, значение 0.5 математически идентично 50% , значение 1 равно 100% , а полуторное усиление эффекта можно записать как 1.5 или 150% . Нулевое значение допускается указывать без знака процента - запись 0 валидна как для числовых, так и для процентных параметров. Если при ручном редактировании кода оставить скобки пустыми (например, sepia() ), подставляется стандартное значение по умолчанию для конкретной функции.

Для остальных фильтров действуют строгие ограничения по типам данных, исключающие использование процентов:

  • Функция blur() и параметр радиуса размытия blur-radius внутри drop-shadow() принимают только единицы длины <length> ( px , em , rem ). Передача значения в процентах приведет к синтаксической ошибке. Исключение составляет чистый ноль ( blur(0) ), где единицу длины можно опустить.
  • Функция hue-rotate() требует обязательного указания угловых единиц <angle> ( deg , rad , turn ). Запись ненулевого числа без обозначения единицы измерения угла (например, hue-rotate(90) ) делает все свойство нерабочим.

Валидация диапазонов и работа с отрицательными аргументами

Синтаксический анализатор проверяет не только тип единиц измерения, но и попадание числа в допустимый математический диапазон. Большинство визуальных эффектов не имеют физического смысла в отрицательной шкале, поэтому попытка передать значение со знаком минус делает правило недействительным.

Допустимые границы аргументов и реакция на выход за пределы диапазона распределяются по категориям функций следующим образом:

Функция или параметр Допустимый тип данных Отрицательные значения Верхняя граница диапазона
brightness() , contrast() , saturate() <number> или <percentage> Запрещены (вызывают ошибку валидации) Не ограничена (значения свыше 1 или 100% усиливают эффект)
grayscale() , sepia() , invert() , opacity() <number> или <percentage> Запрещены (вызывают ошибку валидации) Ограничена значением 1 ( 100% ); числа выше порога автоматически приводятся к 100%
blur() и параметр blur-radius в drop-shadow() <length> Запрещены (радиус размытия не может быть меньше 0px ) Не ограничена
hue-rotate() <angle> Разрешены (сдвигают тон по цветовому кругу против часовой стрелки) Не ограничена (значения свыше 360deg или 1turn выполняют повторный полный оборот)
Параметры offset-x и offset-y в drop-shadow() <length> Разрешены (смещают тень влево по оси X и вверх по оси Y) Не ограничена

Различие между запретом и автоматическим приведением (clamping) играет важную роль при отладке таблиц стилей. Если указать grayscale(150%) , код останется валидным и отработает как grayscale(100%) . Однако запись brightness(-20%) или blur(-5px) нарушает грамматику свойства, что приводит к полному отключению всех перечисленных в строке фильтров.

Сброс эффектов и глобальные ключевые слова CSS

Для программной отмены ранее наложенных фильтров в каскаде стилей используется базовое ключевое слово none . Декларация filter: none; полностью отключает визуальную обработку и возвращает элемент к исходному отображению. Это значение нельзя комбинировать с другими функциями в одной строке - запись вида filter: none blur(4px); является синтаксической ошибкой.

Помимо специализированных функций и значения none , свойство filter принимает стандартные глобальные ключевые слова CSS, управляющие наследованием и каскадом:

.image-reset {
  filter: none;    /* Полный сброс всех фильтров */
  filter: initial; /* Установка начального значения по спецификации (эквивалентно none) */
  filter: inherit; /* Принудительное наследование значения filter от родительского элемента */
  filter: unset;   /* Сброс к унаследованному или начальному состоянию (действует как initial, так как свойство не наследуется по умолчанию) */
}

По умолчанию свойство filter не является наследуемым (хотя визуально эффект накладывается на родительский контейнер вместе со всеми его дочерними узлами). Если передать дочернему блоку значение inherit , на него будет повторно наложен тот же набор фильтров, который уже применен к родителю, что приведет к удвоению интенсивности визуального эффекта.

Практические сценарии применения сгенерированного кода в верстке

Сгенерированная декларация filter внедряется в таблицы стилей для решения прикладных задач фронтенд-разработки без подготовки дубликатов графических файлов в фоторедакторах. Один исходный ассет может динамически менять визуальное представление в зависимости от действий пользователя, системных настроек устройства или состояния интерфейса.

Интерактивные состояния элементов и плавная анимация

Применение фильтров к псевдоклассам :hover , :focus и :active обеспечивает визуальный отклик интерактивных карточек, кнопок, превью галерей и логотипов партнеров. Типичный паттерн проектирования - отображение изображений в приглушенном или обесцвеченном виде в состоянии покоя с возвратом к исходным цветам либо легким высветлением при наведении курсора или получении фокуса с клавиатуры.

Чтобы смена визуальных состояний происходила плавно, а не скачкообразно, к базовому селектору добавляется свойство transition с указанием filter в качестве анимируемого свойства:

.gallery-card img {
  filter: grayscale(100%) brightness(85%);
  transition: filter 0.3s ease-in-out;
}

.gallery-card:hover img,
.gallery-card:focus-within img {
  filter: grayscale(0%) brightness(105%);
}

.action-button:active {
  filter: brightness(90%) contrast(110%);
}

Для корректной интерполяции промежуточных кадров при использовании transition или ключевых кадров @keyframes рекомендуется придерживаться следующего технического правила: в начальном и конечном состояниях лучше объявлять одинаковый набор функций в идентичном порядке, меняя только их числовые аргументы. Хотя замена цепочки функций на filter: none; также поддерживает плавный переход в современных браузерах, явное указание нулевых или нейтральных значений (например, grayscale(0%) brightness(100%) ) гарантирует предсказуемый математический расчет промежуточных значений при сложных многосоставных фильтрах.

При создании зацикленных или многошаговых эффектов (например, пульсирующего свечения вокруг иконки необычной формы или эффекта постепенного проявления фотографии при загрузке) свойство filter помещается внутрь директивы @keyframes :

@keyframes pulse-glow {
  0%, 100% {
    filter: drop-shadow(0 0 2px rgba(59, 130, 246, 0.4)) brightness(100%);
  }
  50% {
    filter: drop-shadow(0 0 10px rgba(59, 130, 246, 0.9)) brightness(115%);
  }
}

.status-badge {
  animation: pulse-glow 2.5s infinite ease-in-out;
}

Адаптация графики под темную тему интерфейса

При переключении интерфейса в темный режим через медиазапрос @media (prefers-color-scheme: dark) или специальный класс на корневом элементе яркие фотографии и иллюстрации с белым фоном создают избыточный контраст и слепят пользователя. Свойство filter решает обе проблемы на уровне стилей без загрузки отдельных графических файлов для темной темы.

В зависимости от типа графического контента в темной теме применяются два разных подхода:

  • Для растровых фотографий: небольшое снижение яркости ( brightness до 80-90%) в сочетании с легким повышением контраста ( contrast до 105-110%) убирает эффект засветки на темном фоне, сохраняя при этом глубину цветов и естественность снимка.
  • Для схем, графиков, чертежей и скриншотов со светлым фоном: комбинация полной инверсии и разворота цветового круга filter: invert(100%) hue-rotate(180deg); превращает белый фон в черный, а черный текст - в белый. При этом сдвиг фазы цвета на 180 градусов компенсирует искажение цветовой палитры, вызванное инверсией, и возвращает синие, красные или зеленые акценты на диаграммах к оттенкам, близким к исходным.
@media (prefers-color-scheme: dark) {
  /* Приглушение ярких фотографий в статьях */
  .article-photo {
    filter: brightness(85%) contrast(105%);
  }

  /* Инверсия диаграмм и таблиц на белом фоне с сохранением цветовых акцентов */
  .technical-diagram {
    filter: invert(100%) hue-rotate(180deg);
  }
}

Перекрашивание монохромных иконок и векторов

Когда векторная иконка SVG или прозрачный растровый значок PNG подключаются на страницу через тег <img> или свойство background-image , изменить их цвет с помощью стандартных свойств color или fill невозможно. В таких ситуациях перекрасить черную, белую или цветную иконку в нужный корпоративный оттенок можно за счет строго упорядоченной цепочки фильтров.

Процесс трансформации произвольной иконки в заданный цвет строится поэтапно:

  • Сведение к базовому монохрому: функции grayscale(100%) или brightness(0) saturate(100%) полностью убирают исходные цвета и превращают все непрозрачные пиксели элемента в чисто черные.
  • Создание базового цветового тона: функция invert() задает необходимый уровень светлоты (превращая черный в серый нужной интенсивности), после чего sepia(100%) окрашивает серые пиксели в теплый желто-коричневый оттенок. Появление базового цвета необходимо, так как у черно-белых пикселей нулевая насыщенность, и вращение цветового круга на них не действует.
  • Настройка целевого оттенка и насыщенности: функция saturate() многократно усиливает полученный желто-коричневый цвет, а hue-rotate() сдвигает его по цветовому кругу до нужного сектора (синего, зеленого, пурпурного). Завершающие функции brightness() и contrast() доводят светлоту и плотность цвета до точного совпадения с дизайн-макетом.
/* Перекрашивание черной иконки в акцентный синий оттенок */
.icon-primary {
  filter: brightness(0) saturate(100%) invert(32%) sepia(85%) saturate(2250%) hue-rotate(205deg) brightness(98%) contrast(96%);
}

Динамическое управление эффектами через пользовательские свойства CSS

Аргументы внутри функций фильтра могут принимать значения из CSS-переменных (custom properties) через конструкцию var() . Такой подход позволяет вынести всю цепочку фильтров в единое правило, а конкретными параметрами управлять локально - через модификаторы классов, медиазапросы или инлайновые стили, изменяемые с помощью JavaScript (например, при движении ползунка в интерфейсе или прокрутке страницы).

:root {
  --img-blur: 0px;
  --img-brightness: 100%;
  --img-saturate: 100%;
}

.dynamic-banner {
  filter: blur(var(--img-blur)) brightness(var(--img-brightness)) saturate(var(--img-saturate));
  transition: filter 0.2s linear;
}

/* Модификатор для размытия и затемнения фона при открытии модального окна поверх баннера */
.dynamic-banner.is-muted {
  --img-blur: 6px;
  --img-brightness: 60%;
  --img-saturate: 50%;
}

Использование переменных избавляет от необходимости каждый раз дублировать длинную строку из нескольких функций в разных селекторах: достаточно переопределить одну переменную, чтобы изменить только радиус размытия или только яркость, сохранив остальные эффекты цепочки нетронутыми.

Сводная таблица типовых комбинаций фильтров для задач верстки

В таблице ниже систематизированы готовые шаблоны свойства filter для распространенных интерфейсных состояний и визуальных задач:

Прикладная задача Шаблон CSS-кода Технический результат
Неактивный элемент (Disabled state) filter: grayscale(100%) opacity(50%); Полное обесцвечивание и полупрозрачность для визуальной блокировки кнопки или карточки
Отклик при наведении (Hover highlight) filter: brightness(108%) contrast(104%); Легкое высветление и повышение четкости изображения без искажения палитры
Подложка под белый текст filter: brightness(55%) contrast(110%); Затемнение фоновой фотографии для обеспечения читаемости светлых заголовков поверх нее
Обесцвеченные логотипы с заливкой белым filter: brightness(0) invert(100%); Превращение разноцветных логотипов с прозрачным фоном в чисто белые силуэты для темного футера
Винтажная стилизация фото filter: sepia(60%) contrast(115%) brightness(95%); Мягкое теплое тонирование с глубокими тенями для ретро-эффекта
Эффект загрузки превью (Blur-up) filter: blur(12px) saturate(120%); Сглаживание пикселизации сжатой миниатюры до момента подгрузки полноразмерного изображения

Связь с SVG-фильтрами и отличие от свойства backdrop-filter

Стандартные функции CSS filter являются частью единой спецификации Filter Effects, объединяющей обработку стилей HTML-элементов и векторной графики. Встроенные функции вроде регулировки яркости, контраста или размытия представляют собой сокращенные обертки над базовыми графическими примитивами SVG. Когда стандартного набора деклараций недостаточно для реализации нетривиальных искажений или текстурных наложений, свойство filter способно принимать функцию url() .

Подключение XML-примитивов через функцию url

Функция url() связывает CSS-свойство filter с внешним или встроенным в HTML-документ SVG-фильтром по его уникальному идентификатору (например, filter: url(#custom-effect); ). Сами правила обработки описываются в XML-разметке внутри контейнера <defs> и тега <filter> .

Архитектура SVG-фильтров строится на цепочке низкоуровневых примитивов, среди которых выделяются следующие базовые элементы:

  • <feGaussianBlur> - базовый алгоритм размытия, позволяющий задавать разное отклонение по осям X и Y отдельно, в отличие от однородной CSS-функции blur() ;
  • <feColorMatrix> - матричное преобразование цвета, где каждый пиксель пересчитывается через таблицу коэффициентов 5x4 для точного канального смешивания или создания дуотона;
  • <feComponentTransfer> - поканальная коррекция кривых яркости и прозрачности через дочерние функции feFuncR , feFuncG , feFuncB и feFuncA ;
  • <feDropShadow> и связки <feOffset> с <feBlend> - инструменты для формирования многослойных теней и режимов наложения.

В одной декларации CSS допускается комбинировать вызов SVG-фильтра и стандартные функции: filter: url(#noise-texture) contrast(110%) brightness(95%); . Обработка в таком случае идет строго слева направо.

Техническая разница между filter и backdrop-filter

При переносе сгенерированного списка функций в таблицу стилей важно различать область действия свойств filter и backdrop-filter . Оба свойства принимают абсолютно одинаковый набор функций ( <filter-value-list> ), но применяют их к разным графическим слоям.

Свойство filter воздействует непосредственно на сам целевой элемент, включая его растровое или векторное содержимое, фон, рамки, текстовые узлы и все вложенные дочерние элементы. Если применить filter: blur(8px) к карточке с текстом, размоется и фон карточки, и сам текст внутри нее, став нечитаемым.

Свойство backdrop-filter не затрагивает ни сам элемент, ни его внутреннее содержимое. Оно модифицирует исключительно область экрана, которая находится позади целевого блока и просвечивает сквозь него. На этом принципе строится визуальный прием матового стекла (Glassmorphism): поверх фотографии или сложного фона размещается блок с полупрозрачной заливкой (например, через rgba() ) и свойством backdrop-filter: blur(10px) saturate(140%); . В результате фон под блоком размывается, а текст и иконки внутри самого блока остаются идеально четкими.

В таблице ниже систематизированы ключевые различия между прямым и фоновым наложением фильтров:

Критерий сравнения Свойство filter Свойство backdrop-filter
Объект обработки Сам DOM-элемент, его границы и все дочерние узлы Графические слои, расположенные позади элемента в пределах его геометрии
Влияние на внутренний текст и иконки Искажает, размывает или перекрашивает вложенный контент вместе с контейнером Сохраняет вложенный текст и графику в исходном четком состоянии
Требования к фону самого элемента Работает при любом фоне (прозрачном или сплошном) Требует полной или частичной прозрачности фона элемента ( background: transparent или цвет с альфа-каналом), иначе эффект будет перекрыт
Типичная прикладная задача Цветокоррекция фотографий, тени по контуру PNG/SVG, состояния кнопок Модальные окна, фиксированные шапки сайтов, панели с эффектом матового стекла

Поскольку синтаксис функций у обоих свойств идентичен, полученную комбинацию параметров можно использовать как для прямой обработки изображения через filter , так и для стилизации полупрозрачных перекрывающих панелей путем простой замены имени свойства на backdrop-filter .

Особенности браузерного рендеринга, производительность и кроссбраузерность

Обработка свойства filter браузерным движком происходит на этапе композитинга и отрисовки пикселей. Перед наложением визуальных эффектов браузер рендерит целевой узел вместе со всем его содержимым во временный растровый буфер, после чего применяет к полученной текстуре заданные математические преобразования и выводит итоговый результат на экран. Такая механика напрямую влияет на геометрию позиционирования соседних и вложенных элементов в дереве рендеринга.

Влияние на контекст наложения и позиционирование

Присвоение свойству filter любого значения, отличного от none , меняет поведение элемента в общей иерархии слоев документа. Применение фильтра вызывает два важных структурных изменения в верстке:

  • Создание нового контекста наложения (stacking context) - отфильтрованный контейнер группирует все свои дочерние узлы в единый изолированный слой. Значения z-index внутри такого блока работают только относительно друг друга и не могут вывести внутренний элемент поверх внешних блоков, находящихся выше родителя по дереву DOM.
  • Формирование содержащего блока (containing block) - элемент с активным фильтром становится новой точкой отсчета координат для всех своих потомков с position: absolute и position: fixed . Если внутри контейнера с filter разместить модальное окно или панель со свойством position: fixed , такой блок перестанет фиксироваться относительно окна браузера (viewport) и будет позиционироваться строго внутри границ отфильтрованного родителя.

Если по проекту требуется применить визуальный эффект к фоновому контейнеру, внутри которого лежат фиксированные элементы интерфейса, свойство filter лучше переносить на отдельный вложенный слой с изображением или псевдоэлемент, чтобы не нарушать глобальную координатную сетку страницы.

Аппаратное ускорение и оптимизация производительности

Большинство современных браузерных движков переносят вычисления функций filter на GPU, задействуя аппаратное ускорение (hardware acceleration). Цветовые и тональные операции выполняются через пиксельные шейдеры практически без нагрузки на центральный процессор, поскольку каждый пиксель рассчитывается независимо от соседних.

Иначе обстоит дело с пространственными фильтрами - blur() и drop-shadow() . Для вычисления цвета одной точки алгоритму размытия требуется опросить массив соседних пикселей в пределах указанного радиуса. При увеличении радиуса размытия количество выборок растет квадратично, что при обработке крупных контейнеров или при одновременной прокрутке страницы может вызывать падение частоты кадров.

Для сохранения плавной отрисовки интерфейса при динамическом изменении фильтров используют свойство will-change :

.animated-card {
  will-change: filter;
  transition: filter 0.25s ease-out;
}

Объявление will-change: filter заранее сообщает браузерному движку о предстоящей модификации элемента. Браузер заблаговременно выделяет под этот узел отдельный композитный слой в видеопамяти GPU, благодаря чему в момент старта анимации не тратится время на первичную растеризацию и перенос текстуры. При этом назначать will-change всем элементам подряд не рекомендуется, так как избыточное количество композитных слоев быстро расходует оперативную и графическую память устройства, особенно на мобильных экранах с высокой плотностью пикселей.

Кроссбраузерность и вендорные префиксы

Стандартные функции CSS-фильтров поддерживаются всеми актуальными десктопными и мобильными браузерами: Chrome, Firefox, Safari и Edge. В современных версиях этих браузеров свойство работает напрямую без дополнительных настроек.

Для обеспечения обратной совместимости со старыми версиями браузеров на базе движка WebKit (например, ранними сборками Safari и старыми мобильными браузерами на iOS и Android) перед стандартным свойством указывают вендорный префикс -webkit-filter :

.image-effect {
  -webkit-filter: contrast(115%) saturate(120%);
  filter: contrast(115%) saturate(120%);
}

Декларация с префиксом записывается первой, а стандартное свойство filter - следом за ней. Современные браузеры проигнорируют устаревший префикс или переопределят его актуальным правилом, тогда как старые версии WebKit применят нужную цепочку эффектов из первой строки.

Нужен другой
инструмент для графики?

Откройте раздел инструментов для изображений и выберите подходящую обработку.

Все инструменты для изображений