::marker失效的三大前提是浏览器支持(Chrome 86+/Firefox 68+/Safari 15.4+)、li的display为list-item、父级ul/ol未设list-style:none;content仅接受字符串、counter()、counters()三类值,且仅color、font-size等极少数样式有效。

li::marker没反应,先查三个硬性前提
根本不是代码写错了,而是浏览器压根没渲染::marker——它必须同时满足:浏览器支持(Chrome 86+ / Firefox 68+ / Safari 15.4+)、li的计算display值为list-item、父级ul或ol不能设list-style: none。崩一个,整条规则就静默失效,DevTools 里连::marker面板都看不到。
-
list-style: none会彻底关闭标记渲染通道;想保留自定义能力,得改用list-style-type: disc或list-style-type: none - Flex/Grid 父容器常把
li的display覆盖成flex或block;强制加display: list-item才能救回来 - iOS 15.3、微信 X5 内核、Electron 旧版(如 VS Code 1.7x)直接忽略
::marker;用getComputedStyle(el, '::marker').content验证,返回"none"就说明不支持
content写错一个字符,符号就回退到默认圆点
content是唯一能“换掉”圆点的出口,但语法极其敏感,浏览器只接受三类值:纯字符串字面量、counter()、counters()。其他一律失效,且不报错。
- ✅ 安全写法:
content: "\2022";(Unicode 实心圆)、content: "✓ ";(注意引号内末尾有空格) - ❌ 常见翻车:
content: "•" ;(分号前多空格)、content: '•'(单引号在某些构建工具中被删)、content: url(./dot.svg)(url()完全不支持) - emoji 如
"→ "在 Firefox 中宽度不均;建议加font-size: 0.9em微调对齐
能设的样式极少,别碰 margin/padding/background
::marker不是普通伪元素,浏览器只放行极窄的属性子集,其他统统静默丢弃——不报错,也不渲染。
- ✅ 稳定可用:
color(最稳)、font-size(Chrome 100+/Firefox 98+ 稳定)、font简写(如font: bold 1.2em sans-serif)、text-align(仅对多字符content生效) - ❌ 一律无效:
margin、padding、background、border、transform、display、line-height、vertical-align - 想调圆点和文字间距?改
ul的padding-left或li的text-indent,别在::marker上写margin
兼容老环境必须用 list-style: none + ::before 降级
只要项目要支持 iOS 16、Android WebView 旧版本或微信 X5,就不能把::marker当唯一方案。现代写法和降级必须共存。
- 用
@supports (::marker) { }包裹新样式,避免污染老环境 - 降级写法示例:
ul { list-style: none; padding-left: 0; } li::before { content: "• "; color: #555; margin-right: 0.5em; display: inline-block; width: 1em; } - ⚠️ 注意:
li::before方案需手动控制left和top对齐,尤其多行文本下line-height会影响垂直位置
真正麻烦的不是写法本身,而是符号与文字之间的水平间距——这个距离由浏览器 UA 样式硬编码决定,::marker和list-style-type都调不了,只有::before配合position: absolute和left才能精确控制。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











