Атрибут "name" считается устаревшим для тегов привязки?

Visual Studio не любит теги привязки на странице:

проверка (переходный XHTML 1.0): Имя атрибута '' является устаревший. Новая конструкция рекомендуемый.

Я использую 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&hellip;</p>
        <ul>
            <li><a href="#one">Section One</a></li>
            ...
        </ul>
        ...
        <h2><a name="one">Section One</a></h2>
        ...
    </body>
</html>

есть ли действительно более современный способ сделать это? Или Visual Studio полна дерьма?

9 ответов


вы должны использовать 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 elements-таким образом, вы можете использовать только id.


Я считаю, что современный подход заключается в использовании 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>

источник:http://www.w3.org/TR/REC-html40/struct/links.html


Я считаю, что правильный способ сделать это -


Да, он устарел. Вы должны заменить атрибут "id".

цитирование страницы w3schools:

"атрибут id заменяет атрибут name HTML 4.01 определяет атрибут name для элементов a, апплета, фрейма, iframe, img и карты. В XHTML атрибут name устарел. Вместо этого используйте id."

http://www.w3schools.com/Xhtml/xhtml_syntax.asp


name= атрибуты предназначены для маркировки элементов в форме и могут использоваться только для элементов

(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 на якорях, ссылающихся на часть той же страницы. От спецификация XHTML 1 W3C:

в XML, URI-ссылки RFC2396 с фрагментом идентификаторы формы "#foo" не ссылаться на элементы с атрибутом name="foo"; а, они ссылаются на элементы с атрибутом определенного типа id, например,id атрибут в HTML 4. Многие существующие HTML-клиенты не поддерживают использование атрибутов типа ID таким образом, поэтому они идентичны значения могут быть предоставлены для обоих этих атрибутов, чтобы обеспечить максимум вперед и назад совместимость (например,<a id="foo" name="foo">...</a>).