W3C home > Mailing lists > Public > www-style@w3.org > September 2003

Re: One more list-item thought

From: Ian Hickson <ian@hixie.ch>
Date: Sun, 14 Sep 2003 12:36:51 +0000 (UTC)
To: "staffan.mahlen@comhem.se" <staffan.mahlen@comhem.se>
Cc: "www-style@w3.org" <www-style@w3.org>
Message-ID: <Pine.LNX.4.58.0309141120310.19231@dhalsim.dreamhost.com>

On Sun, 14 Sep 2003, staffan.mahlen@comhem.se wrote:
> Yes, but could it not be useful to change the way of handling it?
> (please note that i am really not sure myself).

Designing standards tends to go in the opposite direction -- think of
something useful, then try to design it -- rather than specifying
something, then trying to find a use for it! :-) (Granted, sometimes us
W3C members might give one the opposite impression, but...)

> What i am thinking is that possibly the display: list-item way of
> defining it makes for to big a separation from the ::before way of
> doing lists, but they are basically the same concept.

That's what CSS2 thought. We are moving away from that direction because
it caused all kinds of difficult problems.

> The above may all be nitpicking and is not a big issue in actual
> usage, but it think it would be neat if things were defined so that
> li {display: inline}
> would "just work" and render as an inline list with the appropriate
> "indicator" before each item.

I know what you mean, I just don't see a workable way of doing it. At the
moment, making a list-item is as simple as:

   foo { display: list-item; }

...which does _everything_, from setting up the counter to adding a
marker. If we change it to be:

   foo { display: block; }
   foo::marker { content: list-item; }

...then we are making the simple case more complicated. I suppose it could
work... but then you have to define '::marker' on all box types, including
table-cell and table-row and inline... which I suppose wouldn't be
impossible to do... Hmm.

Let me think about this.

> I suppose that depends on what you mean by the rule. To make myself
> more clear test the following in your browsers of choise:
>     h2 {display: list-item}
>     <h2>First</h2>
>     <h2>Second</h2>
>     <ol>
>       <li>Text
>         <h2>Third</h2>
>         <h2>Fourth</h2>
>       </li>
>       <li>Text</li>
>     </ol>
>     <h2>Fifth</h2>

That would result in:

   1. First
   2. Second
     1. Text
        2. Third
        3. Fourth
     4. Text
   2. Third


   ol:before { counter-reset: list-item; }

...in the UA sheet.

This is correct given the structure. If you don't want that, then you'd

   li::before { counter-reset: list-item; }

...or, more likely:

   h2 { display: list-item; }
   h2::marker {
      content: counter(h2) ".";
      counter-increment: h2 1   list-item -1;

...which I admit sucks. Hmm. Maybe there is value to changing the way
list-item works. How about saying '::marker' is generated whenever its
'content' computes to something other than 'inhibit', but 'normal' for
'::marker' computes to 'inhibit' unless its superior parent's 'display'
computes to 'list-item'? Then 'display:list-item' can still be in charge
of the 'list-item' counter, but to do the h2 case you would just do:

  h2::marker { content: counter(h2) '.'; counter-increment: h2; }

...and not have to change anything else... Hmm... I think that could

Ian Hickson                                      )\._.,--....,'``.    fL
U+1047E                                         /,   _.. \   _\  ;`._ ,.
http://index.hixie.ch/                         `._.-(,_..'--(,_..'`-.;.'
Received on Sunday, 14 September 2003 08:36:53 UTC

This archive was generated by hypermail 2.3.1 : Monday, 2 May 2016 14:27:08 UTC