#html #semantic-markup #wai-aria
#HTML #семантическая разметка #вай-ария
Вопрос:
Довольно часто возникает желание иметь предварительные просмотры статей и постов в блоге, и вы видите это в нескольких местах, включая новостные сайты, сайты личных блогов и тому подобное. Есть множество вещей, которые вы можете захотеть отобразить как часть этого предварительного просмотра:
- Название статьи
- Дата публикации
- Сколько времени может потребоваться для чтения
- Различные категориальные теги
- Краткое содержание статьи
- Краткий фрагмент предварительного просмотра с начала поста
Первые четыре довольно очевидны в отношении того, как вы должны их аннотировать:
- В заголовках статей и постов в блоге следует использовать
<h1>
—<h6>
, если это вообще возможно / практично, а если нет, то их следует пометить символом ARIArole="heading"
. Программы чтения с экрана и поисковые системы понимают, как интерпретировать оба варианта. - Следует использовать дату публикации,
<time>
где это возможно, отмеченнуюdatetime
датой, установленной как для программ чтения с экрана (таких как JAWS), так и для поисковых систем. Сканеры. - Также следует использовать оценку времени чтения,
<time>
но сdatetime
значением чистой продолжительности. Это позволяет поисковым системам намного легче его читать. - Списки тегов должны просто использовать неупорядоченный список ссылок, чтобы помочь программам чтения с экрана правильно ориентироваться в нем. Поисковые системы обычно распознают их другими способами, поэтому формат в основном предназначен для обеспечения доступности.
Но последние два не так очевидны. Я знаю, что с ними, вероятно, следует обращаться аналогично друг другу, но, похоже, я нигде не могу найти никаких рекомендаций. Моя первая реакция — заключить их в <p>
s, но это кажется ужасно неправильным, поскольку они имеют довольно общее семантическое значение, выходящее за рамки простого блока текста.
Как правильно аннотировать резюме и предварительные просмотры статей и сообщений в блоге специально для обеспечения доступности и SEO? (Я специально не включаю такие материалы, как микроданные и JSON-LD, просто базовый материал HTML ARIA.)
Комментарии:
1. Будет ли тизер содержать краткое содержание и фрагмент предварительного просмотра или только один из двух?
2. Только одно из двух. Я оставил это подразумеваемым, потому что, хотя я знаю, что было бы очевидно, что вам нужен только один, они семантически различны на некотором уровне. Когда я попытался провести это различие, я обнаружил, что либо отвлекаюсь от реального вопроса, либо объединяю семантические различия, поэтому я просто оставил подразумеваемую взаимную эксклюзивность.
Ответ №1:
Вы, кажется, хорошо разбираетесь в семантическом html и в том, как это помогает пользователям программы чтения с экрана. Заголовки для статей — отличное начало. Использование семантического <article>
тега тоже хорошо, хотя поддержка перехода непосредственно к тегу <article> поддерживается только в некоторых программах чтения с экрана (JAWS и VoiceOver, но не NVDA).
Если у вас есть фрагмент статьи, который заканчивается многоточием и ссылкой типа «подробнее», убедитесь, что «подробнее» содержит дополнительную контекстную информацию, такую как:
<article>
<h2 id="articleHeading1">Are flying cars a reality?</h2>
<p>Flying cars are common in science fiction movies, but do we have the technology to build them today. In an
interview with Dr Foobar...<a href="#" id="readMore1" aria-labelledby="readMore1 articleHeading1">read more</a>
</p>
<ul aria-label="tags">
<li>science fiction</li>
<li>cars</li>
</ul>
</article>
<time>
Элемент помогает некоторым программам чтения с экрана (VoiceOver объявит об этом, а NVDA — нет), но я бы не рекомендовал «скрывать» информацию в элементе <time> . Например,
<p>We open presents on <time datetime="2019-12-25 06:00">Christmas</time> early in the morning.</p>
Голос за кадром скажет «Мы открываем подарки на Рождество, 25 декабря 2019 года, в 6 утра, ранним утром», но NVDA просто скажет «Мы открываем подарки на Рождество ранним утром».
Таким образом, некоторые пользователи программы чтения с экрана услышат дополнительную информацию о дате / времени («6 утра»), а другие — нет. И зрячий пользователь также не будет знать о времени 6 утра. Если вы отразите то, что отображается визуально, с тем, что указано в элементе <time> , тогда все будет в порядке, но тогда элемент <time> на самом деле ничего вам не даст.
Наличие вашего списка тегов в <ul>
нормально. Этой семантической информации достаточно, чтобы иметь смысл. Пользователь программы чтения с экрана может перемещаться к элементам списка с помощью L сочетания клавиш. Вам не нужно специальное описание «это теги», но вы, безусловно, можете это сделать.
<ul aria-label="these are the tags">
<li>alpha</li>
<li>beta</li>
<li>gamma</li>
</ul>
Время для чтения статьи — это именно то, что вы сказали, просто текст. <p>
Нормально. Однако имейте в виду, что оценка прочитанного может вызвать стресс у некоторых пользователей. При когнитивных расстройствах, которые приводят к замедлению времени чтения, эти пользователи могут испытывать «давление», требуя прочитать статью за это время. Оценка является хорошим предположением о длине статьи, но зависит от среднего времени чтения. Предпочтительным подходом может быть просто указание длины статьи, возможно, в количестве абзацев или приблизительная оценка того, сколько «страниц» было бы напечатано с использованием настроек по умолчанию. Таким образом, статья, занимающая «половину страницы», может занимать 15 секунд для пользователя программы чтения с экрана с очень высокой скоростью речи, или 3 минуты для обычного читателя, или 15 минут при расстройстве чтения.
Комментарии:
1. Я думаю, у вас есть смысл поставить под сомнение использование «расчетного времени чтения», а не какой-либо другой аналогичной, но более объективной метрики, которая все же лучше, чем предоставление необработанного количества слов.
2. Отмечу, что в моем конкретном случае непосредственного использования все мои предварительные просмотры также являются ссылками на саму статью, поэтому ссылка «подробнее» была бы избыточной.