如何设置两个fo:block的行间距?如何移除块间过大间距?
解决XSL-FO中fo:block块间多余行间距的方法
嘿,这个问题我太熟悉了!在XSL-FO里,fo:block之间的多余间距基本都是由默认的间距属性导致的,咱们直接从根源上调整就行,给你几个实用的方案:
调整
space-before和space-after属性
这是XSL-FO专门用来控制块级元素前后间距的属性,很多渲染引擎默认会给fo:block设置非零的space-before或space-after值。你可以直接把这两个属性设为0,精准消除多余间距:<fo:block space-after="0pt">第一个块的内容</fo:block> <fo:block space-before="0pt">第二个块的内容</fo:block>单位可以用
pt、px或者em,根据你的需求选就行。重置
margin属性
有些情况下,fo:block的默认margin-top或margin-bottom也会造成间距。如果上面的方法没完全解决,试试把margin也设为0:<fo:block margin-bottom="0">第一个块的内容</fo:block> <fo:block margin-top="0">第二个块的内容</fo:block>要是想一步到位,也可以直接写
margin="0"把四个方向的边距都重置。统一设置样式(适合多个块的场景)
如果你的文档里有很多这样的块,不想重复写属性,可以定义一个自定义样式,然后给需要的块引用:<fo:root> <fo:layout-master-set> <fo:simple-page-master master-name="default-page" page-width="210mm" page-height="297mm"> <fo:region-body/> </fo:simple-page-master> </fo:layout-master-set> <fo:page-sequence master-reference="default-page"> <fo:flow flow-name="xsl-region-body"> <!-- 定义样式 --> <fo:static-content flow-name="xsl-region-before"> <fo:characteristic-set space-after="0pt" margin-bottom="0" space-before="0pt" margin-top="0" id="tight-block"/> </fo:static-content> <!-- 引用样式 --> <fo:block use-characteristic-set="tight-block">第一个块的内容</fo:block> <fo:block use-characteristic-set="tight-block">第二个块的内容</fo:block> </fo:flow> </fo:page-sequence> </fo:root>
另外要注意:如果你的块内容里有多余的换行或空白字符,也可能间接造成视觉上的间距,记得检查一下内容本身哦。
内容的提问来源于stack exchange,提问作者Suffer
相关产品推荐
相关产品推荐

