Как семантически группировать заголовок с UL в HTML?

У меня есть документ HTML, в котором я хотел бы семантически группировать текст в заголовке UL в качестве "заголовка". Первоначальная попытка выглядит следующим образом:

    <ul id="databases">
        Databases:
        <li>Microsoft SQL Server - 10+ years</li>
        <li>Sybase SQL Server - 5 years</li>
        <li>Oracle - 5 years</li>
    </ul>

Валидатор W3C указывает, что внутри UL нет текста, но вне LI. Я мог бы поместить текст внутри LI, а затем использовать псевдокласс: first-child, чтобы найти "заголовок" в моем CSS, но это явно не семантически правильный путь.

Как я могу справиться с этим правильно?

Ответ 1

Он не должен быть установлен в первом ли, потому что это предполагает отношение родственников к предыдущим элементам li, тогда как заголовок более важен в иерархии. Представьте себе скрин-ридеры и т.д.

<h2>Databases:</h2>
<ul id="databases">        
    <li>Microsoft SQL Server - 10+ years</li>
    <li>Sybase SQL Server - 5 years</li>
    <li>Oracle - 5 years</li>
</ul>

Поменяйте h2 на h (n) в зависимости от иерархии по отношению к другим заголовкам на странице. Чтобы настроить заголовок в css, просто дайте ему класс, если есть другие заголовки, которые будут использовать один и тот же стиль, например.

<h2 class="subHeader">Languages:</h2>
<ul id="languages">        
    <li>English</li>
    <li>Chinese</li>
    <li>French</li>
</ul>

В противном случае укажите id

Ответ 2

Для справки HTML 3.0 был <lh>:

<ul>
    <lh>This is a list header!
    <li>Item A
    <li>Item B
    <li>Item C
</ul>

Ответ 3

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

<dl>
  <dt>Databases</dt>
   <dd>Microsoft SQL Server - 10+ years</dd>
   <dd>Sybase SQL Server - 5 years</dd>
   <dd>Oracle - 5 years</dd>
  <dt>Second heading</dt>
   <dd>Item 1</dd>
   <dd>Item 2</dd>
   <dd>Item 3</dd>
</dl>

Дополнительная информация о списке определений здесь http://www.w3schools.com/tags/tag_dl.asp

Ответ 4

<section>
    <h1>Databases:<h1>
    <ul>
        <li>Microsoft SQL Server - 10+ years</li>
        <li>Sybase SQL Server - 5 years</li>
        <li>Oracle - 5 years</li>
    </ul>
</section>

или даже лучше

<section>
    <h1>Databases:</h1>
    <dl>
        <dt>Microsoft SQL Server</dt> <dd>10+ years</dd>
        <dt>Sybase SQL Server</dt>    <dd>5 years</dd>
        <dt>Oracle</dt>               <dd>5 years</dd>
    </dl>
</section>

Обратите внимание, что h1 ограничивается section, поэтому он не является двусмысленным относительно того, принадлежит ли содержимое, следующее за списком, к заголовкам Базы данных. Другими словами, заголовок с областью в этом разделе.

Ответ 5

здесь альтернативный ответ:

<ul id="databases">
        <li style="list-style:none"><strong>Databases:</strong></li>
        <li>Microsoft SQL Server - 10+ years</li>
        <li>Sybase SQL Server - 5 years</li>
        <li>Oracle - 5 years</li>
    </ul>

Преимущество этого заключается в том, что вы можете использовать несколько этих "заголовков" в своем UL, не разбивая их на отдельные UL и пустое пространство по умолчанию, которое вызывает (или использование CSS для устранения пробела...)

Ответ 6

Или вставьте свои списки так:

<ul>
    <li>Databases</li>
    <li>
        <ul>
            <li>Microsoft SQL Server - 10+ years</li>
            <li>Sybase SQL Server - 5 years</li>
            <li>Oracle - 5 years</li>
        </ul>
    </li>
</ul>

Ответ 8

Возможно, что-то вроде этого:

<div>
 <span>Databases:<span>
 <ul id="databases">
        <li>Microsoft SQL Server - 10+ years</li>
        <li>Sybase SQL Server - 5 years</li>
        <li>Oracle - 5 years</li>
 </ul>
 </div>