gpt4 book ai didi

html -

的 CSS 计数器不会增加

转载 作者:可可西里 更新时间:2023-11-01 13:02:00 24 4
gpt4 key购买 nike

我正在制作一个多列、CSS 编号的 TOC,如下所示:

| 1. TOC Level-1    | 2. TOC Level-1    |
| 1.1 TOC Level-2 | 2.1 TOC Level-2 |
| 1.2 TOC Level-2 | 2.2 TOC Level-2 |
| 1.3 TOC Level-2 | 3. TOC Level-1 |
| 3.1 TOC Level-2 |

由于 CSS 列是不可控的,因此包装是通过 JS 和 float “列”类完成的。

这是我遵循的示例: http://www.2ality.com/2012/01/numbering-headingshtml.html

这是我使用的 CSS:

body {} .column {
border: 2px dotted grey;
float: left;
width: 40%;
}
.menu-item:hover {
cursor: pointer;
color: blue;
}
.sub-nav-content {
counter-reset: toc1;
}
h1 {
counter-reset: toc2;
}
h1:before {
counter-increment: toc1;
content: counter(toc1)". ";
}
h2:before {
counter-increment: toc2;
content: counter(toc1)"." counter(toc2)" ";
}
<div class="sub-nav">
<div class="sub-nav-content">
<div class="column">
<a class="menu-item"><h1>TOC entry level1</h1></a>
<a class="menu-item"><h2>TOC entry level2</h2></a>
<a class="menu-item"><h2>TOC entry level2</h2></a>
<a class="menu-item"><h2>TOC entry level2</h2></a>
</div>
<div class=column>
<a class="menu-item"><h1>TOC entry level1</h1></a>
<a class="menu-item"><h2>TOC entry level2</h2></a>
<a class="menu-item"><h2>TOC entry level2</h2></a>
<a class="menu-item"><h1>TOC entry level1</h1></a>
<a class="menu-item"><h2>TOC entry level2</h2></a>
<a class="menu-item"><h2>TOC entry level2</h2></a>
<a class="menu-item"><h2>TOC entry level2</h2></a>
</div>
</div>
</div>

不知何故,我无法使 2 级计数器增加。

最佳答案

解决方案:

您可以通过稍微调整 HTML 和 CSS 使用 CSS 计数器来实现此目的。首先,将 a 放在 h1h2 中,而不是相反。其次,在 h1h2 级别增加计数器,但使用 a:before 来显示编号。因此,该数字也将具有 :hover(因为它现在是 a 的一部分)。

演示:

body {} .column {
border: 2px dotted grey;
float: left;
width: 40%;
}
.menu-item:hover {
cursor: pointer;
color: blue;
}
.sub-nav-content {
counter-reset: toc1;
}
h1 {
counter-reset: toc2;
}
h1 {
counter-increment: toc1;
}
h1 a:before {
content: counter(toc1)". ";
}
h2 {
counter-increment: toc2;
}
h2 a:before {
content: counter(toc1)"." counter(toc2)" ";
}
<div class="sub-nav">
<div class="sub-nav-content">
<div class="column">
<h1><a class="menu-item">TOC entry level1</a></h1>
<h2><a class="menu-item">TOC entry level2</a></h2>
<h2><a class="menu-item">TOC entry level2</a></h2>
<h2><a class="menu-item">TOC entry level2</a></h2>
</div>
<div class=column>
<h1><a class="menu-item">TOC entry level1</a></h1>
<h2><a class="menu-item">TOC entry level2</a></h2>
<h2><a class="menu-item">TOC entry level2</a></h2>
<h1><a class="menu-item">TOC entry level1</a></h1>
<h2><a class="menu-item">TOC entry level2</a></h2>
<h2><a class="menu-item">TOC entry level2</a></h2>
<h2><a class="menu-item">TOC entry level2</a></h2>
</div>
</div>
</div>


原始问题的原因:

以下是您的结构(已简化)。您正在做的是在 h1 级别对 toc2 使用 counter-reset 但此 h1 嵌套在一个

<div class="sub-nav">
<div class="sub-nav-content">
<div class="column">
<a class="menu-item"><h1>TOC entry level1</h1></a>
<a class="menu-item"><h2>TOC entry level2</h2></a>
<a class="menu-item"><h2>TOC entry level2</h2></a>
<a class="menu-item"><h2>TOC entry level2</h2></a>
</div>
</div>
</div>

根据 W3C Specs ,CSS 计数器的作用域和继承工作如下:

  • 当前元素获取其父元素或兄弟元素拥有的所有计数器。 (反继承)
  • 继承其前一个兄弟(或)父代的计数器值。 (值(value)继承)

在这里,由于 toc1 计数器在 .sub-nav-content 级别被重置,所以 .column 元素都获得了计数器并且所有 .menu-item 元素及其伪元素也(从它们自己的父元素)获取它。当 counter-increment 用于 h1:before 时,它会递增从其父级得到的计数器的值,因此所有元素一直到 .sub-nav-content 都知道计数器的存在及其当前值。因此每个 h1 都能够正确地增加它。

toc2 仅在 h1 级别重置。这意味着 .sub-nav-content、.column.menu-item 中没有人知道这个计数器的存在。只有 h1 及其子项知道。因此,当遇到 h2 元素时,UA 会查看它们是否已经拥有该 toc2 计数器,并且因为它们没有,所以 new toc2 计数器在每个 h2 处创建,并且它们递增。因此,它们的值(value)将永远只有 1,没有别的。

关于html - <h2> 的 CSS 计数器不会增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37905528/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com