Як семантично додати заголовок до списку


120

Це мене турбує вже деякий час, і мені цікаво, чи є консенсус щодо того, як це зробити правильно. Як я використовую список HTML, як я семантично включати заголовок до списку?

Один з варіантів такий:

<h3>Fruits I Like:</h3>
<ul>
    <li>Apples</li>
    <li>Bananas</li>
    <li>Oranges</li>
</ul>

але семантично <h3>заголовок прямо не пов'язаний з<ul>

Ще один варіант:

<ul>
    <li><h3>Fruits I Like:</h3></li>
    <li>Apples</li>
    <li>Bananas</li>
    <li>Oranges</li>
</ul>

але це здається трохи брудним, оскільки заголовок насправді не є одним із пунктів списку.

Ця опція заборонена W3C:

<ul>
    <h3>Fruits I Like:</h3>
    <li>Apples</li>
    <li>Bananas</li>
    <li>Oranges</li>
</ul>

як <ul>'s може містити лише одне або більше <li>' s

Стара "заголовок списку" <lh>має найбільш сенс

<ul>
    <lh>Fruits I Like:</lh>
    <li>Apples</li>
    <li>Bananas</li>
    <li>Oranges</li>
</ul>

але звичайно це офіційно не є частиною HTML

Я чув, що це пропонувало нам використовувати <label>як форму:

<ul>
    <label>Fruits I Like:</label>
    <li>Apples</li>
    <li>Bananas</li>
    <li>Oranges</li>
</ul>

але це трохи дивно і все одно не буде підтверджено.

Легко побачити семантичні проблеми, намагаючись стилізувати заголовки списків, де мені в кінцевому підсумку потрібно помістити свої <h3>теги в перше <li>і націлити їх на стилізацію з чимось на зразок:

ul li:first-of-type {
    list-style: none;
    margin-left: -1em;
    /*some other header styles*/
}

жахи! Але принаймні таким чином я можу контролювати весь <ul>, заголовок та все, стилюючи ulтег.

Який правильний спосіб це зробити? Будь-які ідеї?


5
Деякі люди використовують LH, але можуть не усвідомлювати, що насправді вони не використовують "справжній" HTML-тег, а просто роблять випадкове ім'я тегів. Веб-переглядачі вважають такий тег як вбудованим елементом. Деякі дозволять вам поставити клас та css на нього.
Glen Little

1
Можливий дублікат stackoverflow.com/questions/2417891 / ...
goodeye

Відповіді:


81

Як вже сказав Феліпе Ельзакреації, перший варіант - це добре.

Якщо ви хочете переконатися, що нічого під списком не інтерпретується як належність до заголовка, саме для цього використовуються елементи вмісту розділів HTML5. Так, наприклад, ви могли б зробити

<h2>About Fruits</h2>
<section>
  <h3>Fruits I Like:</h3>
  <ul>
    <li>Apples</li>
    <li>Bananas</li>
    <li>Oranges</li>
  </ul>
</section>
<!-- anything here is part of the "About Fruits" section but does not 
     belong to the "Fruits I Like" section. -->

6
Це має багато сенсу; Дякую. Звичайно, якщо ми будемо використовувати HTML5, заголовок повинен бути <h1>всередині, <section>оскільки це заголовок верхнього рівня в межах цих тегів.
Томаш Малдер

6
Ви можете використовувати <h1>там, звичайно. Але <h3>гаразд теж. Поки ви не використовуєте заголовок вищого рівня в тому ж розділі.
Alohci

4
Ми повинні дотримуватися заголовків h1..h6 (тут h2 та h3) до тих пір, поки браузери, зчитувачі екрана та інші допоміжні технології не окреслюють правильні заголовки, як зазначено в HTML5 (див. Coding.smashingmagazine.com/2011/08/16/ … - пошук «брови» ...). Я не впевнений, наскільки це розвинулося за кілька місяців, але, мабуть, не так швидко, що стосується API доступності браузерів: /
FelipeAls

3
@davidjb - будьте обережні, це не зовсім те, що говорить ця порада. У ньому сказано, що h1-h6 слід використовувати для забезпечення рівнів заголовків. тобто елементи h1 слід використовувати лише для найвищого рівня заголовка на сторінці. Це не говорить про те, що на цьому найвищому рівні може бути лише одна рубрика. До речі, виробники браузерів дали зрозуміти, що не мають наміру впроваджувати алгоритм контуру, тому мало сподівань на швидке покращення ситуації.
Alohci

2
@Michele - це залежить від того, чи ви маєте на увазі візуально посередині, чи семантично посередині. Якщо візуально, то це проблема CSS для того, щоб розібратися, і в ідеалі не змінилося б ваша націнка. Якщо семантично, то я не впевнений, який у вас список. Можливо, у вас є два списки, не один.
Alohci

53

У цьому випадку я б використав список визначень так:

<dl>
  <dt>Fruits I like:</dt>
  <dd>Apples</dd>
  <dd>Bananas</dd>
  <dd>Oranges</dd>
</dl>

5
Для невпорядкованого списку речей, описаних етикеткою, як, наприклад, приклад вище, я вважаю, що це найкращий вибір. Семантика точно збігається: Тут є термін або етикетка (Фрукти, які мені подобаються), і ось елементи, які відповідають цій етикетці (кожен плід).
Андрій

1
Це буквально список описів . Це найкраще рішення imo.
Дерек 朕 會 功夫

display: item-list ... CSS для відображення куль. Хороша відповідь.
Міка

9

Ваш перший варіант - хороший. Це найменш проблематично, і ви вже знайшли правильні причини, чому не можете використовувати інші варіанти.

До речі, ваш заголовок явно пов’язаний із <ul>: прямо перед списком! ;)

Редагування: Стів Фолкнер, один з редакторів W3C HTML5 і 5,1 вже накидав визначення в якості ltелемента . Це неофіційний проект, який він обговорить для HTML 5.2, більше нічого.


1
Я згоден, інші рішення взагалі не мають сенсу

Щоправда, начебто використання заголовка над a <p>. Але я б все-таки хотів щось трохи більш чітке, щось на зразок forатрибута для <label>' or the <th> `для таблиць. Я думаю, що <lh>варіант мав би найбільш сенс, якби насправді він підтримував W3C.
Томаш Малдер

5

a <div> - це логічний поділ у вашому вмісті, семантично це був би мій перший вибір, якби я хотів згрупувати заголовок зі списком:

<div class="mydiv">
    <h3>The heading</h3>
    <ul>
       <li>item</li>
       <li>item</li>
       <li>item</li>
    </ul>
</div>

тоді ви можете використовувати наведений нижче css, щоб стилізувати все разом як одну одиницю

.mydiv{}
.mydiv h3{}
.mydiv ul{}
.mydiv ul li{}
etc...

Хороший вибір, принаймні для цілей стилізації.
Томаш Малдер

Семантично розмовляючий div не означає нічого, я не розумію, чому це був би ваш перший вибір (поза проблемою стилізації)? : x
Rambobafet

@Rambobafet, чудова некроманта! Ця відповідь була з 2012 року, перш ніж html5 представив розділи та інші більш семантично правильні варіанти. Деякі браузери вже підтримували розділ, а деякі - ні. "div" є скороченим для "логічного поділу" у вашому вмісті, тому на той час це був найкращий спосіб розділити вміст для стилізації.
Еверт

Ви абсолютно праві, не бачили "12" частини :)
Rambobafet


0

Спробуйте визначити в css новий клас, ulheader. p.ulheader ~ ul вибирає все, що одразу слідує за Моїм заголовком

p.ulheader ~ ul {
   margin-top:0;
{
p.ulheader {
   margin-bottom;0;
}

-2

Відповідно до w3.org (зауважте, що це посилання міститься в давно закінченому проекті специфікації HTML 3.0 ):

Не упорядкований список, як правило, являє собою маркований список елементів. HTML 3.0 дає вам можливість налаштовувати кулі, обходитися без куль і загортати елементи списку горизонтально або вертикально для багатоколінних списків.

Тег відкриття списку повинен бути <UL>. За ним слідує необов'язковий заголовок списку ( <LH>підпис </LH>), а потім перший елемент списку ( <LI>). Наприклад:

<UL>
  <LH>Table Fruit</LH>
  <LI>apples
  <LI>oranges
  <LI>bananas
</UL>

які можуть бути представлені як:

Столові фрукти

  • яблука
  • апельсини
  • банани

Примітка. Деякі застарілі документи можуть містити заголовки або звичайний текст перед першим елементом LI. Реалізатори HTML 3.0 користувальницьких агентів рекомендується використовувати цю можливість для обробки погано сформованих застарілих документів.


8
Нахил, оскільки це посилання "згідно" вказує на проект специфікації 3.0 від 1995 року, який ніколи не виводив його з чернетки. Тег "lh" ніколи не перетворював його на непроектований специфікацію HTML.
Брукс Мойсей

HTML 3.0Ось це справді старий документ.
Дерек 朕 會 功夫

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.