:first-of-type表现得好像不存在一样?

时间:2017-02-27 15:55:29

标签: css css3 css-selectors pseudo-class

我正在使用:first-of-type伪类删除边距,尽管它的行为就好像我根本不使用first-of-type并删除了所有元素的边距。

以下是代码:

HTML

<ul id="share" class="hidden-xs">
        <li><a href="#" class="twitter-share socialicon" title="Share on Twitter"><em class="fa fa-twitter" aria-hidden="true"></em><div class="sr-only">Share on Twitter</div></a></li>
  <li><a href="#" class="instagram-share socialicon" title="Share on Instagram"><em class="fa fa-instagram" aria-hidden="true"></em><div class="sr-only">Share on Instagram</div></a></li>
        <li><a href="#" class="envelope-share socialicon" title="Share via Email"><em class="fa fa-envelope" aria-hidden="true"></em><div class="sr-only">Share via Email</div></a></li>
</ul>

CSS

.socialicon {
    margin-left: 80px;
    font-size: 12px;
    vertical-align: middle;
}

.socialicon:first-of-type {
    margin-left: 0px;
}


ul#share{
    margin: 0px;
    padding: 0px;
    list-style: none;
    display: inline;
    line-height: 19px;
    margin-left: 15px;
}
ul#share li{
    display: inline-block;
}
ul#share li span {
    color: white;
    font-weight: 600;
    text-transform: uppercase;
}

JSFIDDLE

1 个答案:

答案 0 :(得分:2)

:first-of-type并不完全直观 - 它不会考虑整个文档,而是将父元素作为参考点。从这个意义上说,每个锚元素都是封闭的li元素中的“其类型的第一个元素”,这就是选择器应用于每个元素的原因。您需要做的是将:first-of-type一级向下移动到li元素。由于它们都处于同一级别,因此只有第一个li受到影响。 (但是,这会影响同一页面上另一个列表中的第一个li

li:first-of-type .socialicon{
    margin-left: 0px;
}

your modified fiddle