O atributo 'nome' é considerado desatualizado para tags âncora <a>?
-
03-07-2019 - |
Pergunta
O Visual Studio não gosta de tags âncora na página:
Validação (XHTML 1.0 Transicional):Atributo 'Nome' é considerado desatualizado.Uma construção mais recente é recomendada.
estou a usar name
atributos desta forma…
<?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>
Existe realmente uma maneira mais moderna de fazer isso?Ou o Visual Studio está cheio de porcaria?
Solução
Você deve usar o id
atributo em vez disso. Funciona da mesma maneira, e você não precisa de um artificial <a name=...>
, mas simplesmente
<h2 id="one">Section One</h2>
Outras dicas
atributos de nome são preteridos em Xhtml 1.0 - Você pode usar um atributo de identificação da mesma maneira, veja Identificadores de fragmentos no Diretrizes de compatibilidade HTML da especificação xhtml.
Então você pode simplesmente usar
<h2><a id="one">Section One</a></h2>
Mas observe que a especificação 1.0 recomenda tocá -lo seguro com algo assim:
<h2><a name="one" id="one">Section One</a></h2>
No entanto, seu fragmento usa XHTML 1.1, onde o atributo de nome foi totalmente removido a partir de a
e map
Elementos - para que você possa usar apenas um ID.
Eu acredito que a abordagem moderna é usar o id
atributo, que seria avaliado como uma âncora. Por exemplo, se você mudou
<h2><a name="one">Section One</a></h2>
para
<h2><a id="one">Section One</a></h2>
Você ainda abordaria como page.html#one
.
Você também pode vincular um cabeçalho de seção:
Índice
<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>
Eu acredito que a maneira correta de fazer isso é
Sim, está desatualizado. Você deve substituir pelo atributo "id".
Citando a página W3Schools:
"O atributo ID substitui o atributo de nome HTML 4.01 define um atributo de nome para os elementos A, applet, quadro, iframe, img e mapa. Em xhtml, o atributo de nome está preguiçoso. Use ID em vez disso."
Os atributos name= servem para rotular elementos em um formulário e só podem ser usados em elementos <form> (input, textarea, select etc).Para todo o resto, ID= é usado.Não se sabe exatamente por que o pessoal do W3C pensava que eram necessárias duas maneiras diferentes de nomear um elemento (com diferentes conjuntos de caracteres permitidos).
Mas aqui http://www.w3.org/tr/html4/struct/links.html#h-12.2.3 Eu li o seguinte: "Alguns agentes de usuários mais antigos não suportam âncoras criadas com o atributo ID". Então?
Até <a name="..."></a>
não é mais suportado pelo padrão HTML (x) que você está usando-e não apenas depreciado-pode ser mais seguro usar os dois name
e id
nas âncoras que ligam a uma parte da mesma página. De Especificação XHTML 1 do W3C:
Em XML, URI-Referências RFC2396 esse fim com identificadores de fragmentos da forma
"#foo"
Não se refira a elementos com um atributoname="foo"
; Em vez disso, eles se referem a elementos com um atributo definido para ser do tipo ID, por exemplo, oid
Atributo no HTML 4. Muitos clientes HTML existentes não suportam o uso de atributos do tipo ID dessa maneira; portanto, valores idênticos podem ser fornecidos para ambos os dois atributos para garantir a compatibilidade máxima para frente e para trás (por exemplo,, por exemplo,<a id="foo" name="foo">...</a>)
.