Изменение стиля UA вложенного заголовка h1
Что изменится
Ранее в спецификации HTML был определён алгоритм начертания, присваивающий элементам <h1>
неявный семантический уровень заголовка в зависимости от количества секционных элементов (<section>
, <aside>
, <nav>
и <article>
), в которые он был вложен.
При рендеринге браузера section > h1
имеет тот же font-size
и margin
, что и <h2>
. section > section > h1
представлялся как <h3>
, и так далее. Рендеринг по умолчанию был реализован в браузерах в их UA стилях, но не на уровне заголовков в Дереве доступности (используемого устройствами чтения с экрана). Веб-сайты начали использовать секционные элементы, но не ожидали получить автоматические уровни заголовков от алгоритма контура.
В целом, это создавало путаницу в том, где разработчики могли использовать элементы <h1>
, инструменты по-разному обрабатывали HTML, а алгоритм контура считался проблематичным. Алгоритм контура был удалён из спецификации HTML в 2022 году, но правила таблицы стилей UA всё ещё остаются. Правила в стилях по умолчанию — это то, что разработчики браузеров начали удалять сейчас.
/* где x это :is(article, aside, nav, section) */
x h1 { margin-block: 0.83em; font-size: 1.50em; }
x x h1 { margin-block: 1.00em; font-size: 1.17em; }
x x x h1 { margin-block: 1.33em; font-size: 1.00em; }
x x x x h1 { margin-block: 1.67em; font-size: 0.83em; }
x x x x x h1 { margin-block: 2.33em; font-size: 0.67em; }
Например:
<body>
<h1>Level 1</h1>
<section>
<h1>Level 2</h1>
<section>
<h1>Level 3</h1>
<section>
<h1>Level 4</h1>
</section>
</section>
</section>
</body>
В старых UA стилях это выглядит так:

Новые UA стили будут выглядеть так:

UA стили вашего браузера:
Что ожидать и когда
Наряду с изменениями в стилях браузеров, инструменты аудита страниц, такие как Lighthouse, теперь отмечают случаи использования <h1>
без определённого font-size
как плохую практику. Вот суть того, чего следует ожидать:
<h1>
больше не будет адаптировать свой стиль на основе окружающих секционных элементов, таких как<section>
,<article>
,<nav>
и<aside>
. Таблица стилей UA будет применять один и тот же стиль к<h1>
без неявных стилей, понижающих<h1>
до уровня<h2>
,<h3>
и т. д.- Lighthouse выдаст предупреждение, если
<h1>
используется без определенияfont-size
и вложен в<section>
,<article>
,<nav>
или<aside>
. Предупреждение Lighthouse об устаревании, на которое следует обратить внимание, —H1UserAgentFontSizeInSection
. Подсказки для решения этой проблемы описаны в следующем разделе.
Изменения браузеры будут внесены в соответствии с установленным графиком:
Firefox
- С 31 марта 2025 года в Firefox для 50% пользователей бета-версии 138 будут внесены изменения, удаляющие стили UA для
h1
вarticle
,aside
,nav
илиsection
на десктопах. Планируется, что в стабильном выпуске Firefox 138 изменения будут внедрены для 5% пользователей, затем их количество увеличится до 50%, после чего они будут внедрены на всех платформах в Firefox 140. Баг 1885509. - Начиная с Firefox 136, разработчики будут наблюдать предупреждение в консоли для
h1
вarticle
/aside
/nav
/section
без заданныхfont-size
илиmargin
: Баг 1937568. - Чтобы протестировать в Firefox новое поведение, установите
layout.css.h1-in-section-ua-styles.enabled
наfalse
вabout:config
.
Chrome
- Начиная с версии 136, Chrome показывает предупреждения об устаревании для
<h1>
внутри элементов<section>
,<article>
,<nav>
и<aside>
, и когда<h1>
используетfont-size
иmargin
по умолчанию. Пометка об устаревании в Chromium снизит баллы Lighthouse за "Best Practices": issue 394111284.
Safari
- В Safari пока нет багов с реализации этих изменений, но стоит ожидать, что WebKit последует за этой тенденцией с эквивалентными обновлениями.
Исправление предупреждения Lighthouse
Недавно Lighthouse унаследовал проверку, основанную на предупреждениях DevTools от Chromium, для сайтов, которые не указывают размер шрифта для элементов <h1>
в <section>
, <article>
, <nav>
или <aside>
. Новое правило называется H1UserAgentFontSizeInSection
и появилось с марта после добавления предупреждений об устаревании. Если вы видите предупреждение <h1>
, убедитесь, что применяете явные font-size
и margin
для <h1>
. Вот несколько рекомендуемых к использованию стилей:
h1 {
margin-block: 0.67em;
font-size: 2em;
}
Чтобы не переписывать другие правила стиля, нацеленные на <h1>
, можно использовать :where()
, имеющий нулевую специфичность:
:where(h1) {
margin-block: 0.67em;
font-size: 2em;
}
Страница MDN для элементов заголовка теперь содержит примечания по использованию, перечисленные выше.
Итог
Обратите внимание на следующие моменты:
- Не полагайтесь на стандартные стили браузера для передачи иерархии заголовков. Явно определите иерархию документа, используя
<h2>
для заголовков второго уровня,<h3>
для третьего уровня и т. д. - Всегда определяйте
font-size
иmargin
для элементов<h1>
. - Подумайте об обновлении сброса CSS, учитывающего это изменение.
- Проведите аудит сайта с помощью Lighthouse и DevTools, чтобы проверить, не появляется ли предупреждение об устаревании.
- Ознакомьтесь с примечаниями по использованию в документации MDN для заголовков разделов HTML.