Visual Studio doesn't like on-page anchor tags:
Validation (XHTML 1.0 Transitional): Attribute 'name' is considered outdated. A newer construct is recommended.
I'm using name attributes in this way…
<?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>
Is there really a more-modern way of doing this? Or is Visual Studio full of crap?
-
I believe the proper way to do it is <a id="one">
-
name attributes are deprecated in XHTML 1.0 - you can use an id attribute in the same way though, see Fragment Identifiers in the HTML Compatibility Guidelines of the XHTML spec.
So you can simply use
<h2><a id="one">Section One</a></h2>But note that the 1.0 spec recommends playing it safe with something like this:
<h2><a name="one" id="one">Section One</a></h2>However, your fragment uses XHTML 1.1, where the name attribute has been entirely removed from
aandmapelements - so you can only use an id.Jörg W Mittag : Actually, the fragment in the question is XHTML 1.1, which means that `name` is not just deprecated, it's plain illegal.Paul Dixon : Well spotted, I missed that he was using 1.1 - will amend answerR. Bemrose : I'm assuming 1.1 still has the name attribute for the input tag, though... I don't have time to check it at the moment.R. Bemrose : I should explain why I assume it still have the name attribute for input: radio buttons all have the same name, and checkboxes are also allowed to have the same name to have their values grouped together.Paul Dixon : sorry, yes I overstated - it's removed from a and map tags -
I believe the modern approach is to use the
idattribute, which would be evaluated as an anchor. For example, if you changed<h2><a name="one">Section One</a></h2>to
<h2><a id="one">Section One</a></h2>You would still address it as
page.html#one. -
You should use the
idattribute instead. Works the same way, and you don't need an artifical<a name=...>, but simply<h2 id="one">Section One</h2> -
Yes it is outdated. You should replace with the "id" attribute.
Quoting w3schools page:
"The id Attribute Replaces The name Attribute HTML 4.01 defines a name attribute for the elements a, applet, frame, iframe, img, and map. In XHTML the name attribute is deprecated. Use id instead."
-
You can also link on a section header :
Table of Contents
<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> -
name= attributes are for labeling elements in a form, and can only be used on <form> elements (input, textarea, select etc). For everything else, ID= is used. Exactly why the W3C folks thought two different ways of naming an element (with different sets of allowable characters) were needed is not readily known.
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.