XSLT/XSL-FO/SVG/MathML 仕様についてXSL-FO |
|
Q. |
ネストしたテーブルに width="100%" を指定したのですが、内側のテーブルの幅がセルいっぱいにならずに、右側にスペースがあります。
[No.2004050602]
|
---|---|
A. |
FO は以下のようになっていました。 <fo:block margin-right="8.0px" margin-left="8.0px" ...> ... <fo:table margin-right="2.0px" margin-left="2.0px" border-left-width="2.0px" border-right-width="2.0px" ... width="100.0%"> ... <fo:table-cell padding-left="1.0px" padding-right="1.0px" ...> <fo:block> ... <fo:table margin-right="0pt" margin-left="0pt" border-left-width="2.0px" border-right-width="2.0px" ... width="100.0%"> ... <fo:table-cell padding-left="1.0px" padding-right="1.0px" ...> <fo:block> <fo:table margin-right="0pt" margin-left="0pt" border-left-width="2.0px" border-right-width="2.0px" ... width="100.0%"> ... ここで重要なのは、エリアの幅の%指定の基準は、そのエリアの親エリアの content-rectangle の幅であるということです。一番外側のテーブルの幅の width=100% は、テーブルを包含する block の content-rectangle の幅です。この block には margin-right="8.0px" margin-left="8.0px" が指定されているので、その分(16px)だけ region-body の幅よりも小さくなります。 2番目のテーブルも同様にその親の block の content-rectangle の幅になります。この block には継承されたインデントがあります。このインデントは外側のテーブルに指定されている margin-left/right(各々2px) と border-left/right(各々2px)の和です。W3CのXSL-FO仕様の勧告の5.3.2 Margin, Space, and Indent Properties を参照してください。したがって、この分(合計8px)が外側のセルの幅よりも小さくなります。 3番目のテーブルも2番目のテーブルも同様ですが、2番目のテーブルに指定されている margin-left/right が 0pt なので外側のセルの幅よりも小さくなる量は 2番目のテーブルの border-left/right の分(合計4px)だけとなります。 |