我认为:第一个类型会影响第一个类型,在我的情况下是
<div class="box">I am the first box in div.center...</div>
如果我移除<div class="top">
CSS工作并添加绿色顶部边框。
但我需要<div class="top">
,那么如果<div class="top">
存在,它为什么不起作用?
<div class="main-wrap">
<div class="center">
<h3>Lorem Ipsum</h3>
<div class="top">XXX XXX XXXX</div>
<div class="box">I am the first box in div.center. Why no top border?</div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
</div>
</div>
.box {
width:100%;
height:30px;
margin:10px 0;
background-color:orange;
}
.main-wrap .center div.box:first-of-type {
border-top:4px solid green;
}
.box {
position:relative;
border-bottom:4px solid green;
}
答案 0 :(得分:8)
当你有div.top
时,它就会成为其父级中的第一个div
元素。 :first-of-type
只查看元素的类型; div.box:first-of-type
实际上只有在div:first-of-type
类,而不是第一个.box
时才选择div.box
。
要到达第一个div.box
,请使用相邻的兄弟选择器:
.main-wrap .center div.top + div.box {
border-top:4px solid green;
}
答案 1 :(得分:1)
CSS声明过度限定。如果这个设计模式在整个网站中重复出现,那么使用下面的兄弟选择器就会更好更清洁:
.top + .box {
border-top: 4px solid green;
}
浏览器从右到左查看声明,因此将扫描所有.box
类,然后扫描与.box
关联的.top
类。通过添加其他类,在应用声明样式之前,浏览器将被强制重新扫描2次。