Matthew Raymond wrote:
The role attribute currently describes behavior, and is added so that
users with disabilities know what the behavior for a given element is,
according to well-known semantics. CSS is supposed to be for
presentational. In your scenarior, will there be any way to easily know
whether one of the items in the class attribute describes the behavior
is purely presentational?
Well, authors are not supposed to put in purely presentational class
names to begin with
Show me a spec that says that in a normative way. It is merely a "best
practice". Class names, in general, are meaningless and meaningful class
names should not be part of the core specification.
I have yet to hear an
argument with regards to why |class| can perform the same functions that
|role| can, especially given the allowance in the HTML 4.01 spec for
"general purpose processing".
Of course, if you plan to put all the semantics of a document in the
class names, we could do away with many elements. Do you object to <div
class="h1"> as a replacement for <h1>?
Otherwise, both authors and machine processors
will be easily confused by it.
Eh?
The values for |role| are nothing more than a new set of class names,
and there is nothing preventing the user from putting in unidentified
|role| values for presentational purposes and then styling them via CSS
using attribute selectors. So aside from being mildly harder to select
from CSS, |role| values are potentially no more semantic than |class|
values.
Authors can misuse anything. <h1 style="font-size:12px;
font-weight:normal;">This is the main text of my document put in a
heading so that search bots think that it's really relevant and useful</h1>.
However, let's assume that people would only use semantic values in
|role|. What becomes of |class|? We use it only for styling? That won't
work, because HTML is supposed to be semantic.
We use it for it's purpose - to provide hooks to enable presentational
languages to couple to arbitrary groups of elements on a page. This kind
of non-semantic hook is _necessary_ so that the temptation to abuse the
semantic elements is greatly reduced.
So what we end up doing is replacing |class| with an attribute named
|role| that has more rules but otherwise does the same thing.
No. We add an attribute which conveys specific semantics ("this element
is being used as a UI widget of a particular type). We standardize some
well-researched values for that element that are applicable to the needs
of non-visual UAs in the real world.