Skip to content

HTML — изменения 2025 года

  • Период: 1 января 2025 — 30 ноября 2025
  • Версии браузеров: Chrome 133–141+, Firefox 134–142+, Safari 18.2–18.6

Обзор года

Период с января по ноябрь 2025 года ознаменовался значительным прогрессом в развитии HTML и веб-платформы. Ключевые темы года:

  • Достижение зрелости Popover API: официальный статус Baseline 27 января 2025
  • Кастомизация элементов форм: appearance: base-select для <select> в Chrome 134
  • Декларативные команды: Invoker Commands API (command и commandfor)
  • Улучшения диалогов: атрибут closedby для <dialog>
  • Развитие Declarative Shadow DOM: достижение зрелости и улучшение качества
  • Interop 2025: фокус на <details>, кастомизируемом <select> и декларативных возможностях

1. Popover API достигает статуса Baseline

1.1 Официальное достижение Baseline

Дата: 27 января 2025 года Статус: Baseline Newly Available

Popover API официально получил статус Baseline Newly available, что означает полную поддержку во всех трёх основных браузерных движках.

Поддержка браузерами:

  • Chrome 114+ — май 2023
  • Safari 17.0+ — сентябрь 2023 (исправление критических багов в январе 2025)
  • Firefox 125+ — апрель 2024

1.2 Предыстория и проблема с первоначальным анонсом

Первоначально Popover API был объявлен достигшим статуса Baseline в апреле 2024 года после внедрения в Firefox. Однако была обнаружена критическая проблема на платформах iOS и iPadOS: функция light dismiss (закрытие поповера кликом или касанием вне его области) не работала на мобильных браузерах Safari.

После исправления бага в Safari статус Baseline Newly available был обновлён на 27 января 2025 года, что стало корректной датой достижения полной межбраузерной совместимости.

1.3 Основная функциональность

Popover API предоставляет встроенный механизм создания различных типов всплывающих элементов. До появления этого API разработчикам требовалось использовать JavaScript и тщательно реализовывать доступность вручную.

Базовый поповер:

html
<button popovertarget="my-popover">Открыть поповер</button>
<div id="my-popover" popover>
    <p>Содержимое поповера</p>
</div>

Ключевые возможности:

  • ✅ Рендеринг в верхнем слое (top layer) без управления z-index
  • ✅ Автоматическое управление фокусом
  • ✅ Light dismiss: закрытие кликом вне области или нажатием Escape
  • ✅ Встроенная поддержка ARIA-атрибутов

Источники:

1.4 Новое значение popover="hint" в Chrome 133

Дата выпуска: февраль 2025 года — Chrome 133

Chrome 133 добавил третье значение для атрибута popoverhint, которое наиболее часто используется для создания поведения всплывающих подсказок (tooltips).

Ключевое отличие от popover="auto":

Поповеры с типом hint являются подчинёнными по отношению к auto при открытии вложенных стеков поповеров. Это означает, что можно открыть несвязанный hint-поповер, в то время как существующий стек auto-поповеров остаётся открытым.

Практический пример:

html
<button id="menu-button" popovertarget="menu">Меню</button>
<div id="menu" popover="auto">
    <button popovertarget="tooltip" popovertargetaction="show">Элемент с подсказкой</button>
</div>

<div id="tooltip" popover="hint">Дополнительная информация</div>

До появления hint меню и всплывающая подсказка, оба использующие popover="auto", конфликтовали: открытие всплывающей подсказки закрывало меню. Значение hint позволяет всплывающим подсказкам сосуществовать с другими поповерами без их закрытия.

Сценарии применения:

  • Всплывающие подсказки с дополнительной информацией
  • Превью ссылок
  • Карточки предпросмотра профилей на социальных платформах
  • Контекстные справочные элементы

Поддержка браузерами:

  • Chrome 133+ — февраль 2025
  • Другие браузеры: в разработке

Источники:

1.5 Неявная привязка якоря в Chrome 133

Дата выпуска: февраль 2025 года — Chrome 133

Chrome 133 создаёт неявную привязку якоря между поповером и его вызывающей кнопкой, что значительно упрощает код позиционирования. Теперь поповер можно позиционировать относительно кнопки с помощью одной строки CSS.

До Chrome 133:

html
<button id="my-button" popovertarget="my-popover" anchor="my-button">Открыть</button>
<div id="my-popover" popover>Содержимое</div>

<style>
    #my-popover {
        position-anchor: --my-button;
        position: fixed;
        bottom: anchor(top);
    }
</style>

После Chrome 133:

html
<button popovertarget="my-popover">Открыть</button>
<div id="my-popover" popover>Содержимое</div>

<style>
    #my-popover {
        bottom: anchor(top);
    }
</style>

Браузер автоматически связывает поповер с вызывающей его кнопкой без необходимости явного указания якоря.

Поддержка браузерами:

  • Chrome 133+ — февраль 2025

Источники:

2. Кастомизируемый элемент <select>

2.1 Общее описание

Дата выпуска: март 2025 года — Chrome 134 (beta: 5 февраля 2025, stable: март 2025)

Chrome 134 добавил возможность кастомизации HTML-элемента <select> путём активации нового поведения через значение base-select свойства appearance. После активации можно добавлять богатый контент, включая изображения, и стилизовать опции.

2.2 Активация кастомизации

Для активации нового режима необходимо применить appearance: base-select к элементу <select> и к псевдоэлементу ::picker(select):

css
select,
::picker(select) {
    appearance: base-select;
}

Изменения в режиме base-select:

  • Изменяет HTML-парсер браузера для содержимого внутри <select>
  • Изменяет внутреннюю структуру рендеринга <select>
  • Предоставляет новые внутренние части и состояния для <select>

2.3 Новые элементы и псевдоэлементы

<selectedcontent>:

Представляет содержимое выбранной опции, отображаемое в кнопке:

html
<select>
    <button>
        <selectedcontent></selectedcontent>
    </button>
    <option>Вариант 1</option>
    <option>Вариант 2</option>
</select>

::picker(select):

Псевдоэлемент-обёртка, содержащий элементы <option> и <optgroup>:

css
::picker(select) {
    background-color: white;
    border: 1px solid gray;
}

select::picker-icon:

Стрелка выпадающего списка:

css
select::picker-icon {
    content: url('custom-arrow.svg');
}

option::checkmark:

Галочка, указывающая на выбранную опцию:

css
option::checkmark {
    color: green;
}

2.4 Пример с изображениями

html
<select>
    <button>
        <selectedcontent></selectedcontent>
        <span class="arrow">▼</span>
    </button>
    <option value="cat">
        <img src="cat.jpg" alt="Кот" />
        Кот
    </option>
    <option value="dog">
        <img src="dog.jpg" alt="Собака" />
        Собака
    </option>
</select>

<style>
    select,
    ::picker(select) {
        appearance: base-select;
    }

    option {
        display: flex;
        align-items: center;
        gap: 8px;
    }

    option img {
        width: 24px;
        height: 24px;
    }
</style>

2.5 Преимущества

  • ✅ Сохранение встроенной доступности
  • ✅ Встроенная навигация с клавиатуры
  • ✅ Интеграция с формами без дополнительной работы
  • ✅ Возможность создания визуально богатых интерфейсов

2.6 Связь с Open UI и Interop 2025

Эта возможность разработана в рамках инициативы Open UI Community Group и является частью Interop 2025, что означает ожидаемую поддержку во всех основных браузерах к концу 2025 года.

Поддержка браузерами:

  • Chrome 134+ — март 2025
  • Chrome 135+ — полная стабилизация, апрель 2025
  • Safari: в разработке (Interop 2025)
  • Firefox: в разработке (Interop 2025)

Источники:

3. Улучшения элемента <dialog>

3.1 Атрибут closedby — Light dismiss для <dialog>

Дата выпуска: март 2025 года — Chrome 134 (beta: 5 февраля 2025, stable: март 2025)

Chrome 134 принёс одну из приятных возможностей Popover API — поведение light dismiss — в элемент <dialog>. Новый атрибут closedby управляет поведением закрытия диалога.

3.2 Значения атрибута closedby

closedby="none":

Отсутствие пользовательского закрытия диалога:

html
<dialog closedby="none">
    <p>Этот диалог можно закрыть только программно</p>
    <button onclick="this.closest('dialog').close()">OK</button>
</dialog>

closedby="closerequest":

Нажатие Escape (или другой триггер закрытия) закрывает диалог:

html
<dialog closedby="closerequest">
    <p>Нажмите Escape для закрытия</p>
</dialog>

closedby="any":

Клик вне диалога или нажатие Escape закрывают диалог (аналогично поведению popover="auto"):

html
<dialog closedby="any">
    <p>Кликните вне диалога или нажмите Escape для закрытия</p>
</dialog>

3.3 Пример использования

html
<button onclick="document.querySelector('#my-dialog').showModal()">Открыть диалог</button>

<dialog id="my-dialog" closedby="any">
    <h2>Заголовок диалога</h2>
    <p>Содержимое диалога с автоматическим закрытием</p>
    <button onclick="this.closest('dialog').close()">Закрыть</button>
</dialog>

3.4 Значение для разработчиков

Это значительное улучшение для веб-разработчиков, поскольку предоставляет нативную поддержку распространённого UX-паттерна, который ранее требовал пользовательских JavaScript-реализаций.

Поддержка браузерами:

  • Chrome 134+ — март 2025
  • Firefox 141+ — июль 2025
  • Safari: в разработке

На момент написания closedby поддерживается только в Chrome 134+ и Firefox 141+, поэтому разработчикам может потребоваться использовать кастомные решения для кросс-браузерной совместимости.

Источники:

4. Invoker Commands API

4.1 Общее описание

Статус спецификации: 2025 год — спецификация недавно объединена в стандарт HTML

Invoker Commands API представляет новый способ декларативного управления интерактивными элементами через атрибуты commandfor и command. Атрибут commandfor превращает элемент <button> в кнопку управления для заданного интерактивного элемента, принимая ID управляемого элемента в качестве значения. Атрибут command указывает действие, которое должно быть выполнено над управляемым элементом.

4.2 Базовый синтаксис

html
<button type="button" commandfor="targetElement" command="show-modal">Триггер</button>
<dialog id="targetElement">Содержимое диалога</dialog>

4.3 Встроенные значения команд

Для поповеров:

html
<!-- show-popover -->
<button commandfor="my-popover" command="show-popover">Показать поповер</button>
<div id="my-popover" popover>Содержимое</div>

<!-- hide-popover -->
<button commandfor="my-popover" command="hide-popover">Скрыть поповер</button>

<!-- toggle-popover -->
<button commandfor="my-popover" command="toggle-popover">Переключить поповер</button>

Для диалогов:

html
<!-- show-modal -->
<button commandfor="my-dialog" command="show-modal">Открыть диалог</button>
<dialog id="my-dialog">
    <h2>Модальный диалог</h2>
    <p>Содержимое</p>
    <button commandfor="my-dialog" command="close">Закрыть</button>
</dialog>

<!-- close -->
<button commandfor="my-dialog" command="close">Закрыть диалог</button>

<!-- request-close -->
<button commandfor="my-dialog" command="request-close">Попытаться закрыть</button>

4.4 Пользовательские команды

Пользовательские команды могут быть созданы с использованием префикса из двух дефисов:

html
<button type="button" commandfor="targetElement" command="--flip">Триггер</button>

<script>
    document.querySelector('#targetElement').addEventListener('command', (e) => {
        if (e.command === '--flip') {
            e.target.classList.toggle('flipped');
        }
    });
</script>

4.5 Событие CommandEvent

API включает событие CommandEvent, которое представляет уведомление пользователя о том, что команда была выдана:

javascript
element.addEventListener('command', (event) => {
    console.log('Команда выдана:', event.command);
    console.log('Источник команды:', event.source);
});

4.6 Преимущества

  • ✅ Декларативность: управление без JavaScript для стандартных действий
  • ✅ Доступность: встроенная семантическая связь между кнопкой и целевым элементом
  • ✅ Расширяемость: возможность создания пользовательских команд
  • ✅ Упрощение кода: сокращение необходимости написания обработчиков событий

4.7 Эквивалентность с предыдущими API

command и commandfor заменяют и обобщают предыдущие специфичные атрибуты:

  • popovertarget / popovertargetaction (для поповеров)
  • Ручные вызовы showModal() / close() (для диалогов)

Поддержка браузерами:

На момент написания (2025) спецификация недавно интегрирована в стандарт HTML. Ожидается постепенное внедрение в браузеры в течение 2025 года.

Источники:

5. Declarative Shadow DOM: достижение зрелости

5.1 Статус Baseline

Дата: 5 августа 2024 года — Declarative Shadow DOM стал Baseline Newly available

5.2 Актуальность в 2025 году

В 2025 году Declarative Shadow DOM продолжает укрепляться как основная технология для создания веб-компонентов. Спецификация изменилась в 2023 году (включая переименование shadowroot в shadowrootmode), и наиболее актуальные стандартизированные версии всех частей функции были реализованы в Chrome 124.

Поддержка браузерами:

  • Chrome 90+ — стабильно с версии 90-136+
  • Firefox 125+ — стабильно с версии 125-138+
  • Safari 16.6+ — стабильно с версии 16.6-18.4+
  • Edge 90+ — стабильно с версии 90-133+

5.3 Основная функциональность

Declarative Shadow DOM позволяет создавать теневые корни (shadow roots) непосредственно в HTML, используя элемент <template>:

html
<host-element>
    <template shadowrootmode="open">
        <style>
            p {
                color: blue;
            }
        </style>
        <p>Содержимое в shadow DOM</p>
        <slot></slot>
    </template>
    <p>Содержимое в light DOM</p>
</host-element>

5.4 Значение атрибута shadowrootmode

shadowrootmode="open":

Создаёт открытый теневой корень, доступный через element.shadowRoot:

html
<my-component>
    <template shadowrootmode="open">
        <style>
            h1 {
                color: blue;
            }
        </style>
        <h1>Заголовок компонента</h1>
    </template>
</my-component>

shadowrootmode="closed":

Создаёт закрытый теневой корень, недоступный извне:

html
<my-component>
    <template shadowrootmode="closed">
        <p>Инкапсулированное содержимое</p>
    </template>
</my-component>

5.5 Сценарии использования

  • Server-Side Rendering (SSR): рендеринг веб-компонентов на сервере с инкапсуляцией стилей
  • Статические сайты: создание компонентов без необходимости JavaScript для инициализации
  • Прогрессивное улучшение: базовая функциональность работает до загрузки JavaScript

5.6 Преимущества

  • ✅ Инкапсуляция стилей: стили внутри shadow DOM не влияют на внешний документ
  • ✅ Семантическая изоляция: структура компонента скрыта от основного DOM
  • ✅ Производительность: отсутствие необходимости в JavaScript для создания shadow root
  • ✅ SEO-дружественность: контент доступен при первоначальной загрузке страницы

Оценка совместимости:

По состоянию на 2025 год Declarative Shadow DOM демонстрирует оценку совместимости браузеров 85, что указывает на сильную кросс-браузерную поддержку.

Источники:

6. Улучшения элемента <details>

6.1 Псевдоэлемент ::details-content в Safari 18.4

Дата выпуска: 31 марта 2025 года — Safari 18.4

Safari 18.4 добавил улучшения для элементов <details> и <summary>, включая поддержку псевдоэлемента ::details-content, который позволяет стилизовать только контент, появляющийся при открытии элемента details.

Ключевая возможность:

Псевдоэлемент ::details-content впервые позволяет анимировать высоту контейнера, что решает давнюю проблему разработчиков.

Пример использования:

html
<details>
    <summary>Кликните для раскрытия</summary>
    <p>Этот контент будет анимирован</p>
</details>

<style>
    ::details-content {
        transition: height 0.3s ease;
        overflow: hidden;
    }

    details[open] ::details-content {
        height: auto;
    }
</style>

6.2 Анимация открытия/закрытия

css
details {
    border: 1px solid #ccc;
    border-radius: 4px;
    padding: 0.5em;
}

summary {
    cursor: pointer;
    font-weight: bold;
}

::details-content {
    padding: 0.5em;
    transition:
        height 0.3s ease,
        opacity 0.3s ease;
    height: 0;
    opacity: 0;
}

details[open] ::details-content {
    height: auto;
    opacity: 1;
}

6.3 Псевдокласс :open

Firefox 136 (март 2025) добавил поддержку псевдокласса :open, который позволяет выбирать любой элемент, находящийся в открытом состоянии. Псевдокласс применяется к элементам details, dialog, элементам input с пикером и элементам select, когда выпадающий список открыт.

css
details:open {
    border-color: blue;
}

dialog:open {
    animation: fadeIn 0.3s ease;
}

@keyframes fadeIn {
    from {
        opacity: 0;
    }
    to {
        opacity: 1;
    }
}

6.4 Связь с Interop 2025

Элементы <details> и <summary> включены в Interop 2025 с целью улучшения поддержки и взаимодействия с другими возможностями веб-платформы.

Поддержка браузерами:

::details-content:

  • Safari 18.4+ — март 2025
  • Другие браузеры: в разработке (Interop 2025)

:open:

  • Firefox 136+ — март 2025
  • Chrome: в разработке
  • Safari: в разработке

Источники:

7. Атрибут hidden="until-found" и событие beforematch

7.1 Связь с Interop 2025

hidden="until-found" является частью Interop 2025 с акцентом на функциональность поиска по странице. В частности, возможность поиска скрытого контента в элементах <details> входит в эту инициативу.

7.2 Описание

Атрибут hidden="until-found" позволяет любому скрытому контенту внутри элемента быть обнаруживаемым при поиске по странице в браузере. Работает точно так же, как content-visibility: hidden, но с сохранением возможности поиска.

7.3 Базовое использование

html
<section hidden="until-found">
    <h2>Скрытый раздел</h2>
    <p>Этот контент скрыт, но может быть найден через поиск по странице (Ctrl+F)</p>
</section>

7.4 Сравнение с обычным hidden

Обычный hidden:

html
<div hidden>Этот контент полностью скрыт и не обнаруживается при поиске</div>

hidden="until-found":

html
<div hidden="until-found">Этот контент скрыт, но может быть найден через поиск по странице</div>

При нахождении совпадения браузер автоматически раскрывает секцию.

7.5 Событие beforematch

Событие beforematch срабатывает на элементе с hidden="until-found" непосредственно перед тем, как элемент будет раскрыт:

html
<article id="content" hidden="until-found">
    <h2>Статья</h2>
    <p>Содержание статьи...</p>
</article>

<script>
    document.querySelector('#content').addEventListener('beforematch', (e) => {
        console.log('Контент будет раскрыт');
        // Можно выполнить дополнительные действия, например, логирование
        e.target.classList.add('found');
    });
</script>

7.6 Практический пример: аккордеон

html
<div class="accordion">
    <button onclick="toggleSection('section1')">Раздел 1</button>
    <div id="section1" hidden="until-found">
        <p>Контент раздела 1 с возможностью поиска</p>
    </div>

    <button onclick="toggleSection('section2')">Раздел 2</button>
    <div id="section2" hidden="until-found">
        <p>Контент раздела 2 с возможностью поиска</p>
    </div>
</div>

<script>
    function toggleSection(id) {
        const section = document.getElementById(id);
        if (section.hasAttribute('hidden')) {
            section.removeAttribute('hidden');
        } else {
            section.setAttribute('hidden', 'until-found');
        }
    }

    // Обработка события beforematch
    document.querySelectorAll('[hidden="until-found"]').forEach((el) => {
        el.addEventListener('beforematch', () => {
            console.log('Найдено совпадение в:', el.id);
        });
    });
</script>

7.7 Использование Wikipedia

Wikipedia теперь использует этот атрибут, что означает, что поиск по странице работает значительно лучше в Chrome на Android, чем в Firefox (который пока не поддерживает эту возможность).

Поддержка браузерами:

  • Chrome 102+ — май 2022
  • Safari Technology Preview 125+
  • Firefox: в разработке (в рамках Interop 2025, bug #1761043)

Источники:

8. Улучшения форм

8.1 Атрибут autocorrect в Firefox 134

Дата выпуска: январь 2025 года — Firefox 134 (экспериментальная поддержка, отключена по умолчанию)

Атрибут autocorrect является перечислимым глобальным атрибутом, который управляет включением автокоррекции редактируемого текста для орфографических и/или пунктуационных ошибок.

Применимые элементы:

Автокоррекция релевантна для редактируемых текстовых элементов:

  • Элементы <input>, за исключением password, email и url
  • Любой элемент с установленным атрибутом contenteditable
  • Элементы <textarea>

Значения атрибута:

html
<!-- Включает автокоррекцию -->
<textarea autocorrect="on">
  Введите текст с автокоррекцией
</textarea>

<!-- Отключает автокоррекцию -->
<input type="text" autocorrect="off" placeholder="Без автокоррекции" />

Пример использования:

html
<!-- Форма регистрации: имя пользователя без автокоррекции -->
<label>
    Имя пользователя:
    <input type="text" name="username" autocorrect="off" />
</label>

<!-- Комментарий: с автокоррекцией -->
<label>
    Ваш комментарий:
    <textarea name="comment" autocorrect="on"></textarea>
</label>

<!-- Редактируемый контент -->
<div contenteditable autocorrect="on">Редактируемый текст с автокоррекцией</div>

Программный доступ через JavaScript:

javascript
const input = document.querySelector('input');

// Проверка поддержки
if ('autocorrect' in HTMLElement.prototype) {
    console.log('Атрибут autocorrect поддерживается');

    // Установка значения
    input.autocorrect = 'off';

    // Чтение значения
    console.log(input.autocorrect); // 'off'
}

Поддержка браузерами:

  • Firefox 134+ — январь 2025 (экспериментально, отключено по умолчанию)
  • Мобильные браузеры (Safari, Chrome для мобильных устройств) имеют лучшую поддержку
  • Десктопные браузеры: поддержка ограничена

Источники:

8.2 Поддержка input type="week" в Safari 18.2

Дата выпуска: декабрь 2024 года (актуально для начала 2025) — Safari 18.2

Safari 18.2 добавил поддержку input type="week" на iOS, iPadOS и visionOS. Это был значительный шаг, поскольку HTML-элемент input type="week" ранее не поддерживался на этих мобильных платформах Apple.

Функциональность:

Элемент input type="week" позволяет пользователям выбирать конкретный номер недели и год с помощью нативного интерфейса выбора.

Использование:

html
<label>
    Выберите неделю:
    <input type="week" name="week" id="week" />
</label>

Формат значения:

Значение всегда имеет формат: YYYY-Www, например:

html
<input type="week" value="2025-W15" />

Ограничения с min и max:

html
<label>
    Выберите неделю в Q2 2025:
    <input type="week" name="quarter" min="2025-W14" max="2025-W26" />
</label>

Пример с JavaScript:

html
<form>
    <label>
        Неделя доставки:
        <input type="week" id="delivery-week" name="delivery" required />
    </label>
    <button type="submit">Отправить</button>
</form>

<script>
    document.querySelector('form').addEventListener('submit', (e) => {
        e.preventDefault();
        const weekInput = document.querySelector('#delivery-week');
        console.log('Выбранная неделя:', weekInput.value);
        // Например: "2025-W20"
    });
</script>

Доступность платформ Safari 18.2:

  • iOS 18.2
  • iPadOS 18.2
  • visionOS 2.2
  • macOS Sequoia 15.2
  • macOS Sonoma
  • macOS Ventura

Источники:

8.3 Атрибут webkitdirectory для iOS в Safari 18.4

Дата выпуска: 31 марта 2025 года — Safari 18.4

WebKit для Safari 18.4 добавляет поддержку iOS для атрибута webkitdirectory на элементах <input type="file" />. Это значительное улучшение, поскольку ранее эта возможность была доступна только на десктопной версии Safari.

Функциональность:

Атрибут webkitdirectory — это булевый атрибут, который указывает, может ли пользователь выбрать директорию вместо файла или файлов.

Базовое использование:

html
<label>
    Загрузить папку:
    <input type="file" webkitdirectory />
</label>

Пример с обработкой файлов:

html
<input type="file" id="dir-input" webkitdirectory />

<script>
    document.querySelector('#dir-input').addEventListener('change', (e) => {
        const files = e.target.files;
        console.log(`Выбрано файлов: ${files.length}`);

        for (let file of files) {
            console.log(`Путь: ${file.webkitRelativePath}`);
            console.log(`Имя: ${file.name}`);
            console.log(`Размер: ${file.size} bytes`);
        }
    });
</script>

Пример загрузки и отображения структуры:

html
<input type="file" id="folder-input" webkitdirectory />
<div id="file-list"></div>

<script>
    document.querySelector('#folder-input').addEventListener('change', (e) => {
        const files = Array.from(e.target.files);
        const listElement = document.querySelector('#file-list');

        listElement.innerHTML = '<h3>Структура папки:</h3>';

        const ul = document.createElement('ul');
        files.forEach((file) => {
            const li = document.createElement('li');
            li.textContent = file.webkitRelativePath;
            ul.appendChild(li);
        });

        listElement.appendChild(ul);
    });
</script>

Поддержка браузерами:

  • Chrome 6+
  • Firefox 50+
  • Edge 13+
  • Safari 11.1+ (десктоп)
  • Safari 18.4+ (iOS, март 2025)

Источники:

8.4 Улучшения цветового пикера в Safari 18.4

Дата выпуска: 31 марта 2025 года — Safari 18.4

Safari 18.4 улучшил HTML-пикер цвета с поддержкой атрибутов alpha и colorspace, позволяя пользователям выбирать цвета из цветового пространства Display P3 и регулировать прозрачность.

Атрибут colorspace:

Позволяет указать цветовое пространство для выбора цвета:

html
<!-- Цветовое пространство sRGB (по умолчанию) -->
<input type="color" value="#ff0000" />

<!-- Цветовое пространство Display P3 (расширенная гамма) -->
<input type="color" colorspace="display-p3" value="color(display-p3 1 0 0)" />

Атрибут alpha:

Включает поддержку альфа-канала (прозрачности):

html
<!-- Без прозрачности -->
<input type="color" value="#ff0000" />

<!-- С прозрачностью -->
<input type="color" alpha value="#ff000080" />

Комбинированное использование:

html
<label>
    Выберите цвет с прозрачностью в Display P3:
    <input type="color" colorspace="display-p3" alpha value="color(display-p3 0.8 0.2 0.5 / 0.7)" />
</label>

Пример с обработкой значения:

html
<input type="color" id="color-picker" colorspace="display-p3" alpha />
<div id="preview"></div>

<script>
    const picker = document.querySelector('#color-picker');
    const preview = document.querySelector('#preview');

    picker.addEventListener('input', (e) => {
        const color = e.target.value;
        preview.style.backgroundColor = color;
        preview.textContent = `Выбранный цвет: ${color}`;
    });
</script>

Практический пример: выбор цвета фона:

html
<form>
    <fieldset>
        <legend>Настройки цвета</legend>

        <label>
            Основной цвет:
            <input type="color" name="primary" colorspace="display-p3" />
        </label>

        <label>
            Цвет наложения с прозрачностью:
            <input
                type="color"
                name="overlay"
                colorspace="display-p3"
                alpha
                value="color(display-p3 0 0 0 / 0.3)"
            />
        </label>
    </fieldset>
</form>

Значение Display P3:

Display P3 — это цветовое пространство с расширенной гаммой, которое поддерживает более яркие и насыщенные цвета по сравнению с традиционным sRGB. Это особенно важно для современных дисплеев (iPhone, iPad, Mac), которые поддерживают широкую цветовую гамму.

Поддержка браузерами:

  • Safari 18.4+ — март 2025
  • Другие браузеры: в разработке

Источники:

8.5 HTML-валидация: тренды 2025 года

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

Ключевые атрибуты валидации:

html
<!-- required -->
<input type="text" name="username" required />

<!-- min и max -->
<input type="number" name="age" min="18" max="100" />
<input type="date" name="date" min="2025-01-01" max="2025-12-31" />

<!-- minlength и maxlength -->
<input type="text" name="code" minlength="4" maxlength="8" />

<!-- pattern -->
<input type="text" name="phone" pattern="[0-9]{3}-[0-9]{3}-[0-9]{4}" title="Формат: 123-456-7890" />

Пользовательские сообщения об ошибках:

html
<form>
    <input type="email" id="email" required />
    <button type="submit">Отправить</button>
</form>

<script>
    const emailInput = document.querySelector('#email');

    emailInput.addEventListener('invalid', (e) => {
        if (emailInput.validity.valueMissing) {
            emailInput.setCustomValidity('Пожалуйста, введите адрес электронной почты');
        } else if (emailInput.validity.typeMismatch) {
            emailInput.setCustomValidity('Пожалуйста, введите корректный адрес электронной почты');
        }
    });

    emailInput.addEventListener('input', () => {
        emailInput.setCustomValidity('');
    });
</script>

Стилизация с псевдоклассами:

css
input:valid {
    border-color: green;
}

input:invalid {
    border-color: red;
}

input:user-invalid {
    border-color: orange;
    background-color: #fff3cd;
}

Важное предупреждение о безопасности:

Никогда не доверяйте данным, передаваемым на сервер от клиента. Даже если форма валидируется корректно и предотвращает некорректный ввод на стороне клиента, злонамеренный пользователь всё ещё может изменить сетевой запрос. Клиентская валидация — это улучшение пользовательского опыта, но НЕ замена серверной валидации.

Источники:

9. ARIA и доступность: тренды 2025 года

9.1 Общий контекст

В 2025 году правильная реализация ARIA стала более критичной в связи с новыми европейскими регуляциями и обновлёнными стандартами WCAG. WCAG 2.2 теперь является юридическим стандартом, на который ссылаются 4,605 исков ADA в 2024 году, а спецификация ARIA 1.3 предоставляет расширенные возможности.

9.2 Европейское законодательство о доступности

European Accessibility Act (EAA) 2025 распространяет обязательства по обеспечению доступности на частный сектор. С 28 июня 2025 года компании с более чем 10 сотрудниками или доходом свыше 2 миллионов евро должны соответствовать стандартам доступности.

9.3 Рекомендации по использованию ARIA

Предпочтение семантического HTML:

Разработчикам следует предпочитать использование правильного семантического HTML-элемента вместо ARIA, если такой элемент существует. Статистика показывает: домашние страницы с присутствующим ARIA в среднем имели на 70% больше обнаружённых ошибок, чем страницы без ARIA, в основном из-за неправильной реализации атрибутов ARIA.

Избыточность ARIA с HTML5:

С 2014 года, когда W3C официально опубликовала рекомендацию HTML5 с landmark-элементами, такими как <main>, <header>, <footer>, <aside>, <nav>, и атрибутами, такими как hidden и required, вместе с увеличенной поддержкой браузеров, определённые части ARIA стали менее критичными.

9.4 Примеры правильного использования

Предпочтительно (семантический HTML):

html
<nav>
    <ul>
        <li><a href="/">Главная</a></li>
        <li><a href="/about">О нас</a></li>
    </ul>
</nav>

Вместо (избыточный ARIA):

html
<div role="navigation">
    <ul>
        <li><a href="/">Главная</a></li>
        <li><a href="/about">О нас</a></li>
    </ul>
</div>

Правильное использование ARIA (когда нет семантического HTML):

html
<div role="tablist">
    <button role="tab" aria-selected="true" aria-controls="panel1">Вкладка 1</button>
    <button role="tab" aria-selected="false" aria-controls="panel2">Вкладка 2</button>
</div>
<div role="tabpanel" id="panel1">Содержимое 1</div>
<div role="tabpanel" id="panel2" hidden>Содержимое 2</div>

9.5 Новые элементы HTML5 с неявными ролями ARIA

  • <main>role="main"
  • <header>role="banner" (когда является прямым потомком <body>)
  • <footer>role="contentinfo" (когда является прямым потомком <body>)
  • <nav>role="navigation"
  • <aside>role="complementary"
  • <section>role="region" (при наличии доступного имени)
  • <article>role="article"

9.6 Ключевые выводы для 2025 года

  1. Минимизировать использование ARIA: использовать только когда семантический HTML недостаточен
  2. Тестирование со скринридерами: обязательное тестирование с реальными вспомогательными технологиями
  3. Соответствие WCAG 2.2: следовать последним рекомендациям по доступности
  4. Законодательная осведомлённость: учитывать юридические требования (EAA 2025, ADA)

Источники:

10. Interop 2025: HTML-ориентированные области

10.1 Общий обзор

Interop 2025 имеет 19 фокусных областей: 17 новых и 2 из предыдущих лет. Команда WebKit завершила Interop 2024 с 98% пройденных тестов в Safari 18.2 и 99% пройденных в Safari Technology Preview, при этом все четыре участвующих preview-браузера достигли 99%.

10.2 HTML-специфичные области Interop 2025

Элемент <details>:

Элементы <details> и <summary> включены в 2025 год с целью улучшения поддержки и взаимодействия с другими возможностями веб-платформы.

Declarative Shadow DOM:

Declarative shadow DOM, который позволяет создавать теневые корни непосредственно в HTML с использованием элемента <template>, теперь полностью поддерживается, и качество реализации в браузерах было улучшено.

Кастомизируемый <select>:

Часть Interop 2025, что означает ожидаемую поддержку во всех основных браузерах к концу 2025 года.

10.3 Прогресс и мониторинг

Работа над фокусными областями продолжается, с улучшениями, видимыми на панели управления Interop 2025. Панель управления на wpt.fyi/interop-2025 отслеживает прогресс в реальном времени по браузерам.

Источники:

11. Прочие HTML-изменения и обновления браузеров

11.1 Chrome 135–141+

Chrome 135 (апрель 2025):

  • Атрибуты command и commandfor: декларативный способ управления элементами
  • Метод userScripts.execute(): однократное внедрение пользовательского скрипта

Chrome 136 (апрель 2025):

  • IDL-атрибут lang для CanvasTextDrawingStyles: прямой контроль над языком для рисования текста
  • Удаление HTMLFencedFrameElement.canLoadOpaqueURL()

Chrome 137 (май 2025):

  • Autofill с AI: новая функция для облегчения заполнения онлайн-форм

Chrome 138–141+ (июнь–ноябрь 2025):

  • Нет значительных HTML-специфичных изменений, фокус на CSS и API

11.2 Firefox 136–142+

Firefox 136 (март 2025):

  • Псевдокласс :has-slotted: стилизация элементов в шаблоне с контентом в slot
  • Псевдокласс :open: выбор элементов в открытом состоянии
  • Улучшенная модель временной активации пользователя

Firefox 140 (июнь 2025):

  • Изменения для предотвращения эксплойтов при HTML-сериализации

Firefox 141 (июль 2025):

  • Атрибут closedby для <dialog>
  • Аргумент options.source для методов поповера

11.3 Safari 18.2–18.6

Safari 18.3 (январь 2025):

  • Незначительный поддерживающий релиз с 23 исправлениями ошибок

Safari 18.5 (май 2025):

  • Declarative Web Push на macOS
  • Фокус на исправлении ошибок

Safari 18.6 (июль 2025):

  • Фокус на исправлении ошибок, без значительных HTML-функций

Источники:

12. Deprecations и removals

12.1 Удаление атрибута composite в Safari 18.4

Дата выпуска: 31 марта 2025 года — Safari 18.4

Safari 18.4 удалил поддержку атрибута composite на элементе <img>, который был первоначально добавлен в апреле 2004 года для несуществующей функции Dashboard macOS и больше не является необходимым.

История:

Атрибут composite был добавлен в WebKit 21 год назад для поддержки виджетов Dashboard — функции macOS, которая была прекращена. Атрибут никогда не был частью веб-стандартов и не использовался в современной веб-разработке.

Альтернативы для композитинга изображений:

CSS mix-blend-mode:

css
img {
    mix-blend-mode: multiply;
}

CSS background-blend-mode:

css
.element {
    background-image: url(image1.jpg), url(image2.jpg);
    background-blend-mode: screen;
}

Canvas API:

javascript
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
ctx.globalCompositeOperation = 'multiply';
ctx.drawImage(img1, 0, 0);
ctx.drawImage(img2, 0, 0);

Источники:

13. Baseline Newly Available: сводка 2025 года

13.1 Определение Baseline Newly Available

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

13.2 HTML-функции, ставшие Baseline в 2025 году

Popover API (январь 2025):

Стал Baseline Newly available 27 января 2025 года после исправления критических багов в Safari на iOS/iPadOS.

Атрибут hidden со значением until-found (2025):

Приносит значение until-found HTML-атрибута hidden в статус Baseline Newly available. Это скрывает элемент до тех пор, пока он не будет найден с использованием поиска по странице браузера или при прямой навигации по URL-фрагменту.

13.3 Интеграция с VS Code и IDE

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

Источники:

14. Сводная таблица поддержки браузерами

ВозможностьChromeFirefoxSafariBaseline статус
Popover API11412517.0✅ Newly Available (янв 2025)
popover="hint"133❌ Не достигнут
Кастомизируемый <select>134⏳ Interop 2025
Атрибут closedby для dialog134141❌ Не достигнут
Invoker Commands API135⏳ В разработке
Declarative Shadow DOM9012516.6✅ Newly Available (авг 2024)
::details-content18.4⏳ Interop 2025
:open136❌ Не достигнут
hidden="until-found"102TP 125⏳ Interop 2025
input type="week" (iOS)18.2✅ Widely Available
webkitdirectory (iOS)18.4✅ Widely Available
Color picker (alpha)18.4❌ Не достигнут
Color picker (colorspace)18.4❌ Не достигнут

15. Ключевые выводы

15.1 Основные тренды 2025 года

  1. Декларативность: Создание интерактивных интерфейсов без JavaScript (Popover API Baseline, Invoker Commands, closedby)
  2. Кастомизация форм: Нативная поддержка визуально богатых элементов форм (<select>, color picker)
  3. Интероперабельность: Активная работа в рамках Interop 2025 для достижения единообразия
  4. Доступность: Встроенная поддержка accessibility features, соответствие EAA 2025 и WCAG 2.2
  5. Мобильный UX: Улучшения для iOS/iPadOS (input type="week", webkitdirectory)
  6. Зрелость Shadow DOM: Declarative Shadow DOM достиг статуса Baseline

15.2 Технологии, готовые к production

Безопасно использовать:

  • ✅ Popover API (Baseline с января 2025)
  • ✅ Declarative Shadow DOM (Baseline с августа 2024)
  • input type="week" на iOS (Safari 18.2+)
  • webkitdirectory на iOS (Safari 18.4+)
  • <dialog> (Baseline Widely Available)
  • inert (Baseline Newly Available)

Требуют progressive enhancement:

  • ⚠️ popover="hint" — только Chrome 133+
  • ⚠️ Кастомизируемый <select> — Chrome 134+, ожидается в других браузерах (Interop 2025)
  • ⚠️ Атрибут closedby — Chrome 134+, Firefox 141+
  • ⚠️ Invoker Commands API — Chrome 135+, в разработке в других браузерах
  • ⚠️ ::details-content — только Safari 18.4+
  • ⚠️ :open — только Firefox 136+
  • ⚠️ hidden="until-found" — Chrome 102+, в разработке в Firefox/Safari
  • ⚠️ Color picker с alpha/colorspace — только Safari 18.4+

15.3 Рекомендации по adoption

Немедленно внедрять:

  • Popover API для модальных окон, меню, тултипов
  • Declarative Shadow DOM для SSR веб-компонентов
  • input type="week" для iOS-приложений
  • webkitdirectory для загрузки папок на iOS

Использовать с осторожностью:

  • Кастомизируемый <select> с feature detection и fallback
  • Атрибут closedby с проверкой поддержки
  • popover="hint" только для Chrome-специфичных решений

Следить за развитием:

  • Invoker Commands API (Chrome 135+, ожидается кросс-браузерность)
  • ::details-content и :open (Interop 2025)
  • hidden="until-found" (Interop 2025)

16. Источники и ссылки

Официальные блоги браузеров

Web.dev и Baseline

Спецификации и сообщества

Инструменты и справочники


  • Дата создания отчёта: 19 ноября 2025 года
  • Охватываемый период: Январь — ноябрь 2025 года (11 месяцев)
  • Research ID: frontend-baseline-2023-2025
  • Автор: DeepResearch Agent
  • Связанные отчёты: HTML 2023, CSS 2023