Margins and Block Geometry

I'm trying to get a full understanding of block geometry and I think 
I've pretty much got it now but I must report that the initial 
discussion of block geometry in section 4.4.1, which I found to be 
pretty clear, is then completely thrown out the window by the discussion 
of margins in 5.3.2, in that the effect of margin specifications, which 
are not mentioned *before* 5.3.2, seemingly contradicts 4.4.1 in that 
4.4.1 says that the rectangles of a block are relative to (and only to) 
the content rectangle of the containing reference area. And by 
implication, are always *inside* of the containing reference area's 
content rectangle given positive or zero values for border, padding, and 
indent.

That is, given the information in 4.4.1 and this markup:

         <fo:block-container
           border-start-style="solid"
           border-start-width="1pt"
           border-start-color="red"
         >
         <fo:block
             border-start-style="solid"
             border-start-width="4pt"
             border-start-color="rgb(200, 100, 0)"
             padding-start="8pt"
             font-family="sans-serif"
             font-size="24pt"
             line-height="110%"
           >

I would except to see that the inner block's 4pt orange border is 
adjacent to and inside of the block container's red border.

But in fact, the orange border is rendered 12 pts to the left (toward 
the page's start edge) from the red border of the containing area!

Why?

The reason, of course, is that I haven't specified either 
margin-left="0pt" or start-indent="12pt" (border width + padding). But 
nothing in 4.4.1 suggested I would need to do so. Hmph.

It is only in section 5.3.2, in the discussion of margins, that it 
becomes clearer why (although the motivation for margins being defined 
*at all* is not provided in 5.3.2, or anywhere that I can find other 
than for CSS compatibility). That is, this statement:

"If the corresponding absolute margin property is not explicitly 
specified, or if the corresponding relative property is specified on the 
formatting object and the absolute property only specified by the 
expansion of a shorthand, the corresponding absolute margin property is 
calculated according to the following formulae:

margin-corresponding = start-indent - inherited_value_of(start-indent)
- padding-corresponding - border-corresponding-width"

Does explain the behavior, but the justification for this formula is not 
provided anywhere I can find.

Given that I can't see any value in margins on blocks *at all* (I have 
all the control I need from the space, indent, and padding properties) 
and don't have any CSS legacy of any kind (conceptual or data) I would 
prefer that the margins be limited strictly to page areas, but that's of 
course not an option given that the spec is published. [And as a 
standards writer myself, I fully understand the need to maintain 
compatability with other specs even when you'd rather not have to.]

However, it would be very helpful if 4.4.1 included a discussion of the 
effect of non-zero explicit or implicit margin values, as well as the 
fact that space-* is overridden by a larger *-indent value--it would, I 
think, make things a bit clearer. That is, the statements in 4.4.1 hold 
true if and only if margin-*="0pt". As the picture in 4.4.1 stands, it's 
unspecified at that point what the effect of having a start-indent 
greater than the sum of the space-before, border width, and padding is, 
but I expected (for some reason, not sure why) that the extra space 
woudl be added to the padding, not the space-* (but the actual behavior 
is just as reasonable and probably closer to the normally expected result).

It would also be helpful if 5.3.2 at least provided some motivation for 
the inclusion of margin properties or at least say why they have the 
counter-intuitive effect of pulling the border and padding rectangles 
outside of the content rectangles of their blocks' containing reference 
areas.

I assume that the motivation is so that the default effect is for the 
content rectangle of the contained block to be the same as the content 
rectangle of the containing area, but I don't see the value in making 
that the default behavior. What am I missing?

Cheers,

Eliot
-- 
W. Eliot Kimber, eliot@isogen.com
Consultant, ISOGEN International

1016 La Posada Dr., Suite 240
Austin, TX  78752 Phone: 512.656.4139

Received on Saturday, 2 November 2002 07:36:17 UTC