Javascript 我的段落中有分栏吗?一共有多少行?

Javascript 我的段落中有分栏吗?一共有多少行?,javascript,css,Javascript,Css,CSS有一个寡妇和孤儿的概念,因此浏览器可以知道有多少行穿过列(或者,如果打印,则是页面)边界 有没有办法在JavaScript中了解这一点 可以使用元素的几何图形以一种非常不愉快和脆弱的方式来完成,但这似乎是一种非常不理想的结果 例如: 在像这样的库中,他们有一个中断标记的概念,它指示元素中中断发生的位置(如果确实存在中断)。我想这是最终可能实现的事情。我感兴趣的是,是否有办法使用常规方法询问元素,以查看它是否包装到下一页/专栏 用例 我想知道元素在哪里中断,这样我就可以看到是否应该返回DOM

CSS有一个寡妇和孤儿的概念,因此浏览器可以知道有多少行穿过列(或者,如果打印,则是页面)边界


有没有办法在JavaScript中了解这一点


可以使用元素的几何图形以一种非常不愉快和脆弱的方式来完成,但这似乎是一种非常不理想的结果


例如:


在像这样的库中,他们有一个中断标记的概念,它指示元素中中断发生的位置(如果确实存在中断)。我想这是最终可能实现的事情。我感兴趣的是,是否有办法使用常规方法询问元素,以查看它是否包装到下一页/专栏

用例
我想知道元素在哪里中断,这样我就可以看到是否应该返回DOM,并在前面的头之前插入中断。对于元素本身,这部分是由寡妇和孤儿来处理的,但是我希望能够有更精细的控制,例如,一章不会从页面底部开始。我可以在两段之间写两行,但标题后面的一段应该有更多的喘息空间

更新
我对用例的解决方案不感兴趣,我对标题中问题的答案感兴趣。该用例说明了我感兴趣的信息的一种可能应用,而不是问题的唯一原因。

您可以在前面添加
分页符:始终

h1{
前分页符:始终;
}

第1页

满足于此

第2页
满足于此


如果下面提到的API成为主要浏览器中的标准实现,并简化了识别元素中的列分隔符所需的js,那么只为将来的读者添加此答案。以下内容目前在生产代码中并不有用,因为在回答此问题时,我所知道的主要浏览器都没有完全实现下面的API


有一个用
getBoxQuads()
方法调用的API,它返回表示节点的每个CSS片段的对象。在回答这个问题时,我知道的唯一一个浏览器是在哪里实现的


该方法使在元素中识别中断变得相当简单,因为它为节点的每个CSS片段返回一个对象,所以您可以执行以下操作

let frags = document.querySelector('p').getBoxQuads().length;

…其中
frags
表示所选元素的CSS片段数。如果元素有超过1个片段,则有一个中断。您仍然需要额外的js来确定行数,等等,但这将使您能够将这些工作隔离到只有中断的元素。如果您有兴趣尝试如上所示的
getBoxQuads()
,您需要每晚下载Firefox。

您是否在寻找一种方法来添加分页符以便打印?HTML页面会增长以适应其内容。在这个上下文中,“页面边界”是什么?@diodeus如果在块元素中使用列,那么将在那里发生列中断。如果打印,列将在页面边界处断开。@Ben再次阅读您的问题并查看示例后,您似乎试图在打印时确定与页面宽度有关的内容,而不是与某一点的分页符(高度)有关的内容。你能更好地解释一下你在找什么吗?你最初的问题是“我试图使标题与下面的段落保持一致。InDesign和Word都有这个想法,但CSS似乎没有。”但现在我想你可能会有别的目标。你能更具体地说明你到底在寻找什么,以及什么是不希望的结果吗?你的答案完全错了,因为OP写的JavaScript有没有办法知道这一点?他希望使用JavaScript自动完成,而不是手动完成。这甚至不是一个选择!他问的是分栏,而不是分页符!此外,您还写道:您没有一种通用的方法来查找分页符。这也是错误的–因为例如,它会在客户端自动执行。@Bharata也许您应该检查问题历史记录并查看之前的注释。他最初问了关于分页符的问题,然后改变了他的问题,但仍然给出了分页符的例子。当我在帖子上发表评论时,他似乎把两个不同的东西混淆在一起,分页符和分栏符,他仍然没有澄清他的问题……我之前已经看到过我的评论。从那时起,他就一直希望使用JavaScript来实现这一点——自动检测列中断。他也不会把两种不同的东西混为一谈。对于你的问题,他回答你:我试图控制分页符,因为你的问题是关于分页符的。是的,在本例中,它们有点类似,但他的愿望是使用JavaScript自动控制它。好吧,如果他想像你所说的那样“控制分页符”,那么在我建议的
样式之前添加一个
分页符就是答案。如果他想确定“分栏”,那是完全不同的事情,不是吗?同样来自OP问题:“询问一个元素以查看它是否包装到下一页/专栏”对不起,您有解决方案吗?在用户决定打印页面之前,您能知道他将使用什么边距或页面大小吗?在我的回答中,你可以看到我指的是这个未知的参数,这就是为什么我说一般来说没有办法写出它。在选择这些参数后,每个浏览器实现其自身的每页页面内容逻辑(并且某些页面将以不同浏览器的方式打印)。如果你能想出一种方法来获取这些信息而不必强制
let frags = document.querySelector('p').getBoxQuads().length;