Tôi có nên sử dụng <ul> s và <li> bên trong <nav> của mình không?


114

Tiêu đề giải thích khá nhiều về nó.

Bây giờ chúng tôi có một <nav>thẻ chuyên dụng ,

Có phải đây là:

<nav>
  <ul>
    <li><a href="#foo">foo</a></li>
    <li><a href="#bar">bar</a></li>
    <li><a href="#baz">baz</a></li>
  </ul>
</nav>

cái nào tốt hơn cái nào sau đây?

<nav>
  <a href="#foo">foo</a>
  <a href="#bar">bar</a>
  <a href="#baz">baz</a>
</nav>

Ý tôi là, giả sử rằng tôi không cần thêm cấp DOM cho một số định vị / đệm CSS, thì cách ưa thích là gì và tại sao?


Đó là một câu hỏi hay ... Với các thẻ không có ý nghĩa đối với HTML 4, có bất kỳ phương pháp hay nhất nào trước đây áp dụng không?
Guffa

Câu trả lời:


63

phần tử điều hướng và danh sách cung cấp thông tin ngữ nghĩa khác nhau:

  • Phần tử điều hướng thông báo rằng chúng tôi đang xử lý một khối điều hướng chính

  • Danh sách thông báo rằng các liên kết bên trong khối điều hướng này tạo thành một danh sách các mục

Tại http://w3c.github.io/html/section.html#the-nav-element, bạn có thể thấy rằng một phần tử điều hướng cũng có thể chứa văn xuôi.

Vì vậy, có, có một danh sách bên trong một phần tử điều hướng sẽ thêm ý nghĩa.


Cảm ơn rất nhiều, đây là những gì tôi cần! Ngoài ra, bình luận của robertc về trình đọc màn hình thông báo "danh sách 3 mục" bên dưới rất hữu ích.
kikito

7
Có vẻ như thẻ UL không làm bất cứ điều gì giúp đỡ: css-tricks.com/navigation-in-lists-to-be-or-not-to-be
BRM tâm lý

2
Liên kết dường như đang làm việc cho tôi. Hãy nhớ đọc phần tiếp theo, phần kê khai các danh sách và không có danh sách nào là một trận hòa. css-tricks.com/wrapup-of-navigation-in-lists
RobW

Theo ý kiến ​​của tôi, <nav>nếu không <ul><li>có nó sẽ có nhiều menu trẻ em năng động hơn. Điều gì sẽ xảy ra nếu bạn có nhiều danh sách menu là một loại khác nhau và định vị trong <nav>? Tôi sẽ nhóm các danh sách menu như <ul><li>trong <nav>. Vì vậy, nếu thực đơn của bạn có thông thường, tôi sẽ đi cùng <ul><li>.
wonsuc

3

Tại thời điểm này, tôi sẽ giữ lại các <ul><li>yếu tố, lý do là không phải tất cả các trình duyệt đều hỗ trợ thẻ HTML5.

Ví dụ: tôi đã gặp phải sự cố khi sử dụng <header>thẻ - Chrome và FF hoạt động như một sự quyến rũ, nhưng Opera bị hỏng.

Cho đến khi tất cả các trình duyệt hỗ trợ HTML hoàn toàn, tôi sẽ gắn chúng vào, nhưng dựa vào các trình duyệt cũ để tương thích ngược.


3
Sử dụng tệp javascript HTML 5 Shim ( remysharp.com/2009/01/07/html5-enabling-script ) để giảm thiểu bất kỳ lỗi tương thích ngược nào có thể xảy ra với các trình duyệt như Opera và IE.
acconrad

Nhưng sau đó trang web của bạn không thân thiện với kịch bản không gây khó chịu :)
Demian Brecht

1
Ý bạn là thích cho đến khi IE8 ra khỏi thị trường ... cứ như vậy cho đến năm 2016 ...:)
Šime Vidas

@ Šime - chính xác là :) Và tắt Javascript không còn là một tùy chọn trong trình duyệt nữa;)
Demian Brecht

@ Agent_9191 nó sẽ - hôm nay tôi hoàn toàn ngạc nhiên khi tôi muốn kiểm tra xem có bao nhiêu người vẫn đang sử dụng IE7 và đoán xem - ở hầu hết các quốc gia, có nhiều người trên các trình duyệt như Opera hoặc iPad safari hơn IE7. Tôi rất vui vì tôi có thể bỏ hỗ trợ cho IE7 ngay bây giờ! Và IE8 sớm muộn gì cũng sẽ biến mất. Đây là trình duyệt cứng đầu cuối cùng mà chúng ta phải đối mặt (IE9 không tệ để chống lại mã).
Camilo Martin

2

Nó thực sự phụ thuộc vào bạn. Nếu bạn thường sử dụng danh sách không có thứ tự để đánh dấu menu điều hướng của mình, thì tôi muốn nói rằng hãy tiếp tục làm như vậy trong phần tử <nav>. Mục đích của phần tử <nav> là xác định điều hướng của trang web đến trình đọc máy tính, vì vậy, cho dù bạn sử dụng danh sách hay đơn giản là các liên kết đều không quan trọng.


+1 vì đã đề cập rằng đối với trình đọc màn hình, navs và as cũng tốt như danh sách bây giờ.
Camilo Martin

2

Đối với tôi, danh sách không có thứ tự là đánh dấu bổ sung không thực sự bắt buộc. Khi tôi xem một tài liệu HTML, tôi muốn nó càng sạch sẽ và dễ đọc càng tốt. Người xem đã rõ ràng rằng một danh sách đang được trình bày nếu sử dụng thụt lề thích hợp. Do đó, việc thêm UL vào các thẻ a này là không cần thiết và làm cho việc đọc tài liệu trở nên khó khăn hơn.

Mặc dù bạn có thể có được một số tính linh hoạt, nhưng tôi tin rằng tốt hơn hết là không nên đánh dấu bằng các lớp ul không hợp lý và tạo kiểu cho các phần tử trong một cái bị trượt. Và bạn không có lý do gì: sử dụng: trước và: sau bộ chọn giả.

Chỉnh sửa : Tôi được biết rằng một số trình đọc màn hình ARIA xử lý danh sách khác với các thẻ liên kết đơn giản. Nếu trang web của bạn hướng đến người khuyết tật, tôi có thể cân nhắc sử dụng phương pháp dựa trên danh sách.


1

Không, chúng tương đương nhau. Hãy nhớ rằng HTML 5 tương thích ngược với danh sách HTML 4, vì vậy bạn có thể thoải mái sử dụng chúng trong cùng một khía cạnh. Đánh đổi là ít mã hơn cho phiên bản thứ 2.

Nếu bạn lo lắng về khả năng tương thích ngược đối với các trình duyệt, hãy đảm bảo bao gồm miếng đệm này để cung cấp chức năng của các thẻ như <nav><article>.


8
Danh sách các liên kết cung cấp ngữ nghĩa bổ sung và khả năng truy cập (ví dụ: trình đọc màn hình sẽ thông báo 'Danh sách ba mục' khi bạn vào điều hướng).
robertc

@robertc Điểm trình đọc màn hình là một điểm rất tốt. Bạn nên đặt nó trên một câu trả lời! Tôi sẽ đánh dấu nó là đúng. +1 trong mọi trường hợp.
kikito

1

Nếu chúng ta đang nói "bởi cuốn sách", thì không; bạn không cần sử dụng danh sách để đánh dấu điều hướng của mình. Ưu điểm thực sự duy nhất mà chúng mang lại là mang lại mức độ linh hoạt tốt hơn khi tạo kiểu.


1

Tôi muốn giữ <ul><li>thẻ, vì các thẻ mới ( <nav>, <section>, <article>và vân vân) chỉ là phiên bản ngữ nghĩa hơn <div>s.

Vì lý do tương tự, bạn sẽ không chỉ có một lượng liên kết trong một <div>mà chúng cũng phải được cấu trúc bên trong <nav>thẻ.


Lý do tôi sử dụng <ul> thay vì nhiều liên kết trong <div> trong quá khứ chính là vì <ul> có ngữ nghĩa hơn. Nhưng bây giờ <nav> có nhiều ngữ nghĩa hơn. Tôi bối rối.
kikito

2
Các liên kết <ul> vẫn có nhiều ngữ nghĩa hơn các liên kết <a> đơn giản, nhưng <nav> có nhiều ngữ nghĩa hơn <div>. Các <ul> vs <a> là riêng biệt để <nav> vs <div>
whostolemyhat

Không quan tâm đến ngữ nghĩa không phải là cách để làm khi viết HTML.
Andrew Marshall

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.