[whatwg] Menus, fallback, and backwards compatibility: ideas wanted
Ian Hickson
ian at hixie.ch
Mon Dec 12 18:35:29 PST 2005
On Sun, 11 Dec 2005, Matthew Raymond wrote:
> >
> > My main problems with the current spec are that it is aethetically
> > unpleasing, IMHO. One of the things I don't like (sorry Matthew!) is
> > the whole sibling-<menulabel> thing. It just doesn't feel right.
> > (Adding a for="" attribute doesn't really save it either, IMHO.)
>
> I agree that sibling association may not be practical, but an argument
> against |for| is an argument against all elements that use it, including
> the HTML 4.01 <label> element.
Indeed.
In the case of <label> it makes slightly more sense since, at least when
<label> was invented, you never went from the control to the label, only
the label to the control.
In the case of <output> it makes slightly more sense still, because there
is no dynamic relation between the <output> and the other control.
In the case of <menulabel>, the presence or absence of the attribute
directly affects the immediate rendering of the other element, and any
reference to one element requires examining the other element. It's a much
closer relationship, and one that happens continually, not just at
specific points (e.g. on a click).
> Also, you can still use implicit association.
I assume you mean containership?
The problem with
<menulabel>
foo
<menu>...</menu>
</menulabel>
...is that finding the actual string that corresponds to the title is
non-trivial. Imagine bidi elements or ruby being sprinkled into it,
consider the various error-handling cases, ponder what might happen if the
author sets 'display:block' on the menu explicitly, etc. None of these are
unsurmountable problems, but the lack of a very simple solution makes it
less attractive.
There's also the whole conceptual problem (also present with <label>) of
having the menu be inside its label.
> Well, for a <menu> triggered by a button, you have to have something
> that acts like a button, so you end up with <menulabel>-like markup in
> all but the last of these scenarios:
>
> Sibling Association:
> | <button>Menu Label</button>
> | <menu/>
>
> Explicit Association (for):
> | <button for="menu1">Menu Label</button>
> | <menu id="menu1"/>
>
> Explicit Association (popup):
> | <button popup="menu1">Menu Label</button>
> | <menu id="menu1"/>
>
> Implicit Association:
> | <button>
> | Menu Label
> | <menu/>
> | </button>
>
> XHTML2-Style Approach:
> | <menu>
> | <label>Menulabel<label>
> | <li>Item 1</li>
> | [...]
> | <li>Item n</li>
> | </menu>
My current thinking goes something like:
<menu type="commands" label="Menulabel"/>
...where type="commands" means "make a toolbar", and label="Menulabel"
means "the toolbar has only one button, its value is "Menulabel", and its
menu is this menu".
I'm not overly joyous about it, but it _is_ simple. :-)
Another option is:
<button menu="foo"/>
<menu type="context" id="foo"/>
But as you point out in your mail, this has some of the <menulabel>
problems (at least when extended to <menu type="commands">-type scenarios
where you want to make a toolbar of these things).
> The XHTML2 model has significant styling problems, though.
Indeed.
In general, I think having the label be its own element (or attribute)
without anything inside it other than the label text is the most sensible
design (semantically), at least when compared to designs that put other
elements inside the label. But it's not perfect, as you say.
Note that in terms of styling, we shouldn't shy away from saying that CSS
should be fixed to handle our markup, if CSS sucks. The style should be
slave to the content, not vice versa.
--
Ian Hickson U+1047E )\._.,--....,'``. fL
http://ln.hixie.ch/ U+263A /, _.. \ _\ ;`._ ,.
Things that are impossible just take longer. `._.-(,_..'--(,_..'`-.;.'
More information about the whatwg
mailing list