CSS实现带括号小写字母有序列表时(c)自动转为版权符号如何解决
问题原因
该异常是字体的OpenType自动排版替换特性导致的:你引入的Manrope字体内置了特殊字符替换规则,会将连续字符组合(c)自动转换为版权符号©,和CSSlower-alpha计数器本身逻辑无关。::marker伪元素内的文本默认继承字体的这类自动替换规则,因此触发了非预期的字符转换。
解决方案
方案1:禁用marker区域的字符连字/替换(改动最小)
直接在现有CSS中追加如下规则,关闭marker区域的字体自动替换特性即可,不需要修改原有计数器逻辑:
ol > li::marker { font-variant-ligatures: none; }
如果需要兼容极旧版本浏览器,可以额外增加text-rendering: optimizeSpeed;属性,进一步阻止字体的智能字符替换。
方案2:改用::before伪元素实现序号(兼容性最佳)
::marker伪元素的样式可控性在部分旧浏览器中存在局限,你也可以放弃::marker,改用::before伪元素实现带括号的小写字母序号,彻底避开字符替换问题,将原有CSS中和ol序号相关的代码替换为如下内容即可:
ol { counter-reset: list; padding-left: 30px; line-height: 2rem; } ol > li { list-style: none; counter-increment: list; position: relative; padding-left: 2em; } ol > li::before { content: "(" counter(list, lower-alpha) ")\a0"; position: absolute; left: 0; font-variant-ligatures: none; }
额外修复建议
你现有CSS中存在两处不规范的写法,建议同步修正避免后续出现异常:
- 存在两段重复的
ol > li::marker规则,后写的规则会覆盖前序规则,冗余代码可以删除 .laparent相关的计数器使用了数字1作为计数器名称,不符合CSS规范(计数器名称不能以数字开头),建议修改为有语义的名称如laparent-counter,避免计数失效。
内容的提问来源于stack exchange,提问作者Franciszek Job
相关产品推荐
相关产品推荐

