Cách thích hợp để tạo danh sách lồng nhau HTML?


500

Các tài liệu W3 có một ví dụ danh sách lồng nhau có tiền tố DEPRECATED EXAMPLE:, nhưng họ không bao giờ sửa nó với một ví dụ không được phản đối, cũng không giải thích chính xác những gì sai với ví dụ.

Vậy cách nào trong những cách này là cách chính xác để viết danh sách HTML?

Cách 1 : lồng nhau <ul>là con của bố mẹ<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>

Tùy chọn 2 : lồng nhau <ul>là con của <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>

Câu trả lời:


509

Lựa chọn 2 là chính xác.

Danh sách lồng nhau phải nằm trong một thành <li>phần của danh sách mà nó được lồng.

Liên kết đến W3C Wiki trên Danh sách (lấy từ nhận xét bên dưới): Wiki Danh sách HTML .

Liên kết đến thông số HTML5 W3C ul: HTML5ul . Lưu ý rằng một ulphần tử có thể chứa chính xác bằng 0 hoặc nhiều liphần tử. Điều tương tự cũng áp dụng cho HTML5ol . Danh sách mô tả ( HTML5dl ) tương tự nhau, nhưng cho phép cả hai dtddcác yếu tố.

Ghi chú thêm:

  • dl = danh sách định nghĩa.
  • ol = danh sách đặt hàng (số).
  • ul = danh sách không có thứ tự (đạn).

41
Đây là thông tin chính thức của W3C, w3.org/wiki/HTML_lists#Nesting_lists , Tùy chọn 2 là cách chính xác
Jose Elera

Tôi gặp phải trường hợp dường như không thể tạo bằng HTML5 hợp lệ: một mục danh sách lồng nhau không có mục danh sách cha mẹ (hãy tưởng tượng nhấn TAB để thụt vào đầu mục danh sách trong trình xử lý văn bản). Xem câu hỏi của tôi tại đây: stackoverflow.com/questions/61094384/ từ
Đánh dấu


33

Tùy chọn 2 là chính xác: Lồng nhau <ul>là con của <li>nó.

Nếu bạn xác thực , tùy chọn 1 xuất hiện dưới dạng lỗi trong html 5 - credit: user3272456


Đúng: <ul>là con của<li>

Cách thích hợp để tạo danh sách lồng nhau HTML là với lồng nhau <ul>như là một phần tử con của <li>nó. Danh sách lồng nhau phải nằm trong <li>phần tử của danh sách mà nó được lồng.

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

Tiêu chuẩn W3C cho danh sách làm tổ

Một mục danh sách có thể chứa toàn bộ danh sách khác - đây được gọi là "lồng" một danh sách. Nó rất hữu ích cho những thứ như mục lục, chẳng hạn như mục ở đầu bài viết này:

  1. Chương một
    1. Mục một
    2. Mục hai
    3. Mục ba
  2. Chương hai
  3. Chương ba

Chìa khóa cho danh sách lồng nhau là hãy nhớ rằng danh sách lồng nhau phải liên quan đến một mục danh sách cụ thể. Để phản ánh rằng trong mã, danh sách lồng nhau được chứa trong mục danh sách đó. Mã cho danh sách trên trông giống như thế này:

<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>

Lưu ý cách danh sách lồng nhau bắt đầu sau <li>và văn bản của mục danh sách chứa (Chương Chương Một); sau đó kết thúc trước </li>mục danh sách chứa. Danh sách lồng nhau thường tạo cơ sở cho các menu điều hướng trang web, vì chúng là một cách tốt để xác định cấu trúc phân cấp của trang web.

Về mặt lý thuyết bạn có thể lồng bao nhiêu danh sách tùy thích, mặc dù trong thực tế, nó có thể trở nên khó hiểu với các danh sách lồng quá sâu. Đối với các danh sách rất lớn, bạn có thể tốt hơn hết là chia nội dung thành nhiều danh sách với các tiêu đề thay vào đó, hoặc thậm chí chia nó thành các trang riêng biệt.


7

Nếu bạn xác thực, tùy chọn 1 xuất hiện dưới dạng lỗi trong html 5, vì vậy tùy chọn 2 là chính xác.


6

Tôi thích tùy chọn hai vì nó hiển thị rõ ràng mục danh sách là người sở hữu danh sách lồng nhau đó. Tôi sẽ luôn luôn nghiêng về HTML về mặt ngữ nghĩa.


2

Bạn đã nghĩ đến việc sử dụng TAG "dt" thay vì "ul" cho danh sách lồng nhau chưa? Kiểu kế thừa và cấu trúc cho phép bạn có một tiêu đề cho mỗi phần và nó tự động lập bảng nội dung đi vào bên trong.

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

VS

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

2
Ví dụ của bạn không giống nhau. Ví dụ thứ hai với "Lựa chọn A", "Lựa chọn B", "Sub 1", "Sub 2" không hoạt động đối với các thẻ dt/ ddđược ghép nối. Ngoài ra, phong cách vốn có (và lập bảng, tôi nghi ngờ) chỉ xuất phát từ biểu định kiểu trình duyệt mặc định, vì vậy điều đó không nói nhiều. Tôi sẽ coi nó như một yếu tố ngữ nghĩa; nếu bạn có một danh sách các định nghĩa hoặc có lẽ nếu bạn chỉ có các cặp dữ liệu tiêu đề / mô tả, thì đó dlcó thể là một lựa chọn tốt.
Ricket

Bạn có thể chỉnh sửa nhận xét của mình để đưa ra các ví dụ tương đương - ví dụ: cả hai để chứa lựa chọn A và lựa chọn B với hai mục nhập phụ 1 và phụ 2 cho lựa chọn B không?
Zlatin Zlatev

-5

Điều không được đề cập ở đây là tùy chọn 1 cho phép bạn tùy ý lồng sâu các danh sách.

Điều này không quan trọng nếu bạn kiểm soát nội dung / css, nhưng nếu bạn đang tạo một trình soạn thảo văn bản phong phú thì nó sẽ có ích.

Ví dụ: gmail, hộp thư đến và evernote đều cho phép tạo danh sách như thế này:

danh sách lồng nhau tùy ý

Với tùy chọn 2, bạn không thể vì điều đó (bạn sẽ có thêm một mục danh sách), với tùy chọn 1, bạn có thể.


2
Tùy chọn 1 tạo HTML không hợp lệ. Năm năm trước khi câu hỏi này được hỏi có thể không phải là trường hợp nhưng bây giờ là như vậy.
j08691

Vâng, đó chắc chắn là HTML không hợp lệ. Tuy nhiên, nó vẫn được sử dụng và vẫn hữu ích cho khả năng tương thích. Cách khác là sử dụng lề và kiểu dấu đầu dòng có thể không phải là thứ bạn muốn khi soạn email.
ibash

1
Tôi không chắc chắn tôi hiểu lý do tại sao tôi muốn một cái gì đó sai lệch như thế này. Bạn có thể chỉnh sửa bình luận của bạn để đưa ra cách sử dụng có ý nghĩa hơn cho việc này?
Zlatin Zlatev

Điều này quan trọng cho phép chỉnh sửa biểu mẫu miễn phí cho một nhóm đạn, mang lại cảm giác trực quan hơn. Là một người dùng, nếu tôi có một danh sách các viên đạn, tôi có thể muốn thụt chúng và lồng chúng dưới một viên đạn mới. Nếu không có khả năng thụt lề tùy ý, trước tiên người dùng sẽ cần phải chèn viên đạn tiêu đề và sau đó thụt vào mỗi viên đạn sau. Với khả năng thụt lề tùy ý, người dùng có thể thụt vào nhóm đạn và sau đó chèn một viên đạn tiêu đề mới.
ibash
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.