Чи слід використовувати <ul> s та <li> s всередині <nav> s?


114

Назва майже все це пояснює.

Тепер, коли у нас є виділений <nav>тег,

Це є:

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

що краще, ніж наступне?

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

Я маю на увазі, припускаючи, що мені не потрібен додатковий рівень DOM для деяких CSS-позиціонування / прокладки, що є кращим способом і чому?


Це гарне запитання ... Що стосується тегів, які не мають сенсу для HTML 4, чи застосовується будь-яка з попередніх найкращих практик?
Гуффа

Відповіді:


63

елемент nav та список надають різну семантичну інформацію:

  • Елемент nav повідомляє, що ми маємо справу з головним блоком навігації

  • У списку повідомляється, що посилання всередині цього блоку навігації утворюють список елементів

На веб-сторінці http://w3c.github.io/html/sections.html#the-nav-element можна побачити, що елемент наві може також містити прозу.

Так що так, наявність списку всередині елемента елемента додає значення.


Велике спасибі, це мені було потрібно! Також коментар robertc про читачів екрану, що оголосив "список 3 предметів" нижче, був дуже корисним.
кікіто

7
Схоже, тег UL нічого не допомагає: css-tricks.com/navigation-in-lists-to-be-or-not-to-be
psycho brm

2
Здається, посилання працює для мене. Не забудьте прочитати подальші дії, які оголошують списки, а списки - нічию. css-tricks.com/wrapup-of-navigation-in-lists
RobW

На мою думку, <nav>без, <ul><li>схоже, це матиме більш динамічні дитячі меню. Що робити, якщо у вас є декілька списків меню, які відрізняються типом і позиціонують в <nav>? Я б згрупував ці списки меню, як <ul><li>у <nav>. Тож, якщо у ваших меню регулярно, я б пішов <ul><li>.
wonsuc

3

На даний момент я б утримував <ul><li>елементи, тому що ще не всі браузери підтримують теги HTML5.

Наприклад, я зіткнувся з проблемою, використовуючи <header>тег - Chrome і FF працювали як шарм, але Opera налагодилася.

Поки всі браузери повністю не підтримують HTML, я вставлю їх, але покладаюся на старі для зворотної сумісності.


3
Використовуйте файл JavaScript 5 Shim JavaScript ( remysharp.com/2009/01/07/html5-enabling-script ), щоб пом'якшити будь-які можливі помилки сумісності в зворотному режимі з браузерами, такими як Opera та IE.
acconrad

Але тоді ваш сайт не є прихильним до нав'язливих сценаріїв :)
Demian Brecht

1
Ви маєте на увазі, як IE8 виходить з ринку ... так, як до 2016 року ...:)
Šime Vidas

@ Šime - точно :) І вимкнути Javascript більше не можна в браузерах;)
Demian Brecht

@ Agent_9191 це буде - я сьогодні повністю здивований, коли хотів просто перевірити, скільки людей все ще є на IE7 і здогадуюсь, що - у більшості країн у браузерах більше, ніж Opera або iPad safari, ніж у IE7. Я такий щасливий, що зараз можу відмовитись від підтримки IE7! І IE8 рано чи пізно піде. Це останній впертий браузер, з яким нам доведеться зіткнутися (IE9 не так вже й погано кодувати).
Каміло Мартін

2

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


+1 через те, що згадують, що для читачів екрану navs і as такі ж хороші, як і списки зараз.
Каміло Мартін

2

Для мене не упорядковані списки - це додаткова розмітка, яка насправді не потрібна. Переглядаючи документ HTML, я хочу, щоб він був максимально чистим і легким для читання. Глядачеві вже зрозуміло, що подається список, якщо використовується правильне відступ. Таким чином, додавання UL до цих тегів є непотрібним і ускладнює читання документа.

Хоча ви можете отримати певну гнучкість, я вважаю, що краща ідея не роздувати розмітку несемантичними класами ul та стилювати елементи одним махом. І у вас немає виправдань: використовуйте: перед і: після псевдоселекторів.

Редагувати : Мені стало відомо, що деякі читачі екранів ARIA трактують списки інакше, ніж прості теги прив’язки. Якщо ваш веб-сайт орієнтований на людей з обмеженими можливостями, я можу розглянути можливість використання підходу, заснованого на списку.


1

Ні, вони рівнозначні. Пам’ятайте, що HTML 5 назад сумісний із списками HTML 4, тому ви можете сміливо використовувати їх у тому ж плані. Розміщення - менше коду для другої версії.

Якщо вас турбує зворотна сумісність щодо веб-переглядачів, обов'язково включіть цю номенклатуру, щоб забезпечити функціональність тегів, таких як <nav>і <article>.


8
Список посилань надає додаткову семантику та доступність (наприклад, читачі екрану оголошують "Список трьох елементів" при введенні навігації).
robertc

@robertc Екран читачів екрана дуже хороший. Ви мали б поставити це на відповідь! Я б позначив це правильним. +1 у будь-якому випадку.
кікіто

1

Якщо ми говоримо «за книгою», то ні; Вам не потрібно використовувати списки для позначення навігації. Єдина реальна перевага, яку вони пропонують, - це забезпечити кращу ступінь гнучкості під час стилізації.


1

Я б тримати <ul><li>тег, тому що нові теги ( <nav>, <section>, <article>і так далі) є тільки більш семантичними варіантами <div>с.

З тієї ж причини, ви б не просто завантажили посилання в <div>, вони також повинні бути структуровані всередині <nav>тегу.


Причина, по якій я використовував <ul> s замість багатьох посилань у <div> в минулому, полягала в тому, що <ul> s були більш семантичними. Але тепер <nav> s більш семантичні. Я збентежений.
кікіто

2
<ul> s все ще більш семантичні, ніж прості <a> посилання, але <nav> є більш семантичними, ніж <div>. <ul> vs <a> відокремлений від <nav> vs <div>
whostolemyhat

Не піклування про семантику - це не шлях до написання HTML.
Ендрю Маршалл

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