- From: Leif Halvard Silli <lhs@malform.no>
- Date: Wed, 10 Jun 2009 04:52:36 +0200
- To: HTMLWG <public-html@w3.org>
Review:
These two examples are valid:
<p id=anchor><a href=#anchor-B>text</a></p>
<a href=#anchor><p><span id=anchor>text</span></p></a>
But these, semantically identical, examples are invalid. Why?
<a id=anchor><p><a href=#anchor>text</a></p></a>
<a href=#anchor><p><a id=anchor><span>text</span></a></p></a>
The content model description locks out "interactive content"
descendants[1]:
"Content model: Transparent, but there
must be no interactive content descendant."
However, the definition of "interactive content" [2] does not state that
anchor elements without the href attribute are considered "interactive
content". (Probably because they are not.)
The draft says that an anchor elements without the href attribute[1]:
"_represents_ a placeholder for where a link might
otherwise have been placed, if it had been relevant"
The draft points to a definition of "represents" [3]:
"In the absence of style-layer rules to the contrary
(e.g. author style sheets), user agents are expected
to render an element so that it conveys to the user
the meaning that the element _represents_, as
described by this specification."
This directly contradicts how things works: Unless <a> contains the href
attribute, then user agents are _not_ expected to convey to users that
the element represents a potential link. (Exception that confirms the
rule: some user agents do not discern properly between anchor elements
with and without the href attribute w.r.t. CSS selectors, when in quirks
mode.) Only if the text had been speaking about anchor elements _with_
the href attribute would the "represents" definition apply to <a>
without href! For example, the VIM editor will colour the content of <a
href>content</a> blue. But if I remove the four letter word "href", then
it won't. Firefox, Opera, Safari behave similar. But IE apparently not.
The content model also points to a definition of "transparent" which
says that transparent elements must not contain [4]:
"... content that would not be conformant if all transparent
elements in the tree were replaced, in their parent element,
by the children in the "transparent" part of their content
model, retaining order."
In other words, if you remove the anchor elements, the code should still
be valid. Thus, the <a> element do not allow you to insert something
that otherwise would be invalid.
None of this is IMHO able to justify that anchor elements cannot be
nested. It does, though, justify that an anchor element with the href
attribute cannot be nested into another anchor element with the href
attribute.
However, as a matter of fact, when testing in Live DOM viewer, it turns
out that nesting of <a> elements are more or less impossible regardless
of whether they are interactive (= have @href) or not. But is that the
way it should be?
Proposals:
The draft is adjusted to
* give better reasons for why nesting of a elements are not permitted.
(E.g. it could say that "for the purpose of the definition of the
content model, all anchor elements, regardless of presence of href, are
considered interactive.)
* give due focus to <a> elements that play the role of fragment
identifiers. (The current flaws in the draft are due to over-focus on
the interactive version of the a element.)
[1]
http://www.whatwg.org/specs/web-apps/current-work/multipage/text-level-semantics.html#the-a-element
[2]
http://www.whatwg.org/specs/web-apps/current-work/multipage/dom.html#interactive-content-0
[3]
http://www.whatwg.org/specs/web-apps/current-work/multipage/the-xhtml-syntax.html#represents
[4]
http://www.whatwg.org/specs/web-apps/current-work/multipage/dom.html#transparent
--
leif halvard silli
Received on Wednesday, 10 June 2009 02:53:14 UTC