Фильтры применяются по очереди, слева направо: каждый следующий работает с результатом предыдущего. Порядок в строке — часть настройки, а не оформление. У backdrop-filter список тот же самый, но обрабатывается то, что находится ПОЗАДИ элемента.
/tool/css-filter-generator/ работает считает браузер
Слева ползунки и готовые наборы, справа картинка и строка filter — она держится в кадре, пока вы крутите настройки, и скроллить вверх за результатом не нужно. Свой файл можно бросить прямо на картинку: он останется в браузере. Готовую картинку ниже можно скачать файлом.
Слева настройки, справа картинка и готовая строка: она остаётся в кадре, пока вы прокручиваете ползунки. Значения по умолчанию ничего не меняют и в строку не попадают. Превью красится ровно тем, что вы скопируете.
Файл читает сам браузер. Ни байта не уходит на сервер.
Подойдёт JPEG, PNG, WebP, GIF или SVG до 15 МБ.
Готовые наборы
Миниатюра — та же картинка, что стоит в превью, уже под этим набором.
Считает браузер. Картинка читается через FileReader и живёт только в этой вкладке: после загрузки страницы сетевых запросов нет ни одного — это видно в панели разработчика. Настройки складываются в хвост адреса, поэтому ссылку на подобранный набор можно переслать. Своей картинки в ссылке нет.
Браузер рисует ту же картинку в canvas той же строкой фильтров и отдаёт файл ссылкой из памяти вкладки. Ни один байт при этом никуда не уходит.
Возьмите образец, похожий на вашу задачу, или бросьте свой файл прямо на картинку. На пейзаже, коже и скриншоте интерфейса одни и те же значения выглядят по-разному.
Крутите ползунки в левом столбце и смотрите направо: картинка и строка filter держатся в кадре, пока вы прокручиваете настройки. Начните с контраста и насыщенности — они меняют картинку сильнее всего. Размытие ставьте последним: под ним не видно, что делают остальные.
Включите шторку, когда кажется, что «уже хорошо». Половина набора обычно оказывается лишней, и видно это только рядом с исходником.
Переставьте фильтры в строке, если результат не сходится: браузер применяет их слева направо, и blur(4px) grayscale(1) не равно grayscale(1) blur(4px).
Прозрачность и drop-shadow проверяйте на шахматке. На белом фоне полупрозрачный кадр выглядит просто светлее, а тень по контуру — просто размытой.
Скопируйте код кнопкой рядом со строкой. Ссылка со всеми значениями — кнопкой «Скопировать ссылку», а готовая картинка файлом собирается ниже, в разделе «Картинка файлом».
filter: blur(px) brightness(%) contrast(%) drop-shadow(x y radius color) grayscale(%) hue-rotate(deg) invert(%) opacity(%) saturate(%) sepia(%)
Фильтры применяются по очереди, слева направо: каждый следующий работает с результатом предыдущего. Порядок в строке — часть настройки, а не оформление. У backdrop-filter список тот же самый, но обрабатывается то, что находится ПОЗАДИ элемента.
Исходные данные — те же, что стоят в полях по умолчанию: их можно пересчитать в уме и убедиться, что инструмент не врёт.
Яркость, контраст и насыщенность остались на 100 %, оттенок на 0deg — это нейтральные значения, они ничего не меняют и в строку не попадают.
Сдвинуты два фильтра плюс тень, они и составят правило: blur(2px) grayscale(100%) drop-shadow(2px 4px 6px rgba(0, 0, 0, 0.45)).
Тень идёт последней не для красоты. drop-shadow строит силуэт по тому, что осталось от картинки после предыдущих фильтров. Поставьте его первым — тень ляжет по резкому контуру, а сама картинка окажется размытой: силуэт и предмет разойдутся.
filter: blur(2px) grayscale(100%) drop-shadow(2px 4px 6px rgba(0, 0, 0, 0.45));
Никуда. Файл читается функцией FileReader прямо в браузере и превращается в строку data:, которую видит только эта вкладка. Скачивание тоже собирается на месте: браузер рисует картинку в canvas с тем же ctx.filter и отдаёт файл ссылкой из памяти. Сетевых запросов у страницы после загрузки нет вовсе.
drop-shadow повторяет контур непрозрачных пикселей: у PNG с вырезанным предметом и у SVG тень получится по силуэту. box-shadow всегда рисует прямоугольник блока со скруглениями. Ещё расходится растушёвка: в box-shadow радиус размытия примерно вдвое шире, чем то же число в drop-shadow, поэтому переносить значения между ними один в один нельзя.
Цепочкой invert → sepia → saturate → hue-rotate → brightness → contrast. Каждый фильтр по отдельности такого не умеет, а вместе они переводят чёрный пиксель почти в любой цвет. Аналитически цепочка не обращается, поэтому значения подбираются численно — это и делает вкладка «Перекрасить чёрную иконку». Промах показан в тысячных OKLab: ниже единицы разницу не видно даже вплотную. Приём работает с одноцветной графикой; цветную картинку он сначала гасит brightness(0) и красит целиком.
Потому что любое значение filter, кроме none, делает элемент содержащим блоком для потомков с position: fixed. Такой потомок начинает позиционироваться относительно отфильтрованного предка, а не окна. То же самое делают transform и will-change.
filter обрабатывает сам элемент вместе с содержимым. backdrop-filter обрабатывает то, что находится позади элемента, — так делают матовое стекло. Значения у них одинаковые, применение разное. И у backdrop-filter есть условие: у элемента должен быть хотя бы наполовину прозрачный фон, иначе размывать будет нечего — сплошная заливка просто закроет фон собой.
Tailwind собирает фильтры не строкой, а набором CSS-переменных, которые подставляются в свойство filter в своём, зафиксированном порядке. Классы можно переставлять как угодно — на результат это не повлияет. Если порядок важен, берите вывод в обычном CSS или пишите весь filter одним произвольным значением.
Размытие — самый дорогой из них: браузер пересчитывает всю площадь элемента. Один статичный blur обычно незаметен, blur на большом блоке в анимации — заметен почти всегда. backdrop-filter дороже обычного filter, потому что браузер сначала собирает то, что позади. Остальные фильтры дешевле, но каждый добавляет отдельный проход отрисовки.
Считает clamp() для кегля или отступа между двумя ширинами экрана.
Открыть