[whatwg] Suggestion for Menus in Web Forms 2.0

Matthew Thomas mpt at myrealbox.com
Fri Aug 6 05:06:47 PDT 2004

On 5 Aug, 2004, at 10:46 PM, Ian Hickson wrote:
> ...
> The thing I'm still not really sure about is the whole thing of how to
> make it look like a menu bar when it is used inline, instead of being
> used in the actual menu bar.
> ...

Allowing a native-looking menu bar makes sense for applications that 
are going to have complete control over their own interface. However, 
the What-WG specifications (as opposed to other specifications deemed 
too ambitious and/or unmixable) are designed to be implementable inside 
Web pages, where applications cannot have complete control over their 
own interface. Web browsers already have their own menu bars, and 
allowing these to be overridden would be highly confusing, if not a 
security vulnerability. For example, the previous discussions on this 
list about ensuring people can save or print their work would be 
somewhat irrelevant if applications could create fake menu bars with 
fake "Save As..." and "Print..." menu items that saved or printed 
something completely unexpected.

Hopefully you agreed that far already. :-)

Therefore, making <menubar> "look like a menu bar" would involve having 
two or more visually similar menu bars on the screen simultaneously. 
But this is bizarre behavior on some platforms, and even on platforms 
where it is expected behavior, it is highly confusing. For example, 
Microsoft considered it such a problem that in Windows 98 and later, 
they made native menu bars in non-frontmost windows look unavailable 
(even though they're not), in an apparent attempt to discourage people 
from using those menu bars by mistake. The other way Windows users 
lessen the confusion is by maximizing as many of their windows as 
possible, but that tactic would offer no respite from a <menubar> 
inside a browser window with its own menu bar.

However, ~90 percent of the Web apps I have seen trying to implement 
pull-down menus are just wanting single menus by themselves, in which 
cases <menubar> is not needed. Of the remainder that use multiple 
consecutive menus, perhaps half want a horizontal menu bar for 
navigation (which could possibly be satisfied by requiring UAs to 
implement <link> more reliably and attractively), and half want a 
vertical one (e.g. <http://msnbc.msn.com/>).

Therefore, I suggest the <menubar> element be renamed to <menulist>, to 
indicate that (in graphical UAs) its child <menu>s will be rendered 
vertically by default. That would suit the usual use case for adjacent 
menus, and would avoid wrongly implying that it should look like a 
native menu bar. Authors wanting horizontally adjacent menus could get 
them without extra styling just by using adjacent <menu>s, without a 
<menulist> element. (Outside a <menulist>, UAs could present a <menu> 
as a button with a downward-pointing triangle at the end of it, just 
like native standalone pull-down menus. This would both advertise their 
menu-ness, and avoid the confusion of them looking like a native menu 

> ...
> There have been a lot of requests for nested OPTGROUPs, so I'm
> thinking maybe we should just allow them.

Nested submenus are less evil (though still HIG-contraveningly 
horrible) in pull-down menus (e.g. <menu>) than they are in option 
menus (e.g. <select>), because at least in pull-down menus a particular 
submenu item is usually in the same direction relative to its parent 
item. (This isn't *always* true on platforms that put menu bars inside 
windows, because the position of the window may force a menu or submenu 
to open *sometimes* to the north and/or west instead of the southeast.)

Submenus (even non-nested submenus) would be even worse in <select>s 
because the current selection varies the vertical position of all the 
other items, which in turn would vary the direction of every submenu 
(southeast, northeast, or east-ish), which would repeatedly break 
muscle memory of what direction particular submenu items were in, which 
would make them extremely slow and annoying to use. (Example: the 
<select> implementation in Netscape Navigator 3.0 for Unix, which used 
submenus instead of auto-scrolling.)

(The general problem with submenus is that they require multiple 
changes in direction, but if you click or release in the wrong place 
while using them you usually have to start your selection from scratch. 
This problem does not apply to tree controls, nor even to a chain of 
dependent <select>s.)

Another reason not to have <optgroup>s inside <select>s is that option 
menus are supposed to show their state even when closed, but they 
cannot do so reliably if two or more submenus contain items with the 
same text. For example, the distinction between the towns of 
"Australia" > "Palmerston" and "New Zealand" > "Palmerston" would be 
obvious if a tree control was used, or if two <select>s were used; but 
the distinction could not be shown in a single native-looking option 
menu while the menu was closed, without making the menu abnormally 

Matthew Thomas

More information about the whatwg mailing list