CSS嵌套中::marker样式生效异常:归属<details>还是<summary>?
CSS嵌套中::marker样式不生效问题解析
问题根源:选择器的空格错误
你写的不生效代码里,& ::marker中间多了一个空格,这会让选择器变成后代选择器,意思是找summary元素的后代元素里的::marker,但::marker是summary自己的伪元素,不是后代元素,所以样式不会生效。
把空格去掉,写成&::marker就对了,此时嵌套展开后是details summary::marker,直接选中summary的伪元素,样式就能正常生效:
details { padding: 4px; & summary { color: red; &::marker { /* 去掉空格 */ color: green; } } }
::marker的归属问题
根据CSS规范,::marker伪元素属于**
至于开发者工具里显示归属有困惑,是因为浏览器渲染时,会把summary的marker放在details的上下文位置,但语法和规范上,它明确属于summary。
为什么details::marker会生效?
你写的生效代码里,details::marker其实不符合规范,因为
本身并不生成::marker。这属于浏览器的兼容行为:部分浏览器会自动把details上的::marker样式映射到它的子元素summary的marker上,但这不是标准写法,不推荐依赖这种行为,还是直接针对summary设置更稳妥。
内容的提问来源于stack exchange,提问作者xkeshav
相关产品推荐
相关产品推荐

