MUI Switch组件sx样式中.Mui-checked与+运算符的生效问题咨询
MUI Switch 样式生效差异及特殊情况解析
1. 嵌套选择器对Thumb有效、对Track无效的原因
MUI Switch的DOM结构中,.MuiSwitch-thumb是被带有.Mui-checked类的.MuiButtonBase-root元素包裹的,所以你用的嵌套选择器& .Mui-checked .MuiSwitch-thumb能精准命中目标元素,样式自然生效。
而**.MuiSwitch-track和带.Mui-checked的.MuiButtonBase-root是同级兄弟元素**,并非父子嵌套关系。之前的嵌套写法& .Mui-checked .MuiSwitch-track会试图查找.Mui-checked内部的track元素,这在DOM里根本不存在,所以样式完全不生效。
2. +相邻兄弟选择器让Track样式生效的原因
& .Mui-checked+ .MuiSwitch-track里的+是CSS相邻兄弟选择器,它的作用是:选中紧跟在.Mui-checked元素之后的同级.MuiSwitch-track元素,刚好匹配Switch组件中track与checked状态元素的DOM结构,所以样式能正确作用到track上。
3. 同时使用两种.Mui-checked类名设置样式无变化的原因
你遇到的“同时使用无变化”,大概率是选择器逻辑写错了,比如错误地把两个样式规则嵌套在同一个& .Mui-checked块内:
sx={{ "& .Mui-checked": { "& .MuiSwitch-thumb": { backgroundColor: "#4a3e98" }, "& + .MuiSwitch-track": { backgroundColor: "#9a9a9a" } } }}
这种写法会让track的最终选择器变成& .Mui-checked .Mui-checked+ .MuiSwitch-track,完全不符合实际DOM结构,自然无法命中目标元素。
而你当前的正确代码是将两个选择器分开写在sx的顶层,各自对应正确的DOM层级关系,所以能正常生效。
内容的提问来源于stack exchange,提问作者MiguelG
相关产品推荐
相关产品推荐

