[whatwg] Menus, fallback, and backwards compatibility: ideas wanted

Matthew Raymond mattraymond at earthlink.net
Wed Dec 7 11:30:20 PST 2005

Ian Hickson wrote:
> My current thinking is to have an attribute on the <menu> to distinguish 
> the type of menu, from a list of three types: context menu (hidden until 
> activated), tool bar/menu bar/menu button/whatever you call it (turns each 
> command into a button, and each submenu into a menu button), and the 
> default, which is to display as a <ul> (like today).

   I don't know, I kinda like having separate markup for menus and menubars:

| <menubar>
|   <!-- Note: Sibling Association Used. -->
|   <menulabel>Menu Label 1</menulabel>
|   <menu/>
|   <menulabel>Menu Label 1</menulabel>
|   <menu/>
|   <menulabel>Menu Label 1</menulabel>
|   <menu/>
| </menubar>

   Part of the benefit of this system is the ability to call menus that
are outside the <menubar>:

| <menubar>
|   <menulabel for="extMenu1">Menu Label 1</menulabel>
|   <menulabel for="extMenu2">Menu Label 2</menulabel>
|   <menulabel for="extMenu3">Menu Label 3</menulabel>
| </menubar>

   I'm a little shakey on the use case, but it seems useful.

   For toolbars, something similar to <menubar> that takes <button> or
<menulabel> children seems in order. I prefer doing this as opposed to
<menu type="menutype">, especially since <input type="[type]"> has
receive some resistance. It also creates specific elements they have to
support rather than attribute values, which makes it harder for vendors
to falsely claim support. I think it also increases visibility.

   Thought: Is the distinction between a menubar and a toolbar entirely
presentational? Use one element? <commandbar>?

   If you notice, my version of <menulabel> is both a menu label and a
menu button. Aside from situations where you have floating, persistent
menus with per-character styling in the title, I don't see a need for
the two concepts to be separate. Is there even a significant use case
for <menu> to have a |label| attribute? Seems to me that all menus made
visible by an input event. You may be able to see items in menu /bars/,
but in all other situations, you're clicking on a button or right clicking.

   Not sure I like the whole thing about the user agent guessing it's a
menu based on if it has a label or is connected to a context menu
reference. Might just be able to fix that by requiring the |label|
attribute. Then again, it seems like it's doing what could be done with
the |title| attribute. Perhaps an attribute |type| with the possible
values "menu" and "list", where "list" is the default.

   Then again, toolbars often have separators, so maybe they're a type
of list anyways and require <li>-type markup, thus making <menu type>
more appropriate. Hmm...

| <menu type="list|menu|commandbar">

   Above, the type "menu" is assumed to be a sort of context menu
activated either by a true context menu feature or by a <menulabel>.
Then again, <commandbar>-type elements are flat, and while they may have
groupings/separators (for toolbars, at least), they don't have
multilevel groupings.

/me trails off into deep thought...

More information about the whatwg mailing list