【发布时间】:2017-12-12 09:29:11
【问题描述】:
我正在尝试使用 CSS 计数器制作编号标题,并且当所有标题都在同一个 div 中时效果很好,但是当我需要将计数器重置为后代 div 中的初始值并从新值中继续使用该计数器时另一个div,那我就有问题了。
计数器的范围从文档中具有该计数器的“计数器重置”的第一个元素开始,并包括该元素的后代及其后续兄弟姐妹及其后代。
因此,我假设当我通过某个标题重置计数器时,只会为该标题所在的 div 及其后代设置新的计数器。所以在下一个 div 中没有设置计数器,并且从头开始计数。解决方案可能不是重置计数器,而是将计数器设置为初始值。但我还没有找到办法做到这一点。有可能吗?或者我必须使用 javascript 来以这种方式使用编号标题?还是有其他解决方案?
.text-container {
counter-reset: section sub-section composite;
h1.numbered {
counter-reset: sub-section;
}
h2.numbered {
counter-reset: composite;
}
}
h1.numbered:before {
counter-increment: section;
content: counter(section) " ";
}
h2.numbered:before {
counter-increment: sub-section;
content: counter(section) "." counter(sub-section) " ";
}
h3.numbered:before {
counter-increment: composite;
content: counter(section) "." counter(sub-section) "." counter(composite) " ";
}
<div class="text-container">
<div class="text-section">
<div class="text-section-column">
<h1 class="numbered">result 1 Heading</h1>
<h2 class="numbered">result 1.1 Heading</h2>
</div>
<div class="text-section-column">
<h3 class="numbered">result 1.1.1 Heading</h3>
<h2 class="numbered">result 1.2 Heading</h2>
<h3 class="numbered">result 1.2.1 Heading</h3>
</div>
</div>
<div class="text-section">
<div class="text-section-column">
<h3 class="numbered">result 1.2.1 Heading (expected 1.2.2)</h3>
</div>
</div>
</div>
在第三个 .text-section-column 中,我想从最后一个值继续计数,但设置了新的计数器。
谢谢。
【问题讨论】:
-
@AndreiGheorghiu 我认为这不是重复的,因为有问题你建议他不需要将任何计数器重置为初始值,并且 ol 元素在同一个 div 中。实际上我认为(看起来它是这样工作的)当你在后代 div 中重置计数器时,父节点无法访问它。
-
在我的第一条评论中,我链接了官方文档,恕我直言,您应该在询问之前(重新)搜索过。它有一个示例,其中部分和子部分的深度为三层。如果这没有帮助,请澄清您的问题。以目前的形式,不清楚你在问什么。您可以使用
counter-reset: identifier;重置 CSS 计数器 -
我当然看过文档。所以也许我应该更准确地表达我的问题。这是计数器的这个特性“计数器是‘自嵌套’的,从某种意义上说,在后代元素或伪元素中重置计数器会自动创建一个新的计数器实例。”因此,当我想在 .text-section-column 中将 counter 的值设置为 initial 时,counter-reset 实际上会创建新的 counter 实例,下一个 text-section 中的下一列无法访问该实例。因为最后一列访问全局计数器,所以我想要实现的是在 html 代码 sn-p 中。
-
所以我真正想做的就是将计数器递减到零。并且不要使用创建新实例的计数器重置。
标签: css