[CSS21] possible spec error re page-break properties

I joined the list recently to report two possible errors in CSS2.1 and  
CSS3. The first thread (re @media) is ongoing. I've now re-read the W3C  
site and see that the timetable for the CSS2.1 CR to move to PR status is  
November 2004. I've no wish to hold up CSS2.1 unless there is real cause.  
I'm raising the second issue straight away in case there is substance to  
it.

At a practical level, it concerns the ability of content authors to  
inhibit the splitting of table rows across printed pages. The issue arose  
recently on CSS Discuss and concerned a data table, where the requirement  
is, I suggest, often very desirable. [Digression: the ability would also  
apply to rows in tables used for layout, where there might be  
print-rendering problems since such rows are more likely to have a height  
greater than that of the page box. CSS does not, of course, distinguish  
between these two uses of table.]

CSS2.1 Section 13.3.3 says that page breaks occur in the vertical margin  
between block boxes and between line boxes inside a block box.

CSS2.1 Section 13.3.1 says that the 3 page-break properties apply to  
block-level elements. Section 9.2.1 defines "block-level element" as one  
in which the value of the "display" property is block, list-item, compact,  
run-in and table. Actually, the wording is not that precise: it does not  
state that these are the *only* values that make an element block-level.  
For the HTML <tr> element UAs override the initial value of "display"  
(viz. "inline") with "table-row" (see Section 9.2.5).

Digression: Section 9.2.5 also says that "These values [e.g. display:  
table-row] cause an element to behave like a table element ..." I take  
that to mean elements within a table such as tr and td, not literally just  
the <table> element. The whole of Section 9.2, despite its first  
paragraph, does not define whether (for example) a <tr> element with  
display: table-row generates a block box or some other kind of box.  
Section 9.4.1 *does* say that "... table-cells ... establish new block  
formatting contexts". But none of this helps with the above problem.

Therefore, it is unclear, from the lack of precision noted above, whether  
the following rule is valid:-

tr {page-break-inside: avoid;}

where it is explicitly stated that tr {display: table-row} or where this  
is implicit in the UA. This is because it is unclear whether such a <tr>  
element is block-level (and so generates a block box to which the property  
can then be applied by the UA in its rendering).

My very limited testing shows that the rule is honoured by Opera 7.54 but  
not by NS7.1 (Moz1.4), Moz1.7.1, FF0.9.2 (Gecko 1.7) or IE6. The CSS2  
validator accepts the rule.

I'm not an expert in formal grammars so, if I've missed something, I will  
appreciate a CSS2.1 reference. If I'm right, may I ask for an  
acknowledgement from a WG member?

Acknowledgments to Adam Kuehn for his original comments.

-- 
Jim Wilkinson

Opera e-mail client: http://www.opera.com/m2/

Received on Sunday, 10 October 2004 17:42:44 UTC