‹Nav› или ‹menu› (HTML5)

W3Schools.com, и я почти уверен, что помню, как W3C.org заявлял, что <menu> следует использовать для меню панели инструментов и перечисления команд управления формой.

Итак, какой из них я должен использовать для своего главного меню? Nav или Menu? Это имеет значение?


person Community    schedule 11.02.2011    source источник
comment
Вы можете прочитать w3fools.   -  person zzzzBov    schedule 11.02.2011
comment
Что такое «команда управления формой»?   -  person Mads Skjern    schedule 13.08.2014


Ответы (5)


nav используется для групп внутренних ссылок (a элементов). Обычно это означает, что ссылки должны переходить на отдельные страницы или изменять содержимое в случае страницы AJAX. Ожидайте какого-либо изменения содержимого при нажатии на nav элемент.

menu используется для групп элементов управления (a, input, button). Обычно это означает, что входные данные должны выполнять функцию на странице. Ожидайте какого-то взаимодействия с javascript при нажатии на menu элемент.

nav: навигация по сайту.

menu: меню веб-приложения.

person zzzzBov    schedule 11.02.2011
comment
Интересный факт: спецификация позволяет вкладывать <li> элементы непосредственно в тег <menu>, без необходимости в списке <ul>. Требование состоит в том, чтобы атрибут type <menu> был опущен или установлен на "toolbar". См. Спецификацию для <li> element и элемент <menu>. - person tomekwi; 27.05.2015
comment
Может ли кто-нибудь указать мне на <menu> в одной из спецификаций W3C HTML5? Я нахожу его в WHAT WG version, но не в последний черновик W3C HTML 5.3. - person Garret Wilson; 21.02.2020

Вот сообщение HTML5Doctor на nav с разделом о том, чем он отличается от menu (в основном, используйте его в актуальные приложения). Похоже, ты хочешь nav.

person Su'    schedule 11.02.2011

С <menu> он обычно используется для контекстных меню.

У MDN есть хорошая документация: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/menu

person Jack    schedule 01.10.2013

Лучшее место, чтобы получить этот ответ, - это сами стандарты HTML 5.

Меню определено в HTML 5.1, 2-е издание.

Это «... представляет собой группу команд».


Nav определяется в HTML 5.

Это «... раздел страницы, который ссылается на другие страницы или части страницы: раздел со ссылками для навигации».

Есть примечания для навигации, которые я не включил, но считаю важными, но я думаю, что вам лучше получить определение самостоятельно из стандартов.

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

person kevin    schedule 26.12.2018

<nav> - это раздел (например, <section> или <article>), поэтому он будет отображаться в структуре вашего HTML-документа. Из-за этого я бы использовал <menu> 99% времени. Для меня <nav> - это смесь между <section> и <menu> с добавленным ограничением, что <nav> следует использовать специально для навигации, тогда как <menu> может быть для всего, что можно назвать меню (включая панель навигации). Таким образом, большинство панелей навигации, несмотря на то, что они являются панелями навигации, не соответствуют строгим требованиям <nav>, и <menu> более подходит.

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

person Nick Manning    schedule 16.04.2014
comment
Это неверно. Вам следует редко (если вообще когда-либо) использовать <menu> на веб-сайте, который не является веб-приложением - в 99% случаев ваше "меню" навигации будет представлять собой статические ссылки на другие страницы или другие разделы на странице. , для чего <nav>, согласно спецификации. - person Ivan Durst; 26.05.2015
comment
@IvanDurst, я хочу сказать, что если вы создаете просто список статических ссылок, nav не является хорошим выбором тега, потому что nav является элементом раздела, поэтому он станет частью структуры документа, как если бы это раздел с заголовком и содержимым . На самом деле это редкий сценарий, когда вы хотите, чтобы ваш nav работал как секция. menu был просто предложением в качестве семантической замены. Я не вижу ничего в спецификации, что это нельзя использовать таким образом. Кажется, подходит. Но если вы по какой-то причине считаете, что меню предназначено только для того, что вы определяете как веб-приложение, я рекомендую ol или ul в качестве замены. - person Nick Manning; 26.05.2015
comment
Согласно таблице совместимости, здесь, <menu> все еще имеет плохую поддержку в настоящее время. (Неужели это правда, что Chrome не поддерживает его ??) Кроме того, вы можете добиться той же семантики, предоставив атрибут role="menu" другому элементу (например, div или nav). Атрибут role переопределяет семантику по умолчанию для любого элемента. - person brennanyoung; 18.05.2018