css Sass的@content指令用例

6tdlim6h  于 2022-12-05  发布在  其他
关注(0)|答案(2)|浏览(314)

我有一个关于sass中@content的小问题
我仍然不明白如何使用它,就像我读的内容是,如果你想使用一个mixin,并插入其他东西在那里。
我的问题是:为什么我需要使用@content if works without?

我示例:

@mixin context--alternate-template {
    margin: 0;
    font-size: 14px;
}

.content-sample {
  @import context--alternate-template;
  background-color: black;
}

输出css:

.content-sample {
  margin: 0;
  font-size: 14px;
  background-color: black;
}

样品I在网上锯:

@mixin context--alternate-template {
    margin: 0;
    font-size: 14px;
    @content
}


.content-sample {
  @import context--alternate-template;
  background-color: black;
}

输出css:

.content-sample {
      margin: 0;
      font-size: 14px;
      background-color: black;
    }

所以是的,为什么我需要在mixin中插入@内容,如果没有的话。

piztneat

piztneat1#

@content对于在mixin中插入规则副本非常有用。

SCSS:

@mixin context--alternate-template {
  margin: 0;
  font-size: 14px;
  @content
}

.content-sample {
  @include context--alternate-template {
    background-color: black;
  }
}

注意:-@include调用后的括号。现在,您在font-size: 14px;后注入了规则background-color: black;

CSS输出:

.content-sample {
  margin: 0;
  font-size: 14px;
  background-color: black;
}

在这种情况下,@content是无用的。事实上,@content最有趣的用法是插入嵌套的选择器:

SCSS:

@mixin context--alternate-template {
  margin: 0;
  font-size: 14px;
  @content
}

.content-sample {
  @include context--alternate-template {
    .important-thing {
      color: red;
    }
    &.is-italic {
      font-family: 'my-webfont-italic';
    }
  }
  
  // outside mixin call
  background-color: black;
}

CSS输出:

.content-sample {
  margin: 0;
  font-size: 14px;
  background-color: black;
}
.content-sample .important-thing {
  color: red;
}
.content-sample.is-italic {
  font-family: 'my-webfont-italic';
}
mw3dktmi

mw3dktmi2#

@content的另一个用例帮助我看到了它的价值-媒体查询
SCSS:

@mixin desktop {
    @media screen and (min-width: $desktop-size) {
        @content;
    }
}

.main {
    display: flex;
    flex-direction: row;
    
    
    @include desktop{
        flex-direction: column;
    }
}

CSS输出

.main {
  display: flex;
  flex-direction: row;
}
@media screen and (min-width: 60rem) {
  .main {
    flex-direction: column;
  }
}

相关问题