- From: Bert Bos <bert@w3.org>
- Date: Mon, 26 May 2008 17:15:09 +0200
- To: www-style@w3.org
On Sunday 25 May 2008 21:18, Anton Prowse wrote:
> I perceive a need for in-flow block-level flow roots ("block
> formatting contexts") which have neutral behaviour.
>
> Motivating example:
> -----------------------
> |--------- ---------- |
> ||floated| |prod1 | |
> || ad | | | |
> || | ---------- |
> || | ---------- |
> |--------- |prod2 | |
> | | | |
> | ---------- |
> |-------------------- |
> ||prod3 | |
> | | |
> |-------------------- |
> -----------------------
One idea that was mentioned in the WG a long time ago, but hasn't been
properly investigated yet, is a pair of properties 'float-displace'
and 'indent-edge-reset'. (The names and keywords may vary.) They
specify what is displaced by a float and by how much:
float-displace: line | block | block-within-page
indent-edge-reset: none | padding-edge | border-edge |
margin-edge | content-edge
where:
line:
The line box of each line that is next to a float is shortened (the
default)
xxxxxxxxxxxxx
xxxxxx
##### xxxxxx
##### xxxxxx
##### xxxxxx
xxxxxx
xxxxxxxxxxxxx
xxxxxxxxxxxxx
block:
All line boxes in a block are shortened.
xxxxxx
xxxxxx
##### xxxxxx
##### xxxxxx
##### xxxxxx
xxxxxx
xxxxxx
block-within-page:
ditto but only until the next page break
When line boxes are shortened, they are shortened just enough that they
don't overlap with the margin box of the float, and then some extra
indent is added, which is calculated as follows: Find the nearest
ancestor in the same flow that has an 'indent-edge-reset' property
other than 'none' and add up all the margins, borders and paddings
between the edge indicated by that property and the content edge of the
current element. (If there is no such ancestor, no extra indent is
added.)
'Indent-edge-reset' is particularly useful for lists, because list items
need some padding or margins to put the bullet in, and these values
ensure that a list item next to a float has the same room for bullets
as other list items:
ul {indent-edge-reset: margin-box}
xxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxx
o xxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxx
##### xxxxxxxxxxxx
##### o xxxxxxxxxxxxx
##### xxxxxxxxxxxxx
xxxxxxxxxxxx
o xxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxx
vs the current situation:
xxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxx
o xxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxx
##### xxxxxxxxxxxxxx
####o xxxxxxxxxxxxxxx
##### xxxxxxxxxxxxxxx
xxxxxxxxxxxxxx
o xxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxx
As described, none of these reduce the width of any block boxes, only
line boxes get shorter. (In particular, left and right borders are
never displaced, only content is.) Maybe it is possible to add a
keyword that makes the border box narrower, instead of the line boxes.
Or maybe that is more properly done with Template Layout
(http://www.w3.org/TR/css3-layout).
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 Monday, 26 May 2008 15:15:54 UTC