In HTML5, la navigazione principale dovrebbe essere all'interno o all'esterno dell'elemento <header>?


167

In HTML5, so che <nav>può essere utilizzato all'interno o all'esterno <header>dell'elemento masthead della pagina . Per i siti Web con navigazione secondaria e principale, sembra comune includere la navigazione secondaria come <nav>elemento all'interno <header>dell'elemento masthead con la navigazione principale come <nav>elemento all'esterno <header>dell'elemento masthead . Tuttavia, se il sito Web non ha una navigazione secondaria, sembra comune includere la navigazione principale in un <nav>elemento all'interno <header>dell'elemento masthead .

Se seguo questi esempi, la mia struttura dei contenuti sarà basata sull'inclusione o esclusione della navigazione secondaria. Questo introduce un accoppiamento tra il contenuto e lo stile che sembra superfluo e innaturale.

Esiste un modo migliore per non spostare la navigazione principale dall'interno all'esterno <header>dell'elemento masthead in base all'inclusione o esclusione della navigazione secondaria?

Esempio di navigazione principale e secondaria

<header>
    <nav>
        <!-- Secondary Navigation inside <header> -->
        <ul>
            <li></li>
        </ul>
    </nav>
    <h1>Website Title</h1>
</header>
<nav>
    <!-- Main Navigation outside <header> -->
    <ul>
        <li></li>
    </ul>
</nav>

OnlineDegrees.org è un sito di esempio che segue il modello sopra.

inserisci qui la descrizione dell'immagine

Solo principale esempio di navigazione

<header>
    <h1>Website Title</h1>
    <nav>
        <!-- Main Navigation inside <header> -->
        <ul>
            <li></li>
        </ul>
    </nav>
</header>

Keyzo.co.uk è un sito di esempio che segue il modello sopra.

inserisci qui la descrizione dell'immagine

Estratti dall'introduzione di HTML5 - Aggiunti il ​​02-feb-11, 7:38

L'introduzione di HTML5 di Bruce Lawson e Remy Sharp ha questo da dire sull'argomento:

L'intestazione può anche contenere la navigazione. Questo può essere molto utile per la navigazione a livello di sito, in particolare su siti basati su modelli in cui l'intero<header> elemento potrebbe provenire da un file modello.

Naturalmente, non è necessario che l' <nav>essere in <header>.

Se dipende in gran parte dal fatto che ritieni che la navigazione a livello di sito appartenga all'intestazione a livello di sito e anche da considerazioni pragmatiche sulla facilità di stile.

Sulla base di quest'ultima frase, sembra che Bruce Lawson - autore del capitolo di quegli estratti - ammetta che "considerazioni pragmatiche sulla facilità di stile" producono un accoppiamento tra il contenuto e lo stile.


1
Dipende interamente dal design del tuo sito web. Prendi Twitter, ad esempio, la loro Homepage (la pagina che vedi prima di aver effettuato l'accesso), non ha una navigazione in alto. Tutto il loro "menu principale" è in fondo alla pagina. Ora, non so di te - ma non vorrei andare a chiamarlo intestazione ...
uSeRnAmEhAhAhAhAhA

Risposte:


84

Dipende tutto da te. Puoi inserirli nell'intestazione oppure no, purché gli elementi al loro interno siano solo elementi di navigazione interna (ovvero non collegare a siti esterni come un account Twitter o Facebook), quindi va bene.

Tendono a essere inseriti in un'intestazione semplicemente perché è lì che spesso va la navigazione, ma non è incastonata.

Puoi saperne di più su HTML5 Doctor .


5
Perché affermi che "fintanto che gli elementi al loro interno sono solo elementi di navigazione interna (ovvero non si collegano a siti esterni come un account Twitter o Facebook), allora va bene".
Matthew Rankin,

7
@Matthew perché l'elemento nav è solo per la navigazione in quel sito. Stavo solo chiarendo tutto.
Ian Devlin,

@MatthewRankin Che shock sarebbe fare clic su un'ancora all'interno di un <nav>elemento, solo per essere inviato a una nuova pagina con una navigazione completamente diversa. Per ancore a siti esterni senza una vera relazione con la tua, ricorda anche l' rel="nofollow"attributo per i collegamenti.
Anthony Rutledge,

So che è vecchio ... E i link ai sottodomini? Ad esempio un sito Web con siti diversi (sito di presentazione, sito di servizio, sito di autenticazione, ecc ...), hanno tutti una struttura diversa. Quello che sto facendo è posizionare quel collegamento all'interno <nav>dell'elemento ma non all'interno <ul>dell'elemento, disegnandolo in un modo che non fa parte dell'elenco di navigazione principale. Con l'eccezione che è la versione mobile, il link deve apparire nella stessa lista ... Comunque il pulsante è abbastanza descrittivo da sapere che stai andando da qualche altra parte ...
Chazy Chaz

5

Non è chiaro se stai chiedendo opinioni, ad es. "è comune fare xxx" o una regola reale, quindi mi spingerò nella direzione delle regole.

Gli esempi che citi sembrano basati sugli esempi nelle specifiche per l'elemento nav . Ricorda che le specifiche continuano a essere modificate e le regole a volte sono contorte, quindi mi permetto che molte persone tendano a fare solo ciò che viene dato piuttosto che interpretare. Stai mostrando due esempi separati con comportamenti diversi, quindi c'è solo così tanto da leggere. Uno di questi siti ha anche la situazione di sub / nav opposta, e in tal caso come la gestiscono?

Ancora più importante, tuttavia, non c'è nulla nelle specifiche che dicono che sia il modo di farlo. Uno degli obiettivi con HTML5 era quello di essere molto chiari [questo per il confronto] su semantica, requisiti, ecc., Quindi vale la pena notare l'omissione. Per quanto posso vedere, gli esempi sono indipendenti l'uno dall'altro e ugualmente validi nel loro contesto di requisiti di layout, ecc.

Avere la posizione di partenza del navigatore condizionata è una specie di sciocco (un'altra bandiera rossa). Basta scegliere un metodo e seguirlo.


4

Non mi piace mettere il nav nella intestazione . Il mio ragionamento è:

Logica

L' intestazione contiene informazioni introduttive sul documento. Il nav è un menu che collega ad altri documenti. A mio avviso, ciò significa che il contenuto del navigatore appartiene al sito anziché al documento. Un'eccezione sarebbe se il NAV mantenesse collegamenti in avanti.

Accessibilità

Mi piace mettere i menu alla fine del codice sorgente anziché all'inizio. Uso i CSS per inviarlo nella parte superiore dello schermo di un computer o alla fine per browser di sintesi vocale e schermi di piccole dimensioni. Questo evita la necessità di saltare i collegamenti.


2
tieni presente che i collegamenti saltati danno l'OPZIONE per saltare il menu, mentre mettere alla fine non dà la possibilità di non saltare (cioè navigare) - quindi saresti costretto ad aspettare fino alla fine per poter navigare correttamente , giusto?
Julix,

2
Per continuare sul punto di @julix, posizionare il nav alla fine, ma renderlo all'inizio lo renderà imbarazzante per gli utenti vedenti che eseguono la tabulazione nel documento.
Jason T Featheringham l'

3

@IanDevlin è corretto. Le regole di MDN dicono quanto segue :

"L'elemento di intestazione HTML" "definisce un'intestazione di pagina - in genere contenente il logo e il nome del sito e possibilmente un menu orizzontale ..."

La parola "forse" è la chiave. Continua dicendo che l'intestazione non deve necessariamente essere un'intestazione del sito. Ad esempio, è possibile includere un'intestazione in un pop-up modale o in altre parti modulari del documento in cui è presente un'intestazione e sarebbe utile che un utente su uno screen reader lo sappia.

In termini di utilizzo implicito di NAV puoi usarlo ovunque ci sia la navigazione del sito raggruppata, anche se di solito è omessa dalla sezione "piè di pagina" per mini-nav / collegamenti a siti importanti.

Dipende davvero dalla scelta personale / della squadra. Decidi cosa tu e il tuo team ritenete più semantico e più importante e cercate di essere coerenti. Per me, se il nav è in linea con il logo e la "h1" del sito principale, allora ha senso inserirlo nella "intestazione", ma se hai una scelta di design diversa, decidi caso per caso.

Soprattutto, controlla i documenti e assicurati che se scegli di omettere o includere capisci perché stai prendendo quella particolare decisione.


2

Per espandere ciò che ha detto @JoshuaMaddox, nell'area di apprendimento MDN, nella sezione "Introduzione all'HTML", la sottosezione della struttura del documento e del sito Web dice (grassetto / enfasi è da me):

Intestazione

Di solito una grande striscia nella parte superiore con una grande intestazione e / o logo. Qui è dove le principali informazioni comuni su un sito Web di solito rimangono da una pagina Web all'altra.

Barra di navigazione

Collegamenti alle sezioni principali del sito; solitamente rappresentato da pulsanti, collegamenti o schede di menu. Come l'intestazione, questo contenuto di solito rimane coerente da una pagina Web all'altra: avere una navigazione incoerente sul tuo sito Web porterà solo utenti confusi e frustrati. Molti web designer considerano la barra di navigazione come parte dell'intestazione piuttosto che un singolo componente, ma questo non è un requisito; in effetti alcuni sostengono anche che avere i due separati sia meglio per l'accessibilità, poiché gli screen reader possono leggere meglio le due caratteristiche se sono separate .


1
Voglio essere d'accordo sul fatto che un oggetto <nav>strutturato in una pagina potrebbe essere più accessibile di un oggetto <nav>nidificato più in profondità. Tuttavia, su quale base viene emessa questa sentenza? Gli screen reader stanno andando a casa su <nav>e<a> tag, in ogni caso. Il fattore importante è l'ordine strutturale dell'HTML. Successivamente, reattività. Rendere il primario <nav>(o uno qualsiasi <nav>) un figlio diretto di <body>facilita la manipolazione? È un codice HTML valido? A <nav>sta componendo il contenuto , e quindi è una misura naturale per vivere all'interno di una radice di sezionamento , come <body>. Vedi W3C HTML5
Anthony Rutledge,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.