[whatwg] <details>, <summary> and styling

Wilhelm Joys Andersen wilhelmja at opera.com
Tue Mar 29 06:27:58 PDT 2011


I'm currently writing tests in preparation for Opera's implementation
of <details> and <summary>. In relation to this, I have a few questions
about issues that, as far as I can tell, are currently undefined in the

The spec says:

   "If there is no child summary element [of the details element], the
   user agent should provide its own legend (e.g. "Details")." [1]

How exactly should this legend be provided? Should the user agent add
an implied <summary> element to the DOM, similar to <tbody>, a
pseudo-element, or a magic non-element behaving differently from both
of the above? In the current WebKit implementation[2], the UA-provided
legend behaves inconsistently from from an author-provided <summary>
in the following ways:

  * Although it can be styled with rules applying to <summary>, it does
    not respond to :hover or :first-child.

  * With regards to text selection, it behaves more like an <input
    type='submit'> than a user-provided <summary>. Text within this
    implied element may only be selected _together_ with the text
    preceding and following it.

  * A different mouse cursor is used.

This indicates that it is slightly more magic than I would prefer. I
believe a closer resemblance to an ordinary element would be more
convenient for authors - a ::summary pseudo element with "Details" as
its content() might be the cleanest approach, although that would
require a few more bytes in the author's stylesheet to cater to both
author- and UA-defined summaries:

   summary, ::summary {
     color: green;

Furthermore, the rendering spec says:

   "The first container is expected to contain at least one line box,
   and that line box is expected to contain a disclosure widget (typically
   a triangle), horizontally positioned within the left padding of the
   details element." [3]

For user agents aiming to support the suggested default rendering, how
should the disclosure widget be embedded? Ideally, graphical browsers
should all do this in a similar manner, and in a way that allows authors
to style these elements to the same extent as any other element.

There are several options:

  * A ::marker pseudo element[4].
  * A default, non-repeating background image positioned within
    the recommended 40 pixel left padding.
  * A method similar to list-style-type or list-style-image.
  * A magically embedded, unstylable widget.

I prefer the first, if possible. The default rendering could be something

   details summary::marker {
      content: "▸";
      color: black;

   details[open] summary::marker {
      content: "▾";

RTL might add some additional complexity here, however.

The spec also says:

   "The user agent should allow the user to request that the details
   be shown or hidden."[5]

Given, still, a user agent aiming to support the suggested default
rendering, with a pointing device (mouse, touch) available, which parts
of the <details> or <summary> element should be clickable?

The spec only says:

   "[The disclosure] widget is expected to allow the user to request that
   the details be shown or hidden.

That's a rather small clickable area, which might get troublesome to hit
on a fuzzy touchscreen or for someone with limited motor skills. I suggest
the whole block area of <summary>, too, is made clickable - as if it was
a <label> for the ::marker.

The behaviour for a JavaScript click() on the <details> and <summary>
elements should also be defined.

Whether or not the answers to the questions above should be part of the
spec or not, I do not know. But browser vendors should try to come to
some sort of a consensus here, to limit the pain of style-minded authors.

[1] :  
[2] : Tested in Google Chrome 12.0.712.0
[3] :  
[4] : http://www.w3.org/TR/css3-lists/#markers
[5] :  

Wilhelm Joys Andersen
Core, Opera Software

More information about the whatwg mailing list