Считается ли атрибут 'name' устаревшим для <a> тегов привязки?
-
03-07-2019 - |
Вопрос
Visual Studio не любит теги привязки на странице:
Проверка (переходный вариант XHTML 1.0):Атрибут 'name' считается устаревшим.Рекомендуется использовать более новую конструкцию .
Я использую name
атрибуты таким образом…
<?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>
Действительно ли есть более современный способ сделать это?Или Visual Studio полна дерьма?
Решение
Вам следует использовать id
атрибут вместо этого.Работает точно так же, и вам не нужен искусственный <a name=...>
, но просто
<h2 id="one">Section One</h2>
Другие советы
атрибуты name устарели в XHTML 1.0 - однако вы можете использовать атрибут id таким же образом, см. Идентификаторы фрагментов в Рекомендации по совместимости с HTML спецификации XHTML.
Таким образом, вы можете просто использовать
<h2><a id="one">Section One</a></h2>
Но обратите внимание, что спецификация 1.0 рекомендует перестраховаться с чем-то вроде этого:
<h2><a name="one" id="one">Section One</a></h2>
Однако ваш фрагмент использует XHTML 1.1, где атрибут name был полностью удален От a
и map
элементы - таким образом, вы можете использовать только идентификатор.
Я считаю, что современный подход заключается в использовании id
атрибут, который будет оцениваться как привязка.Например, если вы изменили
<h2><a name="one">Section One</a></h2>
Для
<h2><a id="one">Section One</a></h2>
Вы бы по-прежнему обращались к нему как page.html#one
.
Вы также можете сделать ссылку в заголовке раздела :
Содержание
<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>
Я считаю, что правильный способ сделать это - <a id="one">
Да, это устарело.Вы должны заменить его атрибутом "id".
Цитирование страницы w3schools:
"Атрибут id заменяет атрибут name HTML 4.01 определяет атрибут name для элементов a, applet, frame, iframe, img и map.В XHTML атрибут name устарел.Вместо этого используйте id."
name= атрибуты предназначены для обозначения элементов в форме и могут использоваться только для <form> элементов (input, textarea, select и т.д.).Для всего остального используется ID=.Точно неизвестно, почему сотрудники W3C решили, что необходимы два разных способа именования элемента (с разными наборами допустимых символов).
Но здесь http://www.w3.org/TR/html4/struct/links.html#h-12.2.3 Я прочитал это:"Некоторые старые пользовательские агенты не поддерживают привязки, созданные с помощью атрибута id". Итак?
До Тех пор , пока <a name="..."></a>
больше не поддерживается используемым вами стандартом (X) HTML - и не просто устарел - возможно, безопаснее использовать оба варианта name
и id
об якорях, ссылающихся на часть той же страницы.Из самого Спецификация W3C для XHTML 1:
В XML URI-ссылки RFC2396 которые заканчиваются фрагментом идентификаторы формы
"#foo"
не ссылайтесь на элементы с атрибутомname="foo"
;скорее, они ссылаются на элементы с атрибутом, определенным как тип ID, например,id
атрибут в HTML 4.Многие существующие клиенты HTML не поддерживается использованием ID-атрибутов типа таким образом, чтобы одинаковые значения могут быть поставлены оба эти атрибуты, чтобы обеспечить максимальную вперед и назад совместимость (напр.,<a id="foo" name="foo">...</a>)
.