Devo usar <ul> se <li> s dentro dos meus <nav> s?

114

O título explica muito bem.

Agora que temos uma <nav>tag dedicada ,

É isto:

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

melhor do que o seguinte?

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

Quer dizer, supondo que eu não precise de um nível DOM extra para algum posicionamento / preenchimento CSS, qual é a forma preferida e por quê?

kikito
fonte
Essa é uma boa pergunta ... Com tags que não fazem sentido para HTML 4, alguma das práticas recomendadas anteriores se aplica?
Guffa

Respostas:

63

o elemento nav e a lista fornecem informações semânticas diferentes:

  • O elemento nav comunica que estamos lidando com um bloco de navegação principal

  • A lista comunica que os links dentro deste bloco de navegação formam uma lista de itens

Em http://w3c.github.io/html/sections.html#the-nav-element, você pode ver que um elemento nav também pode conter prosa.

Então, sim, ter uma lista dentro de um elemento nav adiciona significado.

Thomas Maas
fonte
Muito obrigado, era disso que eu precisava! Além disso, o comentário de robertc sobre leitores de tela anunciando a "lista de 3 itens" abaixo foi muito útil.
kikito,
7
Parece que a etiqueta UL não ajuda em nada: css-tricks.com/navigation-in-lists-to-be-or-not-to-be
psycho brm
2
O link parece estar funcionando para mim. Certifique-se de ler o acompanhamento, que declara listas e nenhuma lista empate. css-tricks.com/wrapup-of-navigation-in-lists
RobW
Na minha opinião, um <nav>sem <ul><li>parece ter menus infantis mais dinâmicos. E se você tiver várias listas de menu que são de um tipo e posicionamento diferentes no <nav>? Eu agruparia essas listas de menu como <ul><li>no <nav>. Então, se seus menus forem regulares, eu iria com <ul><li>.
wonsuc
3

Neste ponto, eu manteria os <ul><li>elementos, porque nem todos os navegadores suportam tags HTML5 ainda.

Por exemplo, encontrei um problema ao usar a <header>tag - o Chrome e o FF funcionaram perfeitamente, mas o Opera funcionou.

Até que todos os navegadores suportem HTML completamente, eu os colocaria, mas confio nos antigos para compatibilidade com versões anteriores.

Demian Brecht
fonte
3
Use o arquivo HTML 5 Shim javascript ( remysharp.com/2009/01/07/html5-enabling-script ) para mitigar qualquer possível erro de compatibilidade com navegadores como Opera e IE.
acconrad
Mas seu site não é amigável para scripts não intrusivos :)
Demian Brecht
1
Você quer dizer até o IE8 sair do mercado ... assim, até 2016 ...:)
Šime Vidas,
@ Šime - precisamente :) E desligar o Javascript não é mais uma opção nos navegadores;)
Demian Brecht
@ Agent_9191 vai - Estou completamente surpreso hoje quando queria apenas verificar quantas pessoas ainda estão no IE7 e adivinhe - na maioria dos países há mais pessoas em navegadores como Opera ou iPad Safari do que no IE7. Estou muito feliz por poder cancelar o suporte para o IE7 agora! E o IE8 desaparecerá mais cedo ou mais tarde. É o último navegador teimoso que teremos de enfrentar (o IE9 não é tão ruim para codificar).
Camilo Martin
2

Depende de você realmente. Se você normalmente usa uma lista não ordenada para marcar seu menu de navegação, eu diria para continuar a fazer isso dentro do elemento <nav>. O objetivo do elemento <nav> é identificar a navegação do site para um leitor de computador, por exemplo, se você usa uma lista ou simplesmente links é irrelevante.

Ian Devlin
fonte
+1 por mencionar que, para leitores de tela, navs e as são tão bons quanto listas agora.
Camilo Martin
2

Para mim, as listas não ordenadas são marcações extras que não são realmente necessárias. Quando vejo um documento HTML, quero que seja o mais limpo e fácil de ler possível. Já está claro para o visualizador que uma lista está sendo apresentada se o recuo adequado for usado. Portanto, adicionar a UL a essas tags é desnecessário e torna a leitura do documento mais difícil.

Embora você possa ganhar alguma flexibilidade, eu acredito que é uma ideia melhor não aumentar a marcação com classes ul não-semânticas e estilizar os elementos a de uma só vez. E você não tem desculpa: use os pseudo-seletores: before e: after.

Editar : fui informado de que alguns leitores de tela ARIA tratam as listas de maneira diferente das tags âncora simples. Se o seu site for voltado para pessoas com deficiência, posso considerar o uso da abordagem baseada em lista.

user1429980
fonte
1

Não, eles são equivalentes. Lembre-se de que o HTML 5 é compatível com as listas do HTML 4, então você pode ficar à vontade para usá-las da mesma forma. A compensação é menos código para a 2ª versão.

Se você estiver preocupado com a compatibilidade com versões anteriores em relação aos navegadores, certifique-se de incluir este shim para fornecer funcionalidade de tags como <nav>e <article>.

Acconrad
fonte
8
Uma lista de links fornece semântica e acessibilidade adicionais (por exemplo, leitores de tela anunciarão 'Lista de três itens' quando você entrar na navegação).
robertc,
@robertc O ponto dos leitores de tela é muito bom. Você deveria ter colocado em uma resposta! Eu teria marcado como correto. 1 em qualquer caso.
kikito,
1

Se estivermos falando "pelo livro", então não; você não precisa usar listas para marcar sua navegação. A única vantagem real que oferecem é fornecer um maior grau de flexibilidade ao estilizar.

Phil.Wheeler
fonte
1

Eu manter as <ul><li>marcas, porque as novas tags ( <nav>, <section>, <article>e assim por diante) são apenas versões mais semânticas de<div> s.

Pela mesma razão, você não teria apenas uma carga de links em a <div>, eles também deveriam ser estruturados dentro de uma <nav>tag.

whostolemyhat
fonte
A razão pela qual usei <ul> s em vez de muitos links em um <div> no passado foi precisamente porque os <ul> s eram mais semânticos. Mas agora <nav> s são mais semânticos. Estou confuso.
kikito
2
Os <ul> s ainda são mais semânticos do que links <a> simples, mas <nav> é mais semântico do que <div>. O <ul> vs <a> é separado de <nav> vs <div>
whostolemyhat
Não se preocupando com a semântica não é o caminho a percorrer ao escrever HTML.
Andrew Marshall