孤儿CSS:如何避免在底部页面的标题(h1,h2...)?

ogq8wdun  于 2023-05-30  发布在  其他
关注(0)|答案(2)|浏览(120)

我有一个很大的HTML文档,有标题(h1,h2,h3...)和段落。当我打印文档时,我希望文档底部的标题自动转到下一页:

我该怎么办?我用“孤儿”:3“CSS与段落和作品与“p”标签,但与h1或h2不工作。

@page {
  size: A4;
}

p {
  orphans:3;
}

h1, h2 {
  orphans:3
}

Full example on action其中:

  • 1-2页:段落孤儿工程罚款。
  • 2-3页:标题不起作用。

要求:

  • HTML有一个主要的div容器。
    *不要修改HTML
  • 浏览器支持并不重要(在我的特定工作中)。
  • 我需要一些技巧在CSS(没有JS或JQuery,最好)
  • 我不能使用page-break-before:always,因为我希望当页眉出现在页面底部时,它只会转到下一页。
c7rzv4ha

c7rzv4ha1#

在印刷术中,孤儿是:
在一页或一栏的底部单独出现的一段开始行,因此与正文的其余部分分开。
然而在HTML中<h1><p>是不同的 * 段落 *,那么你必须使用的是break-after属性来告诉布局引擎不要在该段落之后放置分页符(副作用是将下一段移动到上一页-如果合适-或者将标题移动到下一页。

h1, h2 {
    break-after: avoid-page;
}

关于兼容性的说明:break-after设置是一个真正的工作草案,甚至基本的功能都没有得到广泛支持(特别是Internet Explorer 10)。要解决此问题,您可以使用另一个具有类似含义的属性:

h1, h2 {
    page-break-after: avoid;
}

请注意,page-break-after适用于页和列。FF(it is a bug)不太支持page-break-after,如果兼容性很重要,段落不会跨越多个页面,您可以将<h1><p> Package 在容器中(假设为<section>),然后像这样应用page-break-inside

section {
    page-break-inside: avoid;
}

在我看来,你应该使用page-break-inside-moz前缀来组合page-break-afterpage-break-inside,直到它修复这个bug。

bpsygsoo

bpsygsoo2#

这个问题是这个老问题的重复:How do I avoid a page break immediately after a heading
最好的解决方案是这样的代码:

h1, h2, h3, h4, h5 {
  break-inside: avoid;
}
h1::after, h2::after, h3::after, h4::after, h5::after {
  content: "";
  display: block;
  margin-bottom: -4rem;
  height: 4rem;
}

相关问题