将多个引导类合并为一个SASS类

Nik*_*Nik 7 css sass twitter-bootstrap

在表单中,我有多个表单组行,每个行都有一个标签和表单控制元素。

<div class="form-group row">
  <label class="col-xs-2 col-md-3">Text</label>
  <div class="col-xs-10 col-md-9">
    <input class="form-control" type="text">
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

标签使用类:“ col-xs-2 col-md-3”和表单控件:“ col-xs-10 col-md-9”

是否可以将label元素的两个“ col”类组合为sass中的一个类?像这样:

.label-width{
   .col-xs-2
   .col-md-3
}
Run Code Online (Sandbox Code Playgroud)

给我:

<label class="label-width">Text</label>
Run Code Online (Sandbox Code Playgroud)

然后,我可以使用诸如$$ ColumnColumnWidth:2这样的sass变量进行控制,从而为我提供一种快速设置所有行的标签宽度的方法。像这样:

$labelColumnWidth: 2
.label-width{
   .col-xs-#{$labelColumnWidth}
   .col-md-#{$labelColumnWidth}
}
Run Code Online (Sandbox Code Playgroud)

我想将bootstrap类用于列间距,但能够使用sass变量控制它们,以快速更改表单的布局。可能?

Md.*_*yed 6

您可以使用多种方式扩展多个类,例如:

方式一

.my-class {
   @extend .class1;
   @extend .class2;
   .
   .
   .
   @extend .classn;
}
Run Code Online (Sandbox Code Playgroud)

方式2

另一种方法是您可以在此处的示例中在一行中扩展多个类

.my-class {
   @extend #{'.class1', '.class2', ... , '.classn'}
}
Run Code Online (Sandbox Code Playgroud)

了解更多细节:Sass官方文档

谢谢


d_z*_*z90 5

即使这不是一个好习惯,您也可以通过进行操作@extend,这意味着您的代码应如下所示:

.label-width{
   @extend .col-xs-2
   @extend .col-md-3
}
Run Code Online (Sandbox Code Playgroud)

如果需要更多说明,请看这里

  • 为什么这是不好的做法? (4认同)
  • 只是想知道,因为如果有很多地方要集中内容,您可以创建一个类似 `.myCenter{ @extend .d-flex @extend .flex-column @extend .justify-content-center }` 的类,然后你会有一个可重用的类,这似乎是更好的实践 (3认同)
  • 尝试上述解决方案,我得到:“.label-width”未能@extend“.col-sm-3”,未找到选择器“.col-sm-3”。 (2认同)
  • @Sam 我相信有些人认为这是不好的做法,因为它经常被不小心使用,然后可能会创建额外的、意想不到的规则。然而,这并不是单方面的糟糕做法,您只需要知道它是如何工作的,以便最有效地使用它:https://www.smashingmagazine.com/2015/05/extending-in-sass-without-mess/ (2认同)