Семантическая структура в HTML - субтитры (до HTML5) - PullRequest
13 голосов
/ 12 октября 2010

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

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

НАЗВАНИЕ БЛОГА
лучший блог в мире

post_title1
post_title2
post_title3

Семантически «НАЗВАНИЕ БЛОГА» - это h1. Для меня имеет смысл, что post_titleX - это h2, но для субтитров - «лучший блог в мире» неправильно классифицировать их на одном уровне.

Ответы [ 5 ]

14 голосов
/ 12 октября 2010

Спецификация значительно изменилась с момента рабочего проекта , который был актуален, когда этот ответ был впервые опубликован пять лет назад.Как справедливо указывает @ Andre Figueiredo в комментариях, опубликованная спецификация HTML5 очень четко описывает этот конкретный вариант использования (выделение добавлено):

h1 - h6 элементы не должны использоваться для разметки подзаголовков, субтитров , альтернативных заголовков и слоганов, если только они не предназначены для заголовка нового раздела или подраздела.

ВКороче говоря, используйте соответствующий элемент p внутри элемента header:

<header>
    <h1>A BLOG TITLE</h1>
    <p class="tagline">the best blog in the world</p>
</header>

В HTML5 есть очевидное решение:

<header>
    <h1>A BLOG TITLE</h1>
    <h2>the best blog in the world</h2>
</header>

Когдаиспользуя HTML4, я лично стремлюсь заменить h2 на p class="tagline" или что-то подобное.

Редактировать: Чтобы мотивировать использование h2 в HTML5, придумайте название Dr.Strangelove :

<h1>Dr. Strangelove</h1>
<?>Or: How I Learned to Stop Worrying and Love the Bomb</?>

Имеет ли здесь смысл элемент p?Не совсем - это не параграф, это заголовок.h2 работает как есть?Нет, мы можем спутать это с субтитрами самого текста.Так что же нам делать?Мы используем h2 и группируем его с h1, используя элемент header, тем самым избавляясь от двусмысленности в отношении субтитров в тексте.

7 голосов
/ 12 октября 2010

Я бы просто использовал элемент абзаца, для меня это не так странно, как использование элемента заголовка:

<p class="subtitle">the best blog in the world</p>

Ваш ответ («ваш ответ», «его ответ»?), Безусловно, будет правильным решением, если вы будете размечать с помощью HTML5.

2 голосов
/ 12 августа 2013

Возможно, скоро появится элемент SUBLINE или SUBHEAD, который будет наиболее подходящим:

http://www.techrepublic.com/blog/web-designer/html5-hgroup-is-dead-what-you-need-to-know/

Пока она не станет доступной, у нас остается попытка сделать H2 (или какой-либо другой элемент H x ) или P или Q действующими в качестве подлиний / подзаголовков. / субтитры и т. д. Когда это станет доступным, структура контента, предложенного в оригинальном посте, я полагаю, будет следующей (давайте предположим, что элемент SUBHEAD является тем, чем он в конечном итоге является):

<h1>A BLOG TITLE
<subhead>the best blog in the world</subhead>
</h1>

<h2>post_title1</h2>
<h2>post_title2</h2>
<h2>post_title3</h2>

Хотя я бы предпочел, чтобы это было:

<h1>A BLOG TITLE</h1>
<subhead>the best blog in the world</subhead>

<h2>post_title1</h2>
<h2>post_title2</h2>
<h2>post_title3</h2>

Тот простой факт, что конкретный элемент SUBHEAD следует за конкретным элементом H x в моем уме, семантически соединяет эти два элемента вместе, как H2 (как последующий брат, а не как ребенок или другой такой потомок) после H1 связывает эти два элемента.

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

Так как я не могу показать здесь обработанный код, Codepen в http://codepen.io/WebDevCA/pen/wzyIH показывает тест элемента SUBHEAD и показывает, что, на мой взгляд, его предпочтительное расположение в DOM - это сразу последующий селектор родного элемента к связанному элементу H x , а не как дочерний элемент внутри элемента H x .

1 голос
/ 12 февраля 2013

Если вы используете заголовок для субтитра, будет создан неправильный контур документа.

<body>
 <h1>John's blog</h1>
 <h2 class="tagline">the best blog in the world</h2>
 <div>…</div>
</body>

Здесь весь следующий контент (до следующего h1 / h2, если таковой имеется) будет находиться в рамке слогана вместо фактического заголовка блога. Что не , что мы хотим для субтитров.

в HTML5

( ОБНОВЛЕНИЕ : элемент hgroup удален из HTML5. См. Мой ответ на другой вопрос о , как пометить подзаголовки в HTML5 сейчас.)

Для HTML5 для этого варианта использования есть новый элемент: hgroup

Элемент используется для группировки набора элементов h1 - h6, когда заголовок имеет несколько уровней, таких как подзаголовки, альтернативные заголовки или слоганы.

При использовании hgroup только один дочерних заголовков учитывается для структуры документа.

<body>
 <hgroup>
   <h1>John's blog</h1>
   <h2 class="tagline">the best blog in the world</h2>
 </hgroup>
 <div>…</div>
</body>

в HTML 4.01

Было бы два пути

1) Включить подзаголовок в основной заголовок, возможно, через двоеточие.

<body>
 <h1>John's blog: <span class="tagline">the best blog in the world</span></h1>
 <div>…</div>
</body>

2) Используйте p (или, если это не параграф, div) для субтитров:

<body>
 <h1>John's blog</h1>
 <p class="tagline">the best blog in the world</p>
 <div>…</div>
</body>

(если сразу следующий контент будет состоять из абзацев, вы можете подумать об использовании элемента hr после слогана)

0 голосов
/ 11 февраля 2013

Я думаю, что решение должно ответить на следующий вопрос: «Что имело бы смысл для программы чтения с экрана?»

<h1>A BLOG TITLE</h1>
<p><q>the best blog in the world</q></p>
...