Re: [css3-lists] Proposal: list item marker from the content of the li element

On Tue, Mar 30, 2010 at 1:40 PM, Markus Ernst <derernst@gmx.ch> wrote:
> In January there was a discussion in the WHATWG mailing list initiated by Anne van Kesteren, who pointed out that in special cases, such as legal documents, list item markers can be part of the contents rather than of the styling:
> http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2010-February/024998.html
>
> Based on this discussion, and based on use cases out of my everyday work, I propose to add a possibility for taking list item markers from the contents of the li element.
>
>
> Use cases:
>
> All kinds of styling usually done with the combination of a hanging indent and a tabulator in word processors and layout applications. In practice they are often solved with tables or display:table-*. Some examples:
>
> 1. Legal documents where the list item markers are part of the cotent:
>
>   I. ........
>  II. ......
>  III. ..........
>
> §1    ..........
>      ......
> §1bis ...........
> $2    ........

This definitely needs to be supported.  Legal documents *must* have
the marker in the content, but we'd like to be able to format it as a
proper CSS marker.

> 2. Checkbox and radio button groups with multiline labels:
>
> o ........
>  .....
> o .........

I think this would help with some types of form layout.  Less
important, but would be nice.

> 3. CVs, recipies and whatever:
>
> 1966      .....
> 1973-1979 .........
>          ....
>
> 1 big orange ...............
> 2 onions     ...................
>             ........
> Not too much .................
> garlic       ..................
>             .....
>

Odd, but hey, if it falls out of the solution to the other two, I
don't have a problem with it.  I don't think this should be a definite
goal we should work towards, though.

> Possible solutions (alternatively):
>
> 1. Revive display:list-item-marker
>
> This possibility was mentioned by Tab Atkins Jr. in the WHATWG list discussion, here:
> http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2010-February/025014.html
>
> li input[type=radio], li span.marker {
>  display:list-item-marker;
> }
>
> <ul>
>  <li><input type="radio"> This label could be multiline</li>
>  <li><input type="radio"> Another option<li>
> </ul>
> <ol>
>  <li><span class="marker">§1</span> First paragraph text</li>
>  <li><span class="marker">§1bis</span> Second part of paragraph 1</li>
> </ol>

I'm not that happy with magic display values.  For one, it makes it
impossible to use display for what it's *intended* to do (frex, layout
the element as a table with display:table).

> 2. Introduce a new list-style-type:first-child
>
> The first child element of the <li> element is then displayed as the list item marker. (If the first child node is a text node, the default marker for ul resp. ol is displayed, as for list-style-type:image when the image file is missing.)
>
> ul, ol {
>  list-style-type:first-child;
> }
>
> <ul>
>  <li><input type="radio"> This label could be multiline</li>
>  <li><input type="radio"> Another option<li>
> </ul>
> <ol>
>  <li><span>§1</span> First paragraph text</li>
>  <li><span>§1bis</span> Second part of paragraph 1</li>
> </ol>

Hmm.  This has the benefit of author simplicity.  It has a downside of
also being pretty magical, in that a property set on the list affects
the display of a grandchild.  Not sure what my final opinion is on
this.


A third option is to adapt some concepts that GCPM uses.  It reuses
the float property to move footnotes and sidenotes into special areas,
through the very simple "float: footnote" or "float: sidenote".  We
could add a new value to this, "float: marker".  In terms of use, this
is identical to your first idea, it just avoids the abuse of display
that I dislike.  (I think reusing float is somewhat better, though
perhaps still not ideal.)

We'd just have to define exactly how the ::marker's content property
receives this, then.  Would content:normal allow accepting
marker-floats?  We'd have make it explicit that a marker-float
overrides list-style-type, then.  Perhaps a new list-style-type can be
used as well?  I'm not sure if this is necessary.


A fourth option is to use another concept from GCPM, that of Named
Flows.  Ideally, you'd use markup like this:

ul > li > .marker {
  float: to(marker);
}

ul > li::marker {
  content: from(marker);
}

This has the benefit of being very explicit about how things work.
However, Named Flows are not defined well enough to know if this sort
of thing is intended to be possible.  NF seems to be designed for
endnotes, where there's a single receiving element at the end of the
document, while this sort of use would have multiple receiving
elements.


There may be other methods we could use to activate this as well.  I
think the use-case is important to solve, but I don't have any idea
what the best way to do it is yet.  ^_^

~TJ

Received on Tuesday, 30 March 2010 21:18:23 UTC