- From: Florian Rivoal <florian@rivoal.net>
- Date: Fri, 22 Apr 2016 09:55:31 +0900
- To: "Tab Atkins Jr." <jackalmage@gmail.com>
- Cc: www-style list <www-style@w3.org>
> On Apr 22, 2016, at 03:24, Tab Atkins Jr. <jackalmage@gmail.com> wrote:
>
> Recently HTML, under advisement from fantasai and I, specified that
> the "disclosure triangle" on a <summary> element (part of the
> <details> element) is displayed using a list marker, by setting
> <summary> to display:list-item.
>
> Unfortunately, this decision came with some additional baggage that
> we're now having to work around in HTML. In particular:
>
> * display:list-item also automatically increments the list-item
> counter, which is used by HTML's <ol> element. This meant that using
> a <details> inside of an <ol> would cause the next <li> to jump ahead
> by 2.
> * <summary> uses list-style-position:inside, and list-style-*
> properties inherit, so if you use an HTML list inside of a <summary>,
> its markers will be "inside" position as well. (HTML purposely
> doesn't set list-style-position, so that if you make an outer list
> "inside" the nested lists will be too. By default, tho, they use the
> initial "outside" value, and that's the expected way for them to
> display.)
>
> Both of these have fixes - the first by setting "summary {
> counter-increment: list-item 0; }", the second by setting "summary > *
> { list-style-position: initial; }" - but they still make things
> messier than they have to.
>
> I propose a simple solution: rather than having "display:list-item"
> cause the ::marker to be generated, as is specced today, we make
> ::marker *always* exist, identical to ::before. For normal elements
> you have to explicitly give it a 'content' value, just like ::before.
> "display:list-item" then just makes the ::marker pay attention to the
> list-style-* properties.
>
> This would let us swap the <summary> UA style back to just:
>
> summary {
> display: block;
> }
> summary::marker {
> content: disclosure-closed;
> }
> details[open] > summary::marker {
> content: disclosure-open;
> }
>
> (We'd also redefine disclosure-open/closed from being counter styles
> to just being 'content' keywords with the same effect.)
>
> fantasai offers an alternate proposal: leave <summary> as is, leave
> the hack for the first problem, but make the list-style-* properties
> actually only apply to the ::marker pseudo, rather than to list items.
> Inheritance ensures that we maintain today's behavior, but HTML can
> then set list-style-position:inside directly on the summary::marker,
> and avoid the second problem entirely.
>
> Thoughts?
I like your (Tab's) proposal better. It's easy to understand, easy to use, avoids overloading the semantics implied by "display:list-item". Also, it gives us one more pseudo element to use and abuse for all sorts of effects, which I expect will be very welcome by authors.
- Florian
Received on Friday, 22 April 2016 00:55:56 UTC