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

Написать
Войти
Дайджесты
Иллюстрация к спецификации CSS Navigation Matching и UX-анализу переключателей тем

Современный веб-дизайн: именование маршрутов и переходов в спецификации CSS Navigation Matching и UX-анализ переключателей тем

Фронтенд-обзор раскрывает черновик спецификации W3C css-navigation-1 от Брамуса Ван Дамма для декларативной стилизации View Transitions через CSS-селекторы @route, @navigation и (). Материал дополнен UX-исследованием Лии Веру о преимуществах 2-позиционных переключателей темы.

Современный веб-дизайн: именование маршрутов и переходов в спецификации CSS Navigation Matching и UX-анализ переключателей тем

Развитие современных веб-стандартов W3C всё сильнее смещает акцент с написания сложного JavaScript-кода в сторону декларативных CSS-инструкций. Разработчики браузерных движков и ведущие интерфейсные архитекторы предлагают готовые решения для задач, ранее требовавших развесистых JS-библиотек.

Настоящий материал объединяет два значимых фронтенд-исследования: черновик спецификации W3C css-navigation-1 от Брамуса Ван Дамма (Bramus Van Damme) для декларативной стилизации навигационных переходов View Transitions и UX-анализ известного инженера Лии Веру (Lea Verou) о проектировании идеального 2-позиционного переключателя темной и светлой темы.

Эволюция веб-стандартов: проблема стилизации переходов страниц в SPA и MPA

Технология View Transitions API произвела революцию в плавных анимациях переходов между страницами как в одностраничных приложениях (SPA), так и в многостраничных сайтах (MPA). Однако до сих пор определение того, какая именно навигация происходит (например, переход от списка товаров к карточке товара или от статьи к главной странице), требовало написания JavaScript-обработчиков событий навигации.

Разработчики были вынуждены вручную вешать CSS-классы на элемент <html> в зависимости от текущего и целевого URL, что усложняло поддержку кода и создавало задержки на исполнение скриптов перед стартом анимации.

Спецификация W3C CSS Navigation Matching: директивы @route и @navigation

Новая спецификация W3C css-navigation-1 решает эту проблему на уровне чистого CSS. Разработчик получает возможность объявлять именованные шаблоны маршрутов с помощью директивы @route и связывать их с правилами переходов через @navigation.

Синтаксис объявления именованных маршрутов в CSS:

/* Объявление шаблонов маршрутов в CSS */
@route catalog "/products/*";
@route product "/products/:id";
@route cart "/cart";

/* Декларативная стилизация перехода от каталога к карточке товара */
@navigation {
    from: catalog;
    to: product;
    ::view-transition-old(root) {
        animation: fade-out 0.25s ease-out;
    }
    ::view-transition-new(root) {
        animation: slide-in-from-right 0.25s ease-in;
    }
}

Благодаря интеграции с синтаксисом паттернов URL (URL Pattern API), браузерный движок самостоятельно сопоставляет текущий и целевой адрес страницы, применяя нужные стили анимации переходов без единой строчки JavaScript.

Псевдоклассы , и псевдоселектор ()

Помимо директив @route, спецификация вводит новые псевдоклассы для стилизации активных ссылок в меню и элемента-источника навигации:

  • Псевдокласс :link-to(pattern): позволяет подсвечивать ссылки в меню, ведущие на определенный именованный маршрут или группу страниц.
  • Псевдокласс :nav-source: автоматически добавляется браузером к элементу (кнопке или ссылке), на который кликнул пользователь для совершения перехода.
  • Псевдокласс :nav-target: применяется к целевой секции новой страницы после завершения навигации, позволяя легко сфокусировать внимание пользователя через индикатор подсветки.

UX-анализ переключателей тем от Лии Веру: почему 2 позиции лучше 3

Параллельно с развитием навигационных спецификаций, известный веб-архитектор Лия Веру опубликовала фундаментальное UX-исследование, посвященное проектированию переключателей цветовых тем (Light / Dark Theme Toggles).

В последние годы на многих сайтах распространились 3-позиционные переключатели (Светлая / Темная / Системная). Анализ Лии Веру доказывает, что данный паттерн создает лишнюю ментальную нагрузку на пользователя и в подавляющем большинстве случаев уступает элегантному 2-позиционному переключателю.

Главные аргументы UX-исследования:

  1. Принцип явного намерения: если пользователь нажимает кнопку переключения темы на конкретном сайте, он хочет переключить текущее состояние (например, сделать сайт светлым в темноте), а не выбирать системный режим.
  2. Путаница с состоянием «Системная»: 3-позиционный переключатель часто маскирует текущее активное состояние. Пользователь не понимает, какая тема включена прямо сейчас, если выбрана опция «Системная».
  3. Оптимальный UX 2-позиционного тумблера: 2-позиционный переключатель должен по умолчанию следовать системной теме пользователя, а при клике явно переключать тему на противоположную с сохранением пользовательского выбора в localStorage.

Архитектура системного переключателя тем на CSS и JavaScript

На основе выходов исследования Лии Веру предлагается следующая минималистичная и надежная архитектура 2-позиционного переключателя тем:

// Минималистичный и доступный 2-позиционный переключатель темы
const toggleBtn = document.querySelector("#theme-toggle");

// Определение текущего режима с учетом системной настройки и явного переопределения
function getPreferredTheme() {
    const saved = localStorage.getItem("theme");
    if (saved) return saved;
    return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
}

function applyTheme(theme) {
    document.documentElement.setAttribute("data-theme", theme);
    toggleBtn.setAttribute("aria-label", theme === "dark" ? "Включить светлую тему" : "Включить темную тему");
}

// Первоначальная установка
applyTheme(getPreferredTheme());

toggleBtn.addEventListener("click", () => {
    const current = document.documentElement.getAttribute("data-theme");
    const next = current === "dark" ? "light" : "dark";
    localStorage.setItem("theme", next);
    applyTheme(next);
});

В сочетании с CSS-переменными такой подход обеспечивает мгновенную смену темы без мерцания (FOUC — Flash of Unstyled Content) и уважает настройки операционной системы пользователя.

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

Спецификация W3C css-navigation-1 и UX-анализ переключателей тем Лии Веру иллюстрируют общую эволюцию веб-разработки 2026 года. Веб становится более декларативным, производительным и прижатым к нуждам реального пользователя. Перекладывание логики навигации на CSS и упрощение интерфейсных элементов делают сайты быстрее, доступнее и удобнее для миллионов людей.