9

我认为 :first-of-type 会影​​响第一个类型,在我的情况下是

<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;
}
4

2 回答 2

12

当你在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;
}
于 2013-10-15T13:25:23.483 回答
1

CSS 声明是过度限定的。如果此设计模式在整个站点中重复出现,那么使用以下同级选择器同样好且更简洁:

.top + .box {
    border-top: 4px solid green;
}

浏览器从右到左查看声明,因此将扫描所有.box类,然后扫描.box关联的类.top。通过添加额外的类,浏览器在应用声明样式之前被迫重新扫描 2 次。

于 2013-10-21T22:52:43.803 回答