Правильный способ сделать вложенный список HTML?


501

Документы W3 имеют пример с вложенным списком, начинающийся с префикса DEPRECATED EXAMPLE:, но они никогда не исправляли его в неосмотрительном примере и не объясняли, что именно не так с этим примером.

Итак, какой из этих способов является правильным способом написания списка HTML?

Вариант 1 : вложенный <ul>является потомком родителя<ul>

<ul>
    <li>List item one</li>
    <li>List item two with subitems:</li>
    <ul>
        <li>Subitem 1</li>
        <li>Subitem 2</li>
    </ul>
    <li>Final list item</li>
</ul>

Вариант 2 : вложенный <ul>является дочерним по отношению <li>к

<ul>
    <li>List item one</li>
    <li>List item two with subitems:
        <ul>
            <li>Subitem 1</li>
            <li>Subitem 2</li>
        </ul>
    </li>
    <li>Final list item</li>
</ul>

Ответы:


510

Вариант 2 правильный.

Вложенный список должен находиться внутри <li>элемента списка, в который он вложен.

Ссылка на W3C Wiki в списках (взято из комментария ниже): HTML Lists Wiki .

Ссылка на ulспецификацию HTML5 W3C : HTML5ul . Обратите внимание, что ulэлемент может содержать ровно ноль или более liэлементов. То же самое относится и к HTML5ol . Список описания ( HTML5dl ) похож, но допускает как элементы, так dtи ddэлементы.

Больше примечаний:

  • dl = список определений.
  • ol = упорядоченный список (номера).
  • ul = неупорядоченный список (маркеры).

41
Вот официальная информация W3C, w3.org/wiki/HTML_lists#Nesting_lists , вариант 2 - правильный путь
— Хосе Элера

Я столкнулся с делом, которое кажется невозможным создать с действительным HTML5: вложенный элемент списка без родительского элемента списка (представьте, что нажимаете TAB, чтобы сделать отступ в начале элемента списка в текстовом процессоре). Смотрите мой вопрос здесь: stackoverflow.com/questions/61094384/…
— Марк


33

Вариант 2 правильный: вложенный <ul>является дочерним по отношению к <li>которому он принадлежит.

Если вы проверите , вариант 1 появляется как ошибка в HTML 5 - кредит: user3272456


Правильно: <ul>как дитя<li>

Правильный способ создания вложенного списка в HTML заключается в том, что вложенный список является <ul>дочерним по отношению <li>к тому, к которому он принадлежит. Вложенный список должен быть внутри <li>элемента списка, в который он вложен.

<ul>
    <li>Parent/Item
        <ul>
            <li>Child/Subitem
            </li>
        </ul>
    </li>
</ul>

Стандарт W3C для вложенных списков

Элемент списка может содержать еще один полный список - это называется «вложением» списка. Это полезно для таких вещей, как оглавления, например, в начале этой статьи:

  1. Глава Один
    1. Первый раздел
    2. Раздел второй
    3. Раздел третий
  2. Глава вторая
  3. В третьей главе

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

<ol>
  <li>Chapter One
    <ol>
      <li>Section One</li>
      <li>Section Two </li>
      <li>Section Three </li>
    </ol>
  </li>
  <li>Chapter Two</li>
  <li>Chapter Three  </li>
</ol>

Обратите внимание, как вложенный список начинается после <li>и текста содержащего элемента списка («Глава первая»); затем заканчивается перед </li>содержащим элементом списка. Вложенные списки часто образуют основу для навигации по веб-сайту, поскольку они являются хорошим способом определения иерархической структуры веб-сайта.

Теоретически, вы можете вкладывать столько списков, сколько захотите, хотя на практике это может привести к путанице в слишком глубоком вложении списков. Для очень больших списков может быть лучше разделить содержимое на несколько списков с заголовками или даже разделить его на отдельные страницы.


7

Если вы подтвердите, вариант 1 появится как ошибка в HTML 5, поэтому вариант 2 является правильным.


6

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


2

Задумывались ли вы об использовании TAG «dt» вместо «ul» для вложенных списков? Его наследуемый стиль и структура позволяют вам иметь заголовок для каждого раздела и автоматически табулировать содержимое, которое входит внутрь.

<dl>
  <dt>Coffee</dt>
    <dd>Black hot drink</dd>
  <dt>Milk</dt>
    <dd>White cold drink</dd>
</dl>

В.С.

<ul>
   <li>Choice A</li>
   <li>Choice B
      <ul>
         <li>Sub 1</li>
         <li>Sub 2</li>
      </ul>
   </li>
</ul>

2
Ваши примеры не совпадают. Второй пример с «Вариантом A», «Вариантом B», «Sub 1», «Sub 2» не работает для тегов dt/, ddкоторые сопряжены. Кроме того, присущий стиль (и, я подозреваю, табуляция) просто происходит из таблицы стилей браузера по умолчанию, так что это не говорит о многом. Я бы отнесся к этому как к семантическому элементу; Если у вас есть список определений, или, возможно, если у вас просто есть пары данных заголовок / описание, то dlможет быть хорошим выбором.
— Рикет

Можете ли вы отредактировать свой комментарий, чтобы привести эквивалентные примеры - например, оба содержат вариант A и вариант B с двумя вложенными записями Sub 1 и Sub 2 для Варианта B?
— Златин Златев

-5

Что здесь не упоминается, так это то, что вариант 1 позволяет вам сколь угодно глубоко вкладывать списки.

Это не должно иметь значения, если вы управляете контентом / CSS, но если вы создаете текстовый редактор, это пригодится.

Например, gmail, входящие и evernote все позволяют создавать списки, подобные этому:

произвольно вложенный список

С опцией 2 вы не можете этого сделать (у вас будет дополнительный элемент списка), с опцией 1 вы можете.


2
Вариант 1 создает недопустимый HTML. Пять лет назад, когда был задан этот вопрос, возможно, это не так, но сейчас.
— j08691

Да, это определенно недопустимый HTML. Однако он все еще используется и все еще полезен для совместимости. Альтернатива состоит в том, чтобы возиться с полями и стилями маркеров, которые могут не соответствовать вашим пожеланиям при составлении электронного письма.
— Ибаш

1
Я не уверен, что понимаю, почему я хотел бы что-то выровнять как это. Можете ли вы отредактировать свой комментарий, чтобы дать больше смысла для этого?
— Златин Златев

Важно, что это позволяет свободно редактировать форму для группы маркеров, придавая ей более интуитивное ощущение. Как пользователь, если у меня есть список маркеров, я могу захотеть сделать отступ и вставить их под новый маркер. Без возможности произвольного отступа пользователю сначала нужно будет вставить маркер заголовка, а затем отступ после каждого маркера. Имея возможность произвольного отступа, пользователь может сделать отступ для группы маркеров, а затем вставить новый заголовок маркера.
— ибаш
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.