我们怎样才能防止一个块被打印在不同的页面上

how can we prevent a block from being printed across different pages

在我的网站上,我希望在 divA 之后打印 divB。但是如果divB的内容意味着divB打印在两页上,我想在前面插入一个分页符,这样divB就不会打印在两页上,而是打印在一页上。

理想情况下,css 我该如何做到这一点,否则 javascript?

非常感谢!

编辑:

下面divB太大,分两页分页。 然后我想在 divB 之前插入一个分页符,以便它打印在不同的页面上。

但是 如果 divA 和 divB 足够小以留在同一页上,我不想要分页符。

您可能希望为您的元素使用带有 cmpt 单位的打印样式表,这样您就可以调整打印在纸上的物理尺寸。 我建议你看看这个 Post: How To Set Up A Print Style Sheet

假设您有 <div id="divB">...</div>,您可以使用这个 CSS。如果 DIV 没有 id,而是有一个 class,您应该将选择器部分 (#divB) 更改为可以定位该元素的任何内容。

@media print {
  #divB { page-break-before: always;}
}

没有很好的通用解决方案。正如某些人所指出的,您可以在

"B" 之前放置一个分页符……但您总会得到它。即使 "A" 和 "B" 都适合一页。

您可以在

"B" 上使用 page-break-inside="avoid"。这可能更接近你想要的。如果 "B" 放不下 "A" 的页面,"B" 将全部移到下一页。

但是...这有副作用,因为还有第三种可能性。如果 "B" 的内容太大以至于它本身放不下怎么办?将会发生的是它会按照您的想法行事,将 "B" 移动到下一页并尝试使用 "B" 构建该页面。它将无法满足 "B" 避免内部分页的条件,因此它将打破该条件。不幸的是,直到页面末尾它才算出来,所以你最终会得到一个空白页面。

如果您知道 "B" 将始终适合一页,那么您可以使用 page-break-inside="avoid",这样就可以了。但如果没有,您将无能为力。

这里是对类似问题的稍微冗长的解释:

所以您真正想要的是三合一...(1) 您希望它避免在 内分页,只要它不长于一页 ,否则,(2) 您希望在 (3) 之前分页,除非它适合当前页面。不幸的是,这并不存在。你只能用 Javascript 来做到这一点。您可以为 div 设置页面宽度,然后获取 div "A" 和 div "B" 的高度,然后做出决定在打印过程中动态插入这些 CSS 属性。