fo:block-container未环绕fo:float的原因及XSL-FO规范咨询
关于XSL-FO中fo:float与文本环绕的渲染差异问题
我困惑于为何以下代码中的文本未环绕fo:float:在AH 7.4MR6(试用版)的输出中,fo:float覆盖了文本;而在XEP 4.30.961(试用版)中,文本正常环绕在fo:float右侧。我不确定哪种渲染符合XSL-FO规范,恳请解释原因并指明相关规范条文,相关代码及渲染截图如下:
<fo:float float="start"> <fo:block-container inline-progression-dimension="1in" block-progression-dimension="0.5in" background-color="yellow" border="1px solid black"> <fo:block>FLOAT</fo:block> </fo:block-container> </fo:float> <fo:block-container intrusion-displace="line" space-before.conditionality="discard"> <fo:block>This text should wrap on the right of the FLOAT.</fo:block> </fo:block-container> <fo:block-container intrusion-displace="line" space-before="3pt"> <fo:block>This text should wrap on the right of the FLOAT.</fo:block> </fo:block-container> <fo:block-container intrusion-displace="line" space-before="3pt"> <fo:block>This text should wrap on the right of the FLOAT.</fo:block> </fo:block-container> <fo:block-container intrusion-displace="line" space-before="3pt"> <fo:block>This text should wrap on the right of the FLOAT.</fo:block> </fo:block-container>
渲染效果对比
- AH 7.4MR6渲染截图:

- XEP 4.30.961渲染截图:

规范解读与问题原因
根据XSL-FO 1.1规范:
- fo:float的行为(§7.2.10):浮动元素会脱离正常文档流,被放置在主参考区的指定边缘(此处为
float="start",即起始侧),正常流中的内容应当环绕该浮动元素,除非相关元素的属性设置改变了这一行为。 - intrusion-displace属性(§7.2.5.3):当属性值设为
"line"时,元素应允许其行内内容环绕侵入的浮动元素,而非被浮动元素覆盖。
XEP 4.30.961的渲染符合上述规范要求:设置了intrusion-displace="line"的fo:block-container内部文本正确环绕在fo:float右侧。而AH 7.4MR6的渲染未正确实现该属性的行为,导致文本被fo:float覆盖,不符合规范。
内容的提问来源于stack exchange,提问作者Christian Roth
相关产品推荐
相关产品推荐

