从Sass元素中仅选择直接子元素

时间:2015-05-17 18:53:37

标签: css sass

假设我有以下html:

<header class="header">
    <div class="title">
        <h1>Home</h1>
    </div>

    <div class="logo">
        <img src="#" alt="Logo">
    </div>

    <div class="account">
        <div class="options">
        </div>

        <div class="search">
        </div>
    </div>
</header>

我有以下SCSS:

header {
    height: 4.1rem;

    div {
        width: 33%;
        float: left;
        height: 4.1rem;
        line-height: 4.1rem;
        color: #fff;

        &.title {
            h1 {
                font-weight: normal;
                font-size: 3rem;
                padding: 0;
                margin: 0;
            }
        }

        &.logo {
            text-align: center;
        }

        &.account {
        }
    }
}

现在我遇到的问题是div optionssearchaccount的33%,这是我div {width: 33%}的逻辑。我知道我可以选择直接子元素:

header {
  > div {
  }
}

但即使我把>放在所有其他类的前面,这也无济于事。我也知道我可以说宽度应该是0或.account中的任何一个但是我想阻止它。

3 个答案:

答案 0 :(得分:27)

试试这个:

    ...
    & > div {width: 33%;}

    div {
      float: left;
      height: 4.1rem;
      line-height: 4.1rem;
      color: #fff;
      ...

取出div宽度并仅将其应用于直接儿童。保持休息状态。 以下是快速fiddle(稍后删除.option.search样式,仅用于可视化。

请编辑您的问题并更好地解释您想要达到的目标。

答案 1 :(得分:2)

我不确定我理解你。但是我认为你想在纯CSS中使用直接子项和子伪选择器的组合:

header > div:first-child {
}

或者,对于第二个div:

header > div:nth-child(2) {
}

您还可以使用not选择器:

header > div:not(.account) {
}

排除任何不需要的div。

答案 2 :(得分:2)

像这样在父元素中使用&>

.services {
    & > div {
        margin-bottom: 25px;
    }
}