SCSS变量类名

Gus*_*ton 29 css sass

在我的网站上,我一直在做style ="font-size:#ofpx;".但是,我想知道是否有办法用scss这样做,这样,当我声明一个类时,它也会改变字体大小.例如:

<div class='col-lg-4 font-20'>whatever here</div>
Run Code Online (Sandbox Code Playgroud)

这会将我的font-size更改为20.如果我使用font-30,它会将我的font-size更改为30等等...

到目前为止我所拥有的:

.font-#{$fontsize} {
      font-size: $fontsize;
}
Run Code Online (Sandbox Code Playgroud)

Woo*_*low 38

任何尺寸都无法做到这一点.SCSS的本质是在应用于HTML 之前需要将其展平为CSS .但是,您要求的主要是在运行时而不是编译时创建规则.

你所要求的也是代码味道.它闻起来像你的标记不够语义.CSS类的目的是对具有相似特征的对象进行分组,但您使用它们来描述它们赋予的样式.我建议退一步,重新考虑你真正想要的东西.

您显然具有与上下文相关的某些元素的详细信息.例如,当您想要使这些规则比平常更小或更大时,您可能会将这些规则应用于按钮.您需要确定按钮更改的方案.如果他们在模态对话中,他们可能会小20%?然后编写您的常规.button规则,并创建.modal .button使其更小的规则.

如果您想要为HTML中的每个元素定义font-size,那么只需继续使用内联样式即可.内联样式的唯一原因令人不悦,因为它以一种损害可重用性的方式结合了模型和视图逻辑; 但是,您要求的内容完全相同.这就是内联样式的用途.不要重新发明轮子.

尽管如此,您可以使用sass循环自动为一个范围内的整数生成类.例如:

/* warning: this is generally a bad idea */
@for $i from 1 through 100 {
  .font-#{$i} {
    font-size: #{$i}px;
  }
}
Run Code Online (Sandbox Code Playgroud)

这不是一个好主意.实际上,它不仅仅使用内联样式提供任何优势,而且对于大范围,您生成的文件将更大(这会影响网站加载时间).

这是一个可运行的jsFiddle这种技术的例子.


小智 9

只是要添加,mixins很棒,但是如果你想要一个util类(将一个类附加到一个元素,获得应用它的font-size,那么在SCSS中执行for循环就像这样..

@for $i from 1 through 4 {
    $fontsize: 10px * $i;
    .font-#{$i} { 
        font-size: $fontsize;
        }
}
Run Code Online (Sandbox Code Playgroud)

编译成

.font-1 {
  font-size: 10px;
}

.font-2 {
  font-size: 20px;
}

.font-3 {
  font-size: 30px;
}

.font-4 {
  font-size: 40px;
}
Run Code Online (Sandbox Code Playgroud)

如果你想让这个类匹配像素数......

@for $i from 1 through 4 {
    $base: 10;
    $fontsize: $base * $i;
    .font-#{$fontsize} { 
        font-size: $fontsize + 0px;
        }
}
Run Code Online (Sandbox Code Playgroud)

编译到哪个

.font-10 {
  font-size: 10px;
}

.font-20 {
  font-size: 20px;
}

.font-30 {
  font-size: 30px;
}

.font-40 {
  font-size: 40px;
}
Run Code Online (Sandbox Code Playgroud)

Codepen示例.


Mtx*_*txz 5

当使用“单词”而不是“数字”作为变量时,并且该单词不在类名末尾。我可以使用 CSS 属性选择器(“通配符选择器”)来解决一些问题。我可以迭代地图对象,并使用文本值来构建 CSS 选择器。

萨斯

//map
$colors: (
  primary: #121212,
  success: #8bcea8
);

//loop
@each $color, $value in $colors {
  //can't do this: div.first-class.is-style-#{$color}-component
  //can do this:
  div.first-class[class*="is-style-#{$color}-component"] {
     background-color: $value;
  }
}
Run Code Online (Sandbox Code Playgroud)

超文本标记语言

<div class="first-class is-style-primary-component"></div>
Run Code Online (Sandbox Code Playgroud)

这将生成一个div.myComponent[class*="is-style-primary-component"]选择器,因此<div class="first-class is-style-primary-component"></div>.first-class不是必需的,选择器可以是div[class*="is-style-#{$color}-component"]甚至[class*="is-style-#{$color}-component"]只是)。

然而,在 CSS 类命名的某些情况下,它可能会由于通配符选择器而受到限制,该选择器比特定的类选择器规则“更大”。