AH Formatter / XSL Formatter
Q&A



XSLT/XSL-FO/SVG/MathML 仕様について

XSL-FO

トップ
基本・一般
AH Formatter について
XSL Formatter について
操作方法
プログラミング
XSLT/XSL-FO/SVG/MathML 仕様について
XSLT/XSL-FO/MathML テクニック
索引
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)だけとなります。


Copyright © 1999-2011 Antenna House, Inc. All rights reserved.
Antenna House is a trademark of Antenna House, Inc.