W3C home > Mailing lists > Public > public-html-comments@w3.org > April 2010

Re: Alternate syntax for defining class attribute

From: Eduard Pascual <herenvardo@gmail.com>
Date: Sat, 10 Apr 2010 00:45:47 +0200
Message-ID: <l2h6ea53251004091545g2bfed8a5m3e3be4dacd269c69@mail.gmail.com>
To: "Musgrove, Jason L" <J.L.Musgrove2@wlv.ac.uk>
Cc: "T.J. Crowder" <tj@crowdersoftware.com>, public-html-comments@w3.org
On Fri, Apr 9, 2010 at 11:05 PM, Musgrove, Jason L
<J.L.Musgrove2@wlv.ac.uk> wrote:
> Firstly, I’m not sure the syntax is valid SGML or XML – the two
> serializations that HTML5 supports (I’m assuming the “HTML” serialization is
> based upon SGML, like HTML 4 was).
HTML5 is *not* SGML. The main reason for this is that no browser has
ever parsed HTML as by SGML rules; and there is no reason to think
that browser vendors are planning to change that. Thus, it makes no
sense to specify something that doesn't match, and will never match,
reality. Even if we could convince browser vendors to switch to
SGML-compliant parsing, that's not something we want, since it would
cause a huge amount of legacy content to miserably break (for example,
all the "XHTML as text/html" content would start breaking at the first
<meta />, <link />, or any other self-closing tag; and that's likely
to be quite early on the document).

Thus the HTML5 spec has the ability to define syntax sugar features
like this one. Whether it should or not is another story.

> Secondly, there would be a significant problem with backwards-compatibility.
> I’ve just tried using one of these “hybrid” tags in Firefox 3.6, and IE8 –
> neither of them recognised “<h1.test>” as a “<h1>” tag – possibly making
> documents using them completely unreadable in current browsers (and to
> anyone who thinks this is unimportant as “everybody will have the latest
> browser installed” – I know of many institutions, including my own employer,
> that still has IE6 on the desktop).
That's, IMO, the strongest and soundest argument against the proposal;
and I fully agree with it.
It's not unsolvable, however. A possible solution would be to allow
whitespace before the dot; and recommending its inclusion until
pre-HTML5 browsers die off (just like many features recommend the use
of their different fallback mechanisms during this "transition
period").

> Thirdly, there’s the mixing of semantics and presentation – something that
> the CSS aimed to separate. The tag’s name (which, as far as I understand, is
> every valid identifier character up to the first whitespace, or the end of
> the tag, whichever comes first) defines its purpose, not its presentation.
There is no such mixing. The element name defines the basic structural
role of the element and, *sometimes*, part of its semantics. The class
attribute is there to allow further semantic categorization without
having to define all possible categories (which are probably infinite)
as HTML elements. This was true for HTML4, and is even truer for
HTML5, since the spec adds emphasis on that purpose.
The fact that CSS can easily hook to class values doesn't make the
class attribute presentational. CSS can also hook on ID's, and that
doesn't make the id attribute presentational. Even further: the
simplest CSS hooking available is the Type selector: does that make
each element presentational?
Also note how Microformats, a purely semantic technology, relies
entirely on the class attribute. I hope you don't attempt to claim
that Microformats are presentational just because of that.

I'll concede that *typical usage* of class has been much more
presentational than it should, most prominently among hobbyists and
newbies who would happily use stuff like <font> and the like anyway;
but presentational class names are well known to be a bad idea even on
practical aspects (especially for the maintenance issue), so I would
be surprised if such uses among serious pages (ie: pages written by
people who take web authoring seriously) was too higher than other
obnoxious html3.2ish stuff.

> Finally, a further thought on tag names: the element’s start and end tags
> are, I believe, required to have the same name. Thus, a hybrid tag would
> only save on typing only if a single class name was shorter than 7
> characters.
Who says that the dot and class name would be part of the element
name? SGML maybe?
Being the syntax sugar kind of feature this proposal is; it seems to
be that the simplest way to implement it would be on-the-fly
replacement upon parsing, so after parsing something like "<span.nifty
" the browser would end up exactly on the same state as after parsing
something like "<span class='nifty' >". Thus the end tag it would be
expecting would be "</span>" rather than "</span.nifty>".


My opinion on the proposal:

The idea itself is not bad. It does provide a benefit (even if a minor
one). It has, however, a significant specification and implementation
cost; in addition to very brittle fallback behavior on legacy
browsers.
There is a lot of stuff for UAs to implement in HTML5, and most of it
is far more substantial than syntax sugar. The web *needs* those
features, and needs them *soon*. Which means that HTML5 needs to shave
off superfluous additions. HTML5.1 or HTML6 will be another history;
and isn't likely to take as long as HTML5 is taking (because HTML5 had
to define too much stuff from zero).

So I have to stand against this proposal now. I encourage you to bring
it forth again when work for the next version of HTML begins, and
you'll have my support.


(Sorry for the "manual" quoting here, but quoting the fragment quotes
on the original post was getting close to nonsensical)

>> Quoting (presumably) T.J. Crowder <tj@crowdersoftware.com>
>> > But even more so, the alignment with CSS syntax is very
>> > attractive and natural.
I'd rather take this as an argument *against* the feature. Big efforts
have been taken since HTML4 and CSS came out to make authors
understand that @class is not a mere CSS hook, but a semantic
extension mechanism.

> Quoting Ian Hickson <ian@hixie.ch>
>> I think what would be helpful would be to make a JS library that fakes
>> this (by searching for elements with attributes that start with "." and
>> adding them to the class="" attribute), and seeing if it gets adoption.
>> That would provide interesting information for future developers of HTML.
I definitely agree with Ian's suggestion here. A JS-based
implementation can serve as a temporary solution *and* double as an
implementation feedback source when this is brought in again for the
next iteration of the language.


Regards,
Eduard Pascual
Received on Friday, 9 April 2010 22:46:39 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Wednesday, 1 June 2011 00:14:02 GMT