在SCSS中包含另一个类

F21*_*F21 265 inheritance sass

我在我的SCSS文件中有这个:

.class-a{
  display: inline-block;
  //some other properties
  &:hover{
   color: darken(#FFFFFF, 10%);
 }  
}

.class-b{

 //Inherite class-a here

 //some properties
}
Run Code Online (Sandbox Code Playgroud)

在class-b中,我想继承所有属性和嵌套声明class-a.这是怎么做到的?我尝试使用@include class-a,但这只是在编译时抛出错误.

F21*_*F21 566

貌似@mixin@include没有需要一个简单的例子是这样的.

人们可以这样做:

.myclass {
  font-weight: bold;
  font-size: 90px;
}

.myotherclass {
  @extend .myclass;
  color: #000000;
}
Run Code Online (Sandbox Code Playgroud)

  • @extend工作正常,但如果任何一个类都在一个指令内(通常是一个媒体查询),它将不起作用; 除非他们都在同一个指令中. (34认同)
  • 看看这里有关`@extend`的一些有趣的事实 - 你应该注意一些棘手的副作用:http://stackoverflow.com/questions/30744625/sass-and-bootstrap-mixins-vs-extends/30744854#30744854 (9认同)
  • [使用占位符的示例](http://www.sassmeister.com/gist/39c0dfd87cfb1fce2b8b)Vs [使用普通类选择器的示例](http://www.sassmeister.com/gist/949aa56de85e5eca03de) (5认同)
  • 谢谢@ToniLeigh,PlaceHolder 很有趣,因为如果父选择器仅用于扩展(未在任何地方使用),它们可以节省 ** 附加 CSS 选择器** 的生成。就像在上面的例子中,除了 `.myotherclass` 之外,`.myclass` 没有在其他任何地方使用(我想),那么最好将 `.myclass` 定义为 `%myclass` 并在 `.myotherclass` 中扩展为 `@扩展 %myclass;`。它将生成为 `.myotherclass{ font-weight: bold; 字体大小:90px;颜色:#000000;}` (2认同)

Ash*_*win 39

试试这个:

  1. 使用公共属性创建占位符基类(%base-class)
  2. 使用此占位符扩展您的类(.my-base-class).
  3. 现在,您可以在任何类中扩展%base-class(例如.my-class).

    %base-class {
       width: 80%;
       margin-left: 10%;
       margin-right: 10%;
    }
    
    .my-base-class {
        @extend %base-class;
    }
    
    .my-class {
        @extend %base-class;
        margin-bottom: 40px;
    }
    
    Run Code Online (Sandbox Code Playgroud)

  • 感谢您发布替代答案,但从您的答案中不清楚为什么我们需要它。如果您可以添加更多推理来阐明此方法的用例或优点,我们将不胜感激。谢谢你。 (3认同)

小智 17

@extend .myclass;
@extend #{'.my-class'};
Run Code Online (Sandbox Code Playgroud)

  • 虽然此代码可能会回答问题,但提供有关此代码为什么和/或如何回答问题的附加上下文可提高其长期价值。 (37认同)
  • 这里的 hashbang 是什么意思? (4认同)
  • @dev_willis 嗯...我不明白*只是 F 和body 的 I*。这是文字游戏还是我今天太慢了? (4认同)
  • ```@extend #{'.my-class', '.my-other-class'};``` (3认同)

Ari*_*Ari 15

使用@extend是一个很好的解决方案,但要注意编译的css将打破类定义.任何扩展相同占位符的类都将组合在一起,并且未在类中扩展的规则将在单独的定义中.如果多个类被扩展,在编译的css或开发工具中查找选择器会变得不守规矩.mixin将复制mixin代码并添加任何其他样式.

你可以在这个sassmeister中看到@extend和@mixin之间的区别


小智 6

另一种选择是使用属性选择器:

[class^="your-class-name"]{
  //your style here
}
Run Code Online (Sandbox Code Playgroud)

每个以“您的班级名称”开头的班级都使用这种样式。

因此,就您而言,您可以这样做:

[class^="class"]{
  display: inline-block;
  //some other properties
  &:hover{
   color: darken(#FFFFFF, 10%);
 }  
}

.class-b{
  //specifically for class b
  width: 100px;
  &:hover{
     color: darken(#FFFFFF, 20%);
  }
}
Run Code Online (Sandbox Code Playgroud)

有关w3Schools上的属性选择器的更多信息