Эффект стекла в CSS
Собираем матовое стекло и сразу проверяем то, на чём этот стиль чаще всего ломается: читается ли надпись поверх него. Примерить его можно на своей картинке и сразу на трёх образцах — карточке, липкой шапке и кнопке.
Прокрутите — под шапкой поедет фон. Стекло на липкой шапке ведёт себя иначе, чем на карточке: читаемость меняется на ходу.
Заголовок карточки
Обычный текст на стекле. Именно он и подводит: заголовок крупный и держится, а строка помельче пропадает над светлым куском фона.
Ниже кнопка из того же стекла.
Дальше просто место, чтобы фон проехал под шапкой целиком и худшее положение нашлось.
Картинку можно перетащить прямо на предпросмотр или вставить из буфера. Она разбирается в браузере и никуда не уходит. «Пёстрый» — трудный случай: пятна от почти белого до почти чёрного. Ровный градиент прощает любые настройки, а такой фон нет.
Приём, о котором забывают: без него стекло выходит блёклым, потому что размытие само по себе гасит цвет.
Читается ли надпись
Считаем так же, как рисует браузер: размываем фон, применяем saturate, кладём сверху полупрозрачную заливку — и меряем контраст надписи по каждой точке под ней. Порог 4,5:1 из WCAG 2.1 для обычного текста.
Готовый код
Свойство backdrop-filter работает в Chrome, Edge
и Safari, а в Firefox — с версии 103, вышедшей в 2022 году. Префикс
-webkit- нужен установленным сборкам Safari, и стоит он ничего.
Отрисовка платная: браузер заводит отдельный слой и пересчитывает размытие
при каждой прокрутке, поэтому вешать стекло на десятки карточек в длинном
списке не стоит.
Липкая шапка стоит на месте, а фон под ней проезжает целиком. Над тёмным куском надпись держится, над светлым пропадает, и заметить это на неподвижном предпросмотре нельзя. Мы прогоняем шапку по всей высоте фона и показываем худшее положение, а не первое попавшееся.
Стекло вешают поверх собственного баннера, а примеряют его обычно на чужих снимках. Загрузите свою картинку: она разбирается в браузере и никуда не уходит. Рядом есть готовые фоны, включая пёстрый — с пятнами от почти белого до почти чёрного. Ровный градиент прощает любые настройки, такой фон не прощает ничего.
Если надпись не проходит порог, нажмите «Подобрать непрозрачность». Мы найдём наименьшее значение, при котором текст читается на всех трёх образцах сразу. Наименьшее важно: чем выше непрозрачность, тем меньше в стекле остаётся стекла. Когда порог недостижим даже при сплошной заливке, инструмент так и скажет, вместо того чтобы молча упереться в предел.
Браузер без поддержки backdrop-filter покажет полупрозрачную
заливку поверх фона, и карточка провалится. В выдаче стоит блок
@supports со сплошным цветом, подобранным под ваш же фон: это
средний цвет стекла над ним. Отдельно идёт правило для системной настройки
prefers-reduced-transparency.
Свойство поддерживают Chrome, Edge и Safari, а Firefox с версии 103, вышедшей
в 2022 году. Префикс -webkit- нужен установленным сборкам Safari
и не стоит ничего, поэтому в коде он стоит всегда. Отрисовка платная: браузер
заводит отдельный слой и пересчитывает размытие при прокрутке, так что стекло
на десятках карточек длинного списка заметно съедает частоту кадров.
Готовые правила выгружаются в CSS, в примесь SCSS, в набор классов Tailwind и в размётку HTML. Цвета стекла удобно подбирать палитрой из изображения по тому же баннеру, а проверить пару «текст и фон» отдельно поможет код цвета HTML.
Другие инструменты
Просмотр исходного кода страницы
Исходный HTML страницы глазами робота Яндекса или Google
Визуальный HTML-редактор
Пишете как в текстовом редакторе — получаете готовый HTML
Код цвета HTML
Код цвета в HEX, RGB, HSL и HSB, с проверкой контраста
Конвертер CSS в SCSS и обратно
CSS в SCSS со вложенностью и обратно, со сверкой результата