Изменение стиля 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.