我正在努力处理CSS的“计数器增加”和“计数器重置”属性。我已经使它可以很好地与列表配合使用,但是例如对于标头标记,事情对我来说就不太清楚了。
想象一下以下布局:
<div id="root">
<div class="section">
<h1 class="header">Header</h1>
<div class="section">
<h2 class="header">Header</h2>
<!-- can be nested multiple times -- >
</div>
</div>
<div class="section">
<h1 class="header">Header</h1>
<!-- content -->
</div>
</div>
我希望对标题标签进行编号(包括嵌套计数!),但是由于标题标签本身未嵌入,但是它们的父母无法使其正常工作。所以这就是我到目前为止(基于逻辑,但不是我想要达到的最接近的解决方案!我尝试了我能想到的所有可能的组合)
#root
{
/* root should reset counter */
counter-reset: section_header;
}
#root .section
{
/* since every section has a header tag, we should count sections-divs, as they wrap children as well */
counter-increment: section_header;
}
.section .header::before
{
/* This would take care of the display, but I suspect it doesn't obtain the correct value since the scope of the counter is not available? */
content: counters(section_header, ".") " ";
}
如果能找到解决方案的任何方向,我将不胜感激。
ps。我应该提一下,我主要是在Chrome上进行测试,但我也在其他浏览器上也找到了它。
我正在寻找的格式是'1.1','1.2','1.2.1'等。每个嵌套部分都应附加另一个计数器层,尽管我可以在不分层的情况下使它工作(单个深度),动态多层是要获得相应效果的一种技巧。
答案 0 :(得分:2)
更新:我看到了您可能在创建此示例时可能会得到启发的MDN示例。将其转换为标记的混乱之处在于它们使用包含子元素的<ol>
和<li>
标签。在标头<h_>
元素的上下文中这没有多大意义,但是似乎您必须将子元素保留在它们内部才能完成同一件事。我添加了after元素和一些light CSS,以显示每个元素的结尾。希望这会有所帮助。
.section {
counter-reset: section; /* Creates a new instance of the
section counter with each ol
element */
list-style-type: none;
}
.header::before {
counter-increment: section; /* Increments only this instance
of the section counter */
content: counters(section, ".") " "; /* Combines the values of all instances
of the section counter, separated
by a period */
}
.section{
font-size: 16px;
margin: 10px 0;
}
h1::after {
content: ' (end h1)';
}
h2 {
margin-left: 10px;
}
h2::after {
content: ' (end h2)';
}
h3 {
margin-left: 20px;
}
h3::after {
content: ' (end h3)';
}
<div id="root">
<div class="section">
<h1 class="header">item</h1> <!-- 1 -->
<h1 class="header">item <!-- 2 -->
<div class="section">
<h2 class="header">item</h2> <!-- 2.1 -->
<h2 class="header">item</h2> <!-- 2.2 -->
<h2 class="header">item <!-- 2.3 -->
<div class="section">
<h3 class="header">item</h3> <!-- 2.3.1 -->
<h3 class="header">item</h3> <!-- 2.3.2 -->
</div>
</h2>
<h2 class="header">item
<div class="section">
<h3 class="header">item</h3> <!-- 2.4.1 -->
<h3 class="header">item</h3> <!-- 2.4.2 -->
<h3 class="header">item</h3> <!-- 2.4.3 -->
</div>
</h2>
<h2 class="header">item</h2> <!-- 2.5 -->
</div>
</h1>
<h1 class="header">item</h1> <!-- 3 -->
<h1 class="header">item</h1> <!-- 4 -->
</div>
</div>