- From: Bert Bos <bert@w3.org>
- Date: Wed, 26 Nov 2008 18:07:29 +0100
- To: Saloni Mira Rai <salonir@microsoft.com>
- Cc: "www-style@w3.org" <www-style@w3.org>, Sushanth Rajasankar <Sushanth.Rajasankar@microsoft.com>
On Wednesday 12 November 2008 20:32, Saloni Mira Rai wrote: > Hello, > > We need a clarification on positioning the marker for list-items in > the scenario where list-item content is not right next to the > principal box edge. > > Section 12.5 [http://www.w3.org/TR/CSS21/generate.html#lists] states > "An element with 'display: list-item' generates a principal box for > the element's content and an optional marker box as a visual > indication that the element is a list item." > > And then in list-style-position > [http://www.w3.org/TR/CSS21/generate.html#propdef-list-style-position >] we have "outside The marker box is outside the principal block box. > CSS 2.1 does not specify the precise location of the marker box. " > > > Principal boxes defined here: > http://www.w3.org/TR/CSS21/visuren.html#principal-box > > > Block-level elements (except for display 'table' elements, which are > described in a later chapter) generate a principal block box that > contains either only block boxes or only inline > boxes<http://www.w3.org/TR/CSS21/visuren.html#inline-box>. The > principal block box establishes the containing > block<http://www.w3.org/TR/CSS21/visuren.html#containing-block> for > descendant boxes and generated content and is also the box involved > in any positioning scheme. Principal block boxes participate in a > block formatting > context<http://www.w3.org/TR/CSS21/visuren.html#block-formatting>. > Some block-level elements generate additional boxes outside of the > principal box: 'list-item' elements. These additional boxes are > placed with respect to the principal box. > > --------- > > The above text states that the marker should be placed outside of the > principal box of the List-item element. However other browsers aren't > matching this and we just want to clarify whether this is a bug, or > whether the spec needs to change. > > > Scenario #1 - List-item is immediately preceded by a float (left). > The float pushes the list-item content to the right. According to the > rules above the marker should be outside of the principal box and to > the left of the float. However > Opera and Safari all put the marker to the right of the float and > next to the text. Firefox puts the marker on the float. > IE8 puts the marker to the left of the float. > > > Scenario #2 - List-item has text-align set to center. Should the > marker be next to the text or outside the principal box? Firefox, > Opera and Safari put the marker right next to the text, within the > border of the list-item IE8 puts the marker outside the list-item. According to the spec, the position of the marker should not be influenced by floats or text-align, it should always be in the margin of the principal box. xxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxx o #### xxxxxxxxxxxxxxxx #### xxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxx xxxxxxx That's useful if the float is conceptually part of the list item, but in many other cases you'd rather want the marker to move. In CSS2, you cannot control that. We analyzed a long time ago that there are a couple of different useful places for the marker, but in fact they are a function of another consideration: whether the float causes a block to indent more or not. So rather than look at the marker on its own, we should look at how we want the list items to indent. The possibilities are: 1) No extra indent (the CSS2 behavior). The block width is not changed, each line is shortened as needed. The effect is that the text wraps around the float. 2) The float causes an extra indent, so that two blocks that normally look indented still look indented when there is a float next to them: * Without a float: a para a para a para a para a para a para a para indented para inden- ted para indented para * With a float: #### a para a para a #### para a para a #### para a para a #### para #### #### indented para #### indented para #### indented para #### In other words, the "relative indent" of the second para compared to the first is maintained by shortening the lines as needed for the float and then shortening them a bit more. The question is: how much more? There seems to be no automatic answer to that, so the designer has to somehow indicate which margins and/or paddings will be increased by a float and which not. (Or, alternatively: define which edge of which ancestor is the reference edge; all edges inside that are subject to incrementing by floats.) 3) Orthogonal to the above choices is the choice if all lines in a block should be shortened the same way, even after the float has ended, so that the block still looks rectangular: * Normal (CSS2) behavior: #### ## #### xxxxxxxxxxxxxxxxxx ## #### xxxxxxxxxxxxxxxxxx ## #### xxxxxxxxxxxxxxxxxxxxx #### xxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxx * Keep blocks rectangular: #### ## #### xxxxxxxxxxxxxxxxxx ## #### xxxxxxxxxxxxxxxxxx ## #### xxxxxxxxxxxxxxxxxx #### xxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxx If we then define that the marker is subject to the same extra indent as the line it's on, then the way to get list markers on the right side of the float is to use option 2. Optionally, you can decide that that the list looks better if all markers line up, in which case you use option 3 to force the UL to be rectangular. The old proposal used two new properties, called 'float-displace' (to select options 1, 2 and 3) and 'edge-indent-reset' to mark where the "relative indents" start. It's not especially easy to understand. My intuition says there must be a better way... Bert -- Bert Bos ( W 3 C ) http://www.w3.org/ http://www.w3.org/people/bos W3C/ERCIM bert@w3.org 2004 Rt des Lucioles / BP 93 +33 (0)4 92 38 76 92 06902 Sophia Antipolis Cedex, France
Received on Wednesday, 26 November 2008 17:08:12 UTC