L'attributo "name" è considerato obsoleto per < a > etichette di ancoraggio?
-
03-07-2019 - |
Domanda
A Visual Studio non piacciono i tag di ancoraggio nella pagina:
Convalida (XHTML 1.0 Transitional): L'attributo 'nome' è considerato obsolete. Un costrutto più recente è consigliato.
Sto usando gli attributi name
in questo modo & # 8230;
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://www.w3.org/MarkUp/SCHEMA/xhtml11.xsd" xml:lang="en">
...
<body>
...
<p>On this page…</p>
<ul>
<li><a href="#one">Section One</a></li>
...
</ul>
...
<h2><a name="one">Section One</a></h2>
...
</body>
</html>
Esiste davvero un modo più moderno di farlo? O Visual Studio è pieno di schifezze?
Soluzione
Dovresti invece usare l'attributo id
. Funziona allo stesso modo e non hai bisogno di un < a name = ... >
artificiale, ma semplicemente
<h2 id="one">Section One</h2>
Altri suggerimenti
gli attributi del nome sono deprecati in XHTML 1.0 - puoi utilizzare un attributo id nello stesso comunque, vedi Identificatori di frammenti in Linee guida per la compatibilità HTML delle specifiche XHTML.
Quindi puoi semplicemente usare
<h2><a id="one">Section One</a></h2>
Ma nota che le specifiche 1.0 raccomandano di giocare in sicurezza con qualcosa del genere:
<h2><a name="one" id="one">Section One</a></h2>
Tuttavia, il tuo frammento utilizza XHTML 1.1 , dove l'attributo name è stato completamente rimosso da a
e map
elements - quindi puoi usare solo un id.
Credo che l'approccio moderno sia usare l'attributo id
, che verrebbe valutato come un'ancora. Ad esempio, se hai cambiato
<h2><a name="one">Section One</a></h2>
a
<h2><a id="one">Section One</a></h2>
Lo indirizzeresti comunque come page.html # one
.
Puoi anche collegare un'intestazione di sezione:
Sommario
<P>
<A href="#section1">Introduction</A><BR>
<A href="#section2">Some background</A><BR>
<A href="#section2.1">On a more personal note</A><BR>
...the rest of the table of contents...
...the document body...
<H2 id="section1">Introduction</H2>
...section 1...
<H2 id="section2">Some background</H2>
...section 2...
<H3 id="section2.1">On a more personal note</H3>
...section 2.1...
[...]
</P>
Credo che il modo corretto di farlo sia < a id = " one " >
Sì, è obsoleto. Devi sostituirlo con l '"id" attributo.
Citando la pagina w3schools:
" L'attributo id sostituisce il nome attributo HTML 4.01 definisce un attributo name per gli elementi a, applet, frame, iframe, img e map. In XHTML l'attributo name è deprecato. Usa invece id. "
??name = servono per etichettare gli elementi in un modulo e possono essere usati solo su < form > elementi (input, textarea, select etc). Per tutto il resto, viene utilizzato ID =. Non è noto perché la gente del W3C pensasse che fossero necessari due modi diversi di nominare un elemento (con diversi set di caratteri consentiti).
Ma qui http: //www.w3. org / TR / html4 / struct / links.html # h-12.2.3 Ho letto questo: " Alcuni agenti utente meno recenti non supportano gli ancoraggi creati con l'attributo id. " Quindi?
Fino a quando < a name = " ... " > < / a >
non è più supportato dallo standard (X) HTML che stai utilizzando - e non è solo obsoleto - potrebbe essere più sicuro usare sia name
che id
su ancore che si collegano a una parte della stessa pagina. Dalla specifica XHTML 1 del W3C :
In XML, riferimenti URI RFC2396 che terminano con un frammento gli identificatori del modulo
" # foo "
non si riferiscono ad elementi con un attributoname = " foo "
; piuttosto, si riferiscono ad elementi con un attributo definito come di tipo ID, ad esempio l'attributoid
in HTML 4. Molti client HTML esistenti non supportano l'utilizzo degli attributi di tipo ID in questo modo, quindi identici i valori possono essere forniti per entrambi questi attributi per garantire il massimo in avanti e all'indietro compatibilità (ad es.< a id = " foo " name = " foo " > ... < / a >)
.