CSS中可在一个class内部定义另一个class样式吗?相同代码为何失效
问题解答
写法名称
这种写法叫做CSS原生嵌套(CSS Nesting),是CSS官方在2021年提出、2023年落地的标准语法,功能和Sass、Less等CSS预处理器的嵌套语法基本一致。
运行原理
浏览器解析嵌套语法时,会自动将内层选择器和外层父选择器进行拼接,最终生成符合传统CSS规范的平级选择器。你给出的示例代码最终会被解析为等效的普通CSS代码:
.cube { width: 2em; height: 2em; } .cube .side { width: 100%; height: 100%; background: #; }
如果是在开启了预处理器的环境中运行,预处理器会在代码上线前就完成拼接编译,不需要依赖浏览器的原生支持。
代码不生效的常见原因
- 浏览器版本不支持:原生CSS嵌套的最低兼容版本为Chrome 112、Firefox 117、Safari 16.5,如果你的本地运行环境的浏览器版本低于上述要求,就无法识别嵌套语法,代码自然不会生效。
- 未配置CSS预处理器:如果对方的Codepen项目开启了Sass、SCSS等预处理器支持,就算浏览器不支持原生嵌套,预处理器也会提前将嵌套代码编译为普通CSS。如果你本地没有配置对应的预处理器编译流程,直接把嵌套代码作为原生CSS引入,就会出现失效问题。
- 特殊情况:本地服务器未给CSS文件配置正确的
text/cssMIME类型,也可能导致CSS规则不被浏览器解析,这种情况可以通过浏览器控制台的报错信息确认。
内容的提问来源于stack exchange,提问作者John Prabhakar
相关产品推荐
相关产品推荐

