html - 当有计数器重置声明时,Firefox 是否违反了规范,因为它奇怪地累积应用计数到 LI 标记?
问题描述
通常当 CSS 计数器用于列表时,OL list-style-type 设置为 none 并且 ::before 伪元素用于代替真正的列表标记。
但是,我注意到在 Firefox(69.0,target:x86_64-apple-darwin,在 MacOS Mojave 上运行)中,计数器重置的存在对实际的列表标记有些奇怪。考虑:
ol {counter-reset: some-counter;}
li::before {
content: "Marker should be: " counter(some-counter) ".";
counter-increment: some-counter;
}
ol.alpha {list-style-type:lower-alpha;}
ol.alpha > li::before{content: "Marker should be: " counter(some-counter, lower-alpha) ".";}
<h2>List A</h2>
<ol>
<li>
<ol>
<li></li>
<li></li>
<li></li>
</ol>
</li>
<li>
<ol>
<li></li>
<li></li>
<li></li>
</ol>
</li>
</ol>
<h2>List B</h2>
<ol>
<li>
<ol class="alpha">
<li></li>
<li></li>
<li></li>
</ol>
</li>
<li>
<ol class="alpha">
<li style="counter-reset: some-counter"></li>
<li></li>
<li></li>
</ol>
</li>
</ol>
Chrome 和 Safari 按预期呈现,但在 FF 中,列表 A 呈现为:
并且列表 B 呈现为:
换句话说,当遍历一个两级列表时,FF 会跟踪:
- 一个共享列表标记计数器,当它碰到第一层 LI 和任何嵌套在里面的 LI 时都会递增。
- 仅适用于外部列表的“some-counter”的计数器实例
- 仅适用于任何内部列表的“some-counter”的计数器实例
FF 的列表标记显示共享计数器(带有任何必要的转换,例如到上面列表 B 中的低 alpha),而 ::before 伪元素显示适合其级别的“some-counter”实例。
如果您注释掉计数器重置,FF 将返回到其标记中的预期行为。(即使设置“counter-reset:none”仍然会导致奇怪的行为。)
counter-reset:none;
这是一个错误,还是有一些原因导致当计数器重置(偶数)应用于顶级时,列表标记中会有未定义的行为<ol>
?
解决方案
这是有意的,有待规范说明。(此行为是为 Firefox 68 实现的。)
Firefox 让您的ol {counter-reset: some-counter}
规则覆盖内置的 UA 样式,删除wrt 列表编号ol {counter-reset: list-item}
的任何特殊含义。ol
如错误中所述,您可以指定两个计数器 ( ol {counter-reset: some-counter list-item;}
) 来解决此问题。
ol {counter-reset: some-counter list-item;}
li::before {
content: "Marker should be: " counter(some-counter) ".";
counter-increment: some-counter;
}
ol.alpha {list-style-type:lower-alpha;}
ol.alpha > li::before{content: "Marker should be: " counter(some-counter, lower-alpha) ".";}
<h2>List A</h2>
<ol>
<li>
<ol>
<li></li>
<li></li>
<li></li>
</ol>
</li>
<li>
<ol>
<li></li>
<li></li>
<li></li>
</ol>
</li>
</ol>
<h2>List B</h2>
<ol>
<li>
<ol class="alpha">
<li></li>
<li></li>
<li></li>
</ol>
</li>
<li>
<ol class="alpha">
<li style="counter-reset: some-counter"></li>
<li></li>
<li></li>
</ol>
</li>
</ol>
推荐阅读
- javascript - 使用 MapContainer React Leaflet 显示图例
- azure - Azure 逻辑应用 - 无权查询订阅?
- haskell - 在统一过程中,高级类型的实例化和包含如何交互?
- typescript - 在执行转换对象的函数时如何推断类型修改?
- python - 来自数据类的 dict 返回空字典
- mysql - ping:无法解析 db1:未知主机
- node.js - node express with multer 如何在运行时选择 MemoryStorage 或 DiskStorage
- python - 使用 ray 和 numpy 有效地计算成对相似度/相异度
- javascript - 数组推送重复或跳过搜索功能内的推送
- java - 如何根据语言环境从 Spring 属性文件中注入列表