Che è più corretto: <h1> <a> ... </a> </h1> OPPURE <a> <h1> ... </h1> </a>


166

Sono entrambi validi <h1><a ...> ... </a></h1>e <a ...><h1> ... </h1></a>HTML, o è solo uno corretto? Se sono entrambi corretti, differiscono nel significato?

Risposte:


155

Entrambe le versioni sono corrette. La più grande differenza tra loro è che nel caso del <h1><a>..</a></h1>solo testo nel titolo sarà cliccabile.

Se inserisci la proprietà <a>around <h1>e css displayè block(che è per impostazione predefinita ), sarà possibile fare clic sull'intero blocco (l'altezza del <h1>e il 100% della larghezza del contenitore in cui <h1>risiede).

Storicamente non è stato possibile inserire un elemento di blocco all'interno di un elemento inline, ma non è più il caso di HTML5. Penserei che l' <h1><a>..</a></h1>approccio sia più convenzionale però.

Nel caso in cui si desideri inserire un'ancora nell'intestazione, un approccio migliore di quello <a id="my-anchor"><h1>..</h1></a>sarebbe utilizzare idl' nameattributo <h1 id="my-anchor">..</h1>o in questo modo: oppure<h1 name="my-anchor">..</h1>



2
<a> <h1> .. </h1> </a> suono preferibile per HTML 5 poiché offre agli utenti di dispositivi touch un target di clic più grande, giusto?
Acyra,

Quando un titolo e un sottotitolo si collegano entrambi allo stesso contenuto, è visivamente più attraente avvolgerli entrambi nello stesso <a>modo in modo che condividano uno stato al passaggio del mouse: jsfiddle.net/jjyLemq2
Slam

26

In pre HTML 5 questo

<a><h1>..</h1></a>

non verrà convalidato. Puoi usarlo in HTML 5. Tuttavia, vorrei usare questo:

<h1><a>..</a></h1>

a meno che non sia necessario aggiungere più di <h1> all'interno di <a>


8

<a><h1></h1></a>non è valido W3C ... Fondamentalmente, non è possibile inserire elementi di blocco all'interno di elementi incorporati


26
È valido in HTML 5
vaidas l'

1
sì .. ma in qualche modo sento che inserire elementi a blocchi all'interno di un collegamento è un po 'sciatto (opinione personale), come non chiudere un tag (valido in HTML5) .. ma ehi! .. forse
influisce

7

<h1><a>..</a></h1>e si <a><h1>..</h1></a>sono sempre comportati quasi allo stesso modo, quando i fogli di stile non influiscono sul rendering. Quasi, ma non del tutto. Se navighi usando il tasto tab o ti concentri su un collegamento, un rettangolo di messa a fuoco appare attorno al collegamento nella maggior parte dei browser. Per <h1><a>..</a></h1>, questo rettangolo è solo attorno al testo del collegamento. Infatti <a><h1>..</h1></a>, il rettangolo si estende attraverso lo spazio orizzontale disponibile, poiché il markup rende l' aelemento un elemento a blocchi nel rendering, occupando la larghezza del 100% per impostazione predefinita.

Quanto segue mostra come <a href=foo><h1>link</h1></a>viene eseguito il rendering di un focus da Chrome:

inserisci qui la descrizione dell'immagine

Ciò implica che se si disegnano elementi, ad esempio impostando un colore di sfondo per i collegamenti, gli effetti differiscono in modo simile.

Storicamente, è <a><h1>..</h1></a>stato dichiarato non valido in HTML 2.0 e le successive specifiche HTML hanno seguito l'esempio, ma HTML5 lo modifica e lo dichiara valido. La definizione formale non ha interessato i browser, ma solo i validatori. Tuttavia, è possibile da remoto che alcuni programmi utente (probabilmente non normali browser, ma ad esempio renderizzatori HTML specializzati, estrattori di dati, convertitori, ecc.) Non riescano a gestirsi <a><h1>..</h1></a>correttamente, poiché non è stato consentito nelle specifiche.

Raramente c'è una buona ragione per trasformare un titolo o un testo in un titolo in un collegamento. (È principalmente illogico e dannoso per l'usabilità.) Ma una domanda simile si è posta spesso quando si fa di un'intestazione (o testo in un'intestazione) una potenziale destinazione per un collegamento, usando ad esempio <h2><a name=foo>...</a></h2>contro <a name=foo><h2>...</h2></a>. Considerazioni simili si applicano a questo (entrambi funzionano, potrebbe esserci una differenza poiché quest'ultimo rende l' aelemento un blocco e prima di HTML5, solo il primo è formalmente consentito). Ma in aggiunta, entrambi i modi sono obsoleti, e utilizzando l' idattributo direttamente sull'elemento titolo è ora raccomandato: <h2 id=foo>...</h2>.


8
"There is seldom a good reason to make a heading or text in a heading a link"-> Non sono d'accordo su quello. In realtà ci sono molte buone ragioni per rendere un'intestazione un collegamento. Esempio fornito: un elenco di post di blog, in cui ogni titolo è anche un collegamento. Oppure controlla SO stesso: tutte le domande in prima pagina sono h3elementi e anche un link. Comunque, buona spiegazione;)
giorgio,

@giorgio, ad esempio i link SO di cui parli sono dannosi per l'usabilità: creare un link per fare riferimento alla pagina stessa è inutile e confuso.
Jukka K. Korpela,

1
Bene, intendo i link SO sulla homepage, che indirizzano l'utente a un'altra pagina, la pagina delle domande in particolare. E sì, il link nell'intestazione nella pagina delle domande è (non del tutto) inutile, ma ciò non lo rende necessariamente negativo per l'usabilità. Il motivo principale è il SEO (nella pagina delle domande).
giorgio,

1
Quella cosa SEO loopback h1 è qualcosa di brutto per l'usabilità. Perché il titolo di una pagina (h1) farebbe in modo che uno screen reader annunciasse un collegamento da qualche altra parte? È molto confuso. E per lo stesso motivo, avere un collegamento in sottotitoli è confuso, quando qualcosa è presumibilmente il titolo di una sezione all'interno della pagina e anche il titolo di un'altra pagina.
Adam,

5

Gli elementi H1 sono elementi a livello di blocco e le ancore sono elementi incorporati. È consentito avere un elemento inline all'interno di un elemento a livello di blocco ma non viceversa. Se si considera il modello a scatola e le specifiche HTML, questo ha senso.

Quindi in conclusione il modo migliore è:

<h1><a href="#">Link</a></h1>

2
"Questo ha senso" , dici in modo criptico senza alcuna spiegazione del perché, ma viene specificato il comportamento di un elemento a livello di blocco all'interno di un elemento inline . Avere elementi a livello di blocco all'interno di elementi incorporati non è mai stato sbagliato. Inoltre, le specifiche HTML 5 e HTML Living Standard vanno benissimo con le intestazioni all'interno delle ancore. Questa risposta è semplicemente sbagliata.
Mark Amery,

1

vuoi usare un collegamento ipertestuale <a href="…">/ a:linko vuoi aggiungere un'ancora alla tua intestazione? se vuoi aggiungere un'ancora, puoi semplicemente assegnare un id <h1 id="heading">. puoi quindi collegarlo come page.htm#heading.

se vuoi rendere cliccabile l'intestazione (un link), usa prima gli elementi <h1><a></a></h1>/ h1 > a- blocklevel e gli elementi incorporati all'interno


1

Inoltre, esistono differenze nella gerarchia di stile. Se lo hai come <h1><a href="#">Heading here</a></h1>, Gli stili dell'ancora avranno la precedenza sugli stili dell'elemento h1. Esempio:

a {color:red;font-size:30px;line-height:30px;}

OVERRULE

h1 {color:blue;font-size:40px;line-height:40px;}

-1 perché questo non affronta affatto la domanda (di cui è più corretta).
Mark Amery,
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.