如何在CSS中通过类与ID选择器覆盖父元素对子元素的margin样式
如何在CSS中通过类与ID选择器覆盖父元素对子元素的margin样式
兄弟,太懂你调样式半天没反应的憋屈感了!其实你踩的是CSS选择器语法的坑,不是margin本身的问题~
先看你写的这段选择器:
.boxess #boxes_1 #boxes_2 #boxes_3{ margin-top: 0; }
这种写法的意思是:找一个#boxes_3元素,它的父元素是#boxes_2,#boxes_2的父元素是#boxes_1,而#boxes_1又在.boxess里面。但你的结构明显是.boxess直接包含这六个盒子,所以这个选择器根本没选中任何元素,自然不会生效!
给你几个靠谱的解决办法:
1. 正确的多ID选择器写法
用逗号分隔每个要选中的元素,确保每个ID都和父类.boxess关联:
.boxess #boxes_1, .boxess #boxes_2, .boxess #boxes_3 { margin-top: 0; }
这样就能精准命中.boxess下的前三个盒子了。
2. 更简洁的伪类写法(推荐)
如果六个盒子都是.boxess的直接子元素,而且前三个是连续排列的,用:nth-child伪类可以不用一个个写ID:
.boxess > :nth-child(-n+3) { margin-top: 0; }
这里的-n+3表示选中前3个子元素,>符号确保只选.boxess的直接子元素,避免影响嵌套在盒子里的其他元素。
3. 更易维护的类名方案(长远推荐)
其实没必要依赖ID来区分,给前三个盒子加个共同的类,比如.top-group,然后直接写:
.boxess .top-group { margin-top: 0; }
以后如果要调整哪些盒子属于顶部组,直接改HTML的类名就行,比写一堆ID灵活多了。
另外你之前试的!important、负margin没用,本质都是因为选择器没命中目标元素,先把选择器写对,样式自然就生效啦~
备注:内容来源于stack exchange,提问作者Zack Riquelme




