Сервис развивается: тестируем формат, собираем идеи, улучшаем сервис. Есть идеи?

Написать
Войти
Дайджесты
Иллюстрация к реализации интерфейса Liquid Glass 2.0 на CSS

Liquid Glass 2.0 в CSS: реализация эффекта Liquid Aqua на современных веб-стандартах

Разбор стилистики веб-интерфейсов Liquid Glass 2.0 (Liquid Aqua) от Apple средствами чистого CSS. Использование свойства backdrop-filter, подмешивание насыщенности, кастомных переменных через @property, темных разделяющих границ и отработка активных состояний без тяжелых JS-скриптов.

Liquid Glass 2.0 в CSS: реализация эффекта Liquid Aqua на современных веб-стандартах

Дизайн веб-интерфейсов переживает очередную эволюцию эстетики стеклянных элементов (Glassmorphism). На смену первому поколению «плоского стекла» Liquid Glass 1.0, страдавшему от низкой контрастности и размытия текста на светлых фонах, приходит обновленная стилистика — Liquid Aqua (Liquid Glass 2.0). Ориентируясь на обновленный дизайн-язык продуктов Apple, веб-разработчики воссоздают эффекты объемного стекла с оптическим преломлением, использованием светотени и контрастных границ исключительно средствами чистого CSS.

Главное преимущество современного подхода — отсутствие необходимости привлекать тяжелые JavaScript-библиотеки или графические холсты Canvas/WebGL. Использование современных CSS-стандартов, таких как @property, backdrop-filter, подмешивание насыщенности saturate() и комбинация составных градиентов позволяет верстать адаптивные интерактивные кнопки и карточки с высокой производительностью рендеринга.

Эволюция стеклянного интерфейса: от 1.0 к Liquid Aqua (2.0)

Первые варианты стеклянных интерфейсов опирались на простое размытие подложки с полупрозрачной белой рамкой. Это создавало проблемы доступности: на неоднородных фоновых изображениях контрастность текста падала ниже допустимых норм WCAG.

Обновленный подход Liquid Aqua решает проблему читаемости за счет трех архитектурных сдвигов:

  • Переход к вертикальному свечению: Вместо диагонального источника света преломление выстраивается строго по вертикали — с ярким бликом по верхнему краю и мягкой тенью снизу.
  • Тёмные боковые разделители: Левая и правая границы элемента оформляются более темными контрастными тонами, отсекающими стеклянная тело от окружающего фона.
  • Подмешивание цветной насыщенности: Вместо нейтрального белого размытия в backdrop-filter добавляется фильтр saturate(), делающий цвета просвечивающего фона более сочными.
┌─────────────────────────────────────────────────────────────┐
│                    Liquid Glass 1.0                         │
│  [Диагональный свет] ──>  Однородное размытие (blur)       │
│  Проблема: размытый текст и слабая читаемость на фото.       │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                   Liquid Aqua (2.0)                         │
│  - Вертикальное свечение (Glow top/bottom)                  │
│  - Тёмные боковые границы (Dark side borders)               │
│  - Усиление насыщенности (backdrop-filter: blur + saturate) │
│  Результат: Четкий визуальный объем и высокий контраст.     │
└─────────────────────────────────────────────────────────────┘

Пошаговый рецепт сборки элемента на CSS

Разработка стеклянной кнопки или карточки должна строиться по принципу прогрессивного улучшения (Progressive Enhancement): сначала создается доступный базовый компонент, и лишь затем поверх него накладываются визуальные фильтры.

Шаг 1. Декларация типизированных переменных через @property

Для управления анимацией и цветами в CSS используются типизированные пользовательские свойства (Typed Custom Properties). В отличие от стандартных CSS-переменных, переменные с синтаксисом @property позволяют браузеру предсказуемо плавно интерполировать цвета и числа во время переходов:

@property --glass-luminance {
  syntax: "<number>";
  inherits: true;
  initial-value: 1;
}

@property --glass-bg-color {
  syntax: "<color>";
  inherits: true;
  initial-value: rgba(255, 255, 255, 0.45);
}
Шаг 2. Базовые стили и фолбэк для старых браузеров

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

.liquid-glass-button {
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 12px 24px;
  font-family: system-ui, -apple-system, sans-serif;
  font-weight: 600;
  color: #0f172a;
  border-radius: 9999px; /* Каплевидная или овальная форма */
  background-color: var(--glass-bg-color);
  border: 1px solid rgba(255, 255, 255, 0.3);
  text-decoration: none;
  transition: transform 0.2s ease, filter 0.2s ease;
}
Шаг 3. Наложение эффектов преломления и градиентного свечения

При поддержке свойства backdrop-filter на элемент накладывается размытие и составной градиент, имитирующий преломление в каплях воды:

@supports (backdrop-filter: blur(10px)) {
  .liquid-glass-button {
    /* Размытие фона и подмешивание сочности цвета */
    backdrop-filter: blur(16px) saturate(180%);
    -webkit-backdrop-filter: blur(16px) saturate(180%);
    
    /* Составной градиент: верхний блик + темные боковые края */
    background-image: 
      linear-gradient(
        to bottom, 
        rgba(255, 255, 255, 0.65) 0%, 
        rgba(255, 255, 255, 0.15) 60%, 
        rgba(240, 240, 250, 0.3) 100%
      ),
      linear-gradient(
        to right,
        rgba(15, 23, 42, 0.15) 0%,
        transparent 15%,
        transparent 85%,
        rgba(15, 23, 42, 0.15) 100%
      );
    
    /* Составная контрастная рамка */
    border-top-color: rgba(255, 255, 255, 0.8);
    border-bottom-color: rgba(15, 23, 42, 0.2);
    border-left-color: rgba(15, 23, 42, 0.15);
    border-right-color: rgba(15, 23, 42, 0.15);
  }
}
Шаг 4. Настройка активных и сенсорных состояний ( & touch)

При нажатии мышью или касании пальцем на сенсорном экране стеклянный элемент должен реагировать прогибом и микросмещением свечения:

.liquid-glass-button:active {
  transform: scale(0.97);
  filter: brightness(0.95);
}

/* Сохранение четкого фокуса для навигации с клавиатуры */
.liquid-glass-button:focus-visible {
  outline: 3px solid #0284c7;
  outline-offset: 2px;
}

На мобильных устройствах на базе iOS для мгновенной отработки псевдокласса :active без задержек тапа веб-разработчики часто добавляют пустой обработчик события ontouchstart="" непосредственно на тег кнопки или контейнер формы.

Доступность (Accessibility) и производительность

Эстетика не должна приноситься в жертву удобству пользователей. При внедрении стилевого решения Liquid Aqua необходимо придерживаться следующих правил:

  1. Контроль контрастности текста: Цвет шрифта должен сохранять коэффициент контрастности не менее 4.5:1 относительно любого подлежащего фона. Если кнопка размещается поверх фотографии, под стеклянный контрол подкладывается темная или светлая плашка.
  2. Учет системных настроек движения: Добавьте медиа-выражение prefers-reduced-motion, чтобы отключать динамические трансформация масштаба для пользователей, чувствительных к укачиванию:
@media (prefers-reduced-motion: reduce) {
  .liquid-glass-button {
    transition: none;
  }
}
  1. Оптимизация производительности: Свойство backdrop-filter создает отдельный слой композитинга на GPU. Не следует применять этот эффект к десяткам элементов одновременно (например, в длинных списках), чтобы не вызывать просадок FPS на бюджетных мобильных смартфонах.

Выводы

Стиль Liquid Aqua (Liquid Glass 2.0) решает главные болячки классического стеклянного дизайна, создавая читаемые, контрастные и эстетически привлекательные элементы UI. Грамотное комбинирование градиентов, backdrop-filter и типовых CSS-переменных позволяет веб-разработчикам создавать передовые интерфейсы на чистых стандартах веб-платформы.