19

我知道 CSSpage-break-inside:avoid指令应该在打印 HTML 文档时防止 div 内的分页符。通过搜索互联网,我发现它只支持 Opera 和 IE8。是否有一种解决方法可以让我防止 Firefox (3.6) 或 IE 版本小于 8 的分页符?

4

4 回答 4

3

抱歉,我的回答是“不可能”,但如果有人能证明我错了,我会很高兴。

我最近遇到了同样的问题,在做了一些研究后,我决定继续

page-break-after: always;

在每几个元素之后。

http://reference.sitepoint.com/css/page-break-inside

http://reference.sitepoint.com/css/page-break-after

于 2012-03-27T18:58:51.627 回答
2

尝试white-space:nowrap改用。这应该会阻止文本在元素内部中断,至少在屏幕上时是这样。我不确定它如何转化为印刷媒体,但值得一试。

更多信息: http: //www.blooberry.com/indexdot/css/properties/text/whitespace.htm

于 2012-04-06T22:06:07.903 回答
2

对于任何不是Firefox的东西,

.dontsplit { border: 2px solid black; page-break-inside: avoid; }

将工作。但不适用于火狐。在 Firefox 中,您要做的是检查高度,然后page-break-after: always;在相关时添加。

平均而言,顶部和底部的边距为 1 英寸。所以,为了测量一个 10 英寸的页面会消耗多少像素,我使用了这个:

var pageOfPixels;
(function(){
    var d = document.createElement("div");
    d.setAttribute("style", "height:9in;position:absolute;left:0px;top:0px;z-index:-5;");
    document.body.appendChild(d);
    pageOfPixels = $(d).height();
    d.parentNode.removeChild(d);
})();

我有很多 div,每个都有很多段落。所以我所做的是遍历它们,然后将它们在当前页面上的当前高度与 pageOfPixels 值进行比较。

var currentPosition = 0;
$('.printDiv').each(function (index, element) {
    var h = $(this).height();
    if (currentPosition + h > pageOfPixels) {
        //add page break
        $('.printDiv').eq(index - 1).css("page-break-after", "always");
        currentPosition = h;
    } else {
        currentPosition += h;
    }
});

这在 Firefox 中对我有用。

于 2013-01-15T23:40:22.667 回答
0

如何只匹配元素中的所有元素,除了第一个元素,并且让它们不中断

#yourelement *+*{
    page-break-before: avoid;
}
于 2011-04-16T19:02:59.423 回答