[whatwg] Attributes vs. Elements
Maciej Stachowiak
mjs at apple.com
Mon Mar 12 11:25:07 PDT 2007
The recent discussion of possibly making the href attribute global
brings to mind a broader issue. To what extent should semantics and
behavior belong to specific elements, and to what extent should they
be carried by global attributes that can apply to any element?
XHTML2 moves a lot of semantics and behavior from elements to global
attributes. For example, href can turn any element into a hyperlink,
and src can turn any element into an image.
HTML5 has so far not taken this approach - elements generally remain
distinct, and new behaviors and semantics appear in the form of new
elements.
In my opinion, it is usually better to put primary semantics on
elements rather than attributes. Here are a few reasons, in
approximate decreasing order of importance:
- An element is generally seen as a separate thing in itself, whereas
an attribute is just an attribute. So it is natural to think of an
element having more semantic strength than an attribute.
- Semantics that has associated behavior often has an associated DOM
API. For example, the A element has a number of attributes related to
its use as a hyperlink source, to programmatically retrieve or change
only part of the href URI. If any element could have the href
attribute, the options become omitting the API, adding it to all
elements, or (yuck) making it conditionally present on all elements
based on presence or absence of the attribute.
- It's easier (and, in many implementations, more efficient) to style
by tag name rather than by presence or absence of an attribute.
- Typically, browser implementations have an implementation class per
element, but not a class per attribute, so putting primary semantics
and behavior on an element instead of an attribute promotes clean
implementation. Otherwise, all behavior ends up in the HTMLElement
base class.
Finally, I'd like to conclude with this reductio ad absurdum of the
XHTML2 approach. If assigning behavior and semantics to attributes is
so much better, why not just have a single <elt> element:
<elt role="paragraph">My cat is really cute: <elt
src="mycat.jpeg">picture of my cat</elt>. Check out <elt
href="story.html">this <elt role="emphasis">hilarious</elt> story
about her</elt>.</elt>
I find the HTML approach much more readable and more semantically clear:
<p>My cat is really cute: <img src="mycat.jpg" alt="picture of my
cat">. Check out <a href="story.html">this <em>hilarious</em> story
about her</a>.</p>
Regards,
Maciej
More information about the whatwg
mailing list