- From: Bert Bos <bert@w3.org>
- Date: Thu, 20 Aug 2009 20:33:29 +0200
- To: www-style@w3.org
Here is proposed text to replace the first paragraph and the numbered
list in 9.2.3
http://www.w3.org/TR/2009/CR-CSS2-20090423/visuren.html#run-in
--------------------------------------------------------------------------
A run-in element A behaves as follows:
1. If A has any children[1] that inhibit run-in behavior (see below),
or if it has any :before or :after pseudo-elements[4] that inhibit
run-in behavior, then A is rendered as if it had 'display: block'.
2. Let B be the first of A's following siblings[2] that is neither
floating nor absolutely positioned[3] nor has 'display: none'. If
B exists and has a specified value for 'display' of 'block'
or 'list-item', then A is rendered as an 'inline' element at the
start of B's principal box[5]. Note: A is rendered before
B's ':before' pseudo-element, if any. See 12.1[4].
3. Otherwise, A is rendered as if it had 'display: block'.
[Definition:] An element or pseudo-element C inhibits run-in behavior if
one or more of the following are true. (Note that the definition is
recursive.)
a. C is not floating and not absolutely positioned[3] and the
specified value of its 'display' is one of 'block', 'list-item'
or 'table'.
b. C is not floating and not absolutely positioned[3] and it has one
or more children that inhibit run-in behavior.
c. C is not floating and not absolutely positioned[3] and it has
a :before pseudo element[4] that inhibits run-in behavior.
d. C is not floating and not absolutely positioned[3] and it has
an :after pseudo element[4] that inhibits run-in behavior.
[1] conform.html#child
[2] conform.html#sibling
[3] visuren.html#absolutely-positioned
[4] generate.html#before-after-content
[5] visuren.html#principal-box
--------------------------------------------------------------------------
ISSUE I: The above implies that a run-in followed by a table is simply
displayed as a block before the table rather than as an inline element
in the first suitable cell of the table. Trying to make the run-in
appear inside the table seems difficult and not needed. But it may be
that Konqueror and Safari are currently trying to do just that
(unsuccessfully).
Test: http://www.w3.org/Style/Examples/015/run-in-12.xhtml
ISSUE II: The above also implies that the following code does not make
any run-ins:
<div>
<h2 style="display: run-in>Am I run-in?</h2>
<h2 style="display: run-in>Am I run-in?</h2>
</div>
One could instead say that a run-in before a run-in always becomes
inline in the second element, no matter whether that second run-in
itself is displayed inline or as a block. MacIE appears to do this.
Test: http://www.w3.org/Style/Examples/015/run-in-15.xhtml
Test: http://www.w3.org/Style/Examples/015/run-in-17.xhtml
ISSUE III: An element can only become a run-in in a *sibling* element,
in other words, the following does not produce run-ins. I found no
implementation that tried to do this differently, so this seems OK.
<div>
<h2 style="display: run-in">Am I run-in?</h2>
</div>
<p>Text text text...</p>
Test: http://www.w3.org/Style/Examples/015/run-in-07.xhtml
ISSUE IV: An element becomes run-in in a block, regardless of whether
that block has any text content. E.g.,
<h2 style="display: run-in">Make me run-in</h2>
<div>
<p>Text text text...</p>
</div>
is technically a run-in (viz., in the DIV), but doesn't look like one:
Make me run in
Text text text...
Prince puts the run-in in the P instead:
Make me run in Text text text...
You can improve the look and make the P inline with the help of some
clever selectors. That is probably good enough.
Test: http://www.w3.org/Style/Examples/015/run-in-13.xhtml
ISSUE V: A float or an absolutely positioned element inside a run-in or
after a run-in does not stop the run-in from displaying as a run-in.
Konqueror and Safari behave as specified, Opera and IE do not, and
Prince is sometimes like the first (test 4 & 5), sometimes like the
latter (test 8), and in one case it found a third way: when the run-in
is followed by an absolutely positioned element, it puts the run-in in
that positioned element (test 9).
Test: http://www.w3.org/Style/Examples/015/run-in-04.xhtml
Test: http://www.w3.org/Style/Examples/015/run-in-05.xhtml
Test: http://www.w3.org/Style/Examples/015/run-in-08.xhtml
Test: http://www.w3.org/Style/Examples/015/run-in-09.xhtml
ISSUE VI: Level 3 has several more values for 'display' and allows
elements with vertical and horizontal text to be interleaved. We can
deal with that in detail in the Box Module, but as a sanity check,
let's look how run-in would behave with those new features:
- 'compact': for the purpose of determining run-in rendering, it is
exactly like 'inline'.
- 'ruby' and related values: ditto.
- a template from Template Layout without the 'inline' keyword: for
the purpose of determining run-in rendering, it is exactly
like 'table'.
- a template from Template Layout with the 'inline' keyword: for
the purpose of determining run-in rendering, it is exactly
like 'inline-table'.
- a horizontal run-in followed by a vertical block or vice versa:
the run-in is rendered as a block.
I've made a handful more test cases at
http://www.w3.org/Style/Examples/015/
Bert
PS. This relates to http://wiki.csswg.org/spec/css2.1#issue-128
--
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 Thursday, 20 August 2009 18:34:12 UTC