Лучшая практика для заголовков HTML, когда вложенность разделов составляет 7 глубин

Мое приложение создает HTML, и это действительно приводит к семантически правильной вложенности элементов section и article, глубина которых может составлять 7 и более. Например, опустив беспорядок, вложенный как:

html
  body
    section
      section
        section
          article
            article
              article

Каждое содержимое раздела (раздел, статья) и корень раздела (тело) имеют заголовок. Чтобы соответствовать рекомендациям по доступности для удобного чтения с экрана, hN пронумерованы в соответствии с глубиной, хотя HMTL5 предполагает, что все они могут быть h1. Итак, как:

html
  body
    h1
    section
      h2
      section
        h3
        section
          h4
          article
            h5
            article
              h6
              article
                h?

Когда я достиг такой глубины, можно ли просто использовать h6 независимо от того, насколько глубоко это заходит? Кроме того, следует ли использовать атрибуты арии role="heading" aria-level="7" и т. д.? Какова современная лучшая практика в этой ситуации?


person alex.jordan    schedule 14.12.2020    source источник


Ответы (3)


Ваше предложение является передовой практикой, поскольку оно используется в примере для соответствия критериям успеха WCAG 2.1 в разделе ARIA12 Использование role=heading для определения заголовков.

Во втором примере со страницы говорится следующее:

В этом примере показано, как реализовать заголовок уровня 7, используя role=heading и атрибут aria-level. Поскольку HTML поддерживает заголовки только до уровня 6, нет встроенного элемента, обеспечивающего эту семантику.

...
<h5>Fruit Trees</h5>
...
<h6>Apples</h6>
<p>Apples grow on trees in areas known as orchards...</p>
...
<div role="heading" aria-level="7">Jonagold</div>
<p>Jonagold is a cross between the Golden Delicious and Jonathan varieties...</p>

Вы можете применять роль и уровень к любым элементам, если это не переопределяет подразумеваемую семантику элемента. Например, вы можете поместить их в элемент div, но вы не можете назначить role элементу кнопки, так как он имеет подразумеваемую роль кнопки, и вы не можете aria- level на h1...h6, так как на них уже есть подразумеваемый уровень. Дополнительные сведения см. в разделе Требования соответствия документа для использования атрибутов ARIA в HTML.

person Daniel Gimenez    schedule 14.12.2020
comment
Должен ли заголовок уровня 7 быть div или это может быть h6 с этими атрибутами? - person David Farmer; 15.12.2020
comment
@DavidFarmer W3C говорит, что, поскольку hN подразумевает role="heading", эта роль явно назначается hN не рекомендуется. Непонятно, как обстоят дела с отказом от role и установкой aria-level на 7. - person alex.jordan; 15.12.2020
comment
@Дэвид Фармер. Я обновил свой ответ, указав уровень элемента h6. - person Daniel Gimenez; 15.12.2020
comment
@DavidFarmer Кажется, есть два варианта. (1) Мы можем использовать h6, как только мы достигнем этой глубины, даже если мы действительно углубимся. Следствием этого является то, что вещи, которые на самом деле являются h7, h8,..., будут рассматриваться как h6. Например, сплющенный в дереве TOC. Или (2) используйте что-то вроде div, как в примере здесь. Одним из следствий этого является то, что некоторые инструменты на основе заголовков не будут видеть/учитывать атрибуты aria и опускать этот контент. Например, дерево TOC может не учитывать элементы на глубине 7+. Я думаю, что я предпочитаю (1). - person alex.jordan; 15.12.2020

HTML и ARIA по расширению определяют 6 уровней заголовков. Хотя технически <div role="heading" level="7"> является правильным, он не является общепризнанным заголовком 7-го уровня всеми средствами чтения с экрана и другими вспомогательными средствами. Jaws, например, считает, что любой элемент с атрибутом уровня aria со значением за пределами 1-6 является заголовком уровня 2. Интерпретация Jaws не противоречит спецификации ARIA.

По этой причине я рекомендую не использовать aria-level для заголовков уровня 7 или выше. ЕСЛИ вам действительно нужны заголовки 7-го уровня и выше, просто используйте <p> или <div> без каких-либо указаний, чтобы не мешать программам чтения с экрана и другим вспомогательным инструментам, которые не поддерживают заголовки выше 6-го уровня.

Однако, прежде чем принимать это простое решение как должное, спросите себя:
Вам действительно нужно идти так глубоко?

Вы должны задать себе этот вопрос, потому что на самом деле, вероятно, вам это не нужно. Многие люди испытывают трудности с пониманием длинных текстов и сложных структур. Нормальный хорошо структурированный текст разумной длины не должен использовать более 3 уровней. Техническая спецификация, руководство пользователя или исследовательская работа могут потребовать 4 или, может быть, 5, учитывая их сложность, глубину и объем. В принципе, 6-го уровня должно быть более чем достаточно для построения правильной, осмысленной и понятной структуры.

Если вам нужно больше уровней, возможно, вы пропускаете уровни без причины, или ваш текст плохо продуман. Вы не можете организовать это по-другому? Может, разделить на разные части?

Вы говорите о <section> и <article>, но действительно ли все они ограничивают разделы или статьи? Другими словами, действительно ли все они играют роль секционирования во всем документе с семантической точки зрения? Я сомневаюсь в этом. Я почти уверен, что некоторые из них имеют только роль визуального разделения, и в этом случае вы должны заменить их на <div>.

Посмотрите на следующий вопрос, где я дал аналогичный ответ: a-h7-element/55892415#55892415">Является ли h6 aria-level=7 надежным способом создания элемента h7?

person QuentinC    schedule 16.12.2020
comment
Спасибо за это, особенно за особенности JAWS. Я думаю, что структура у нас правильная, но мне любопытно услышать ваш анализ. Это для приложения, которое публикует учебники по математике в формате HTML. Страница может быть разделом (h2) учебника [с h1 в баннере для названия книги]. Затем могут быть подразделы (h3) и подразделы (h4). В редких крайних случаях в подразделе может быть подраздел «Упражнения» (h5). Там вы можете найти упражнение (статья h6) с такими компонентами, как решение (статья h7). Мы пытаемся объяснить эти редкие крайние случаи. - person alex.jordan; 17.12.2020
comment
Возможно, вы могли бы принять структуру, в которой упражнение 1, решение 1, упражнение 2, решение 2 и т. д. имели бы одинаковый уровень; или вы можете выжать упражнения H5, чтобы сразу иметь упражнение H5 1, упражнение H5 2, ... Если в большинстве подразделов часто есть 3 упражнения или меньше подряд, это не сильно повредит навигации. Помните, что большое количество уровней может также означать, что в дереве навигации нужно развернуть больше элементов. Может быть проще иметь больше предметов на данном уровне, чем более короткие уровни, особенно на уровне 4 или ниже. Короче говоря: не делайте чрезмерных секций - person QuentinC; 17.12.2020

Лично я считаю, что все, что меньше <h3>, слишком мало. <h4> размером с <p>. Если вы действительно хотите что-то меньшее, вы можете установить для него свойство стиля font-size. Ниже приведена таблица размеров px от <h1> до <h6>:

H1 H2 H3 H4 H5 H6
32px 24px 18.72px 16px 13.28px 10.72px

Таким образом, предложенное вами «<h7>» будет около 8px. Для вашего <div>, которое вам нужно сделать <h7>, вы должны дать ему class="h7" и в своем CSS поместить:

.h7{font-size:8px}

Конечно, вы можете поставить любой размер, который вы хотите. Таким образом, вы можете создавать еще более мелкие шрифты, хотя это может быть плохой идеей (для удобочитаемости текста).

person Lakshya Raj    schedule 14.12.2020
comment
Заголовки hN помогают описать структуру документа. Несмотря на то, что для hN существуют размеры по умолчанию, любой хороший дизайн веб-сайта использует CSS для стилизации каждого элемента. Таким образом, не имеет значения размер шрифта по умолчанию, поля по умолчанию или другое расположение элементов по умолчанию. Правильным будет правильно организовать элементы для описания структуры, и как только это будет сделано, спроектировать макет так, чтобы он хорошо выглядел. - person David Farmer; 15.12.2020
comment
@DavidFarmer: извини. Я думал, что добавление класса для обозначения его как определенного размера будет описывать структуру, делая текст каждый раз меньше. Если это не так, то спасибо, что дали мне знать. - person Lakshya Raj; 15.12.2020
comment
@LakshyaRaj Вот один из примеров того, как hN имеет большее значение. Клиентское приложение может создать оглавление для страницы. Он организует оглавление в соответствии с этими hN, размещая h2 на той же глубине, затем делая отступы для h3 и так далее. Если вы наложите стиль на hN, чтобы изменить внешний вид, это не повлияет на то, как будет построено оглавление. Это только один пример; существует больше вещей, для которых используется hN, и изменение их визуального стиля не повлияет на эти другие вещи. - person alex.jordan; 15.12.2020