【问题标题】:CSS min() function to SASSCSS min() 函数到 SASS
【发布时间】:2022-02-02 21:28:18
【问题描述】:

我有如下 CSS 函数:

width: min(calc(100vw - 51rem), calc(100vh - 2rem));

在使用 CSS 文件时可以正常工作,但在 SASS 中使用时就不行了。如何为 SASS 重写这个函数?

【问题讨论】:

  • wv --> vw .....
  • 修改后还是不行?
  • 不,看看 Codepen:codepen.io/maxmets/pen/BajoGMM
  • 你正在使用 SASS,所以 min 正在尝试编译为 SASS 函数
  • @TemaniAfif 那么我该如何解决呢?

标签: css sass css-calc


【解决方案1】:

当使用 SASS 时,min() 是 SASS 本身中的一个函数,因此您的语句在处理时不会进入您的 CSS。由于 SASS 区分大小写而 CSS 不区分,因此有一个快速的解决方法。只需将 Min() 中的“M”大写。 Min() 语句不会被识别为内部 SASS min() 函数,但可以在 CSS 中工作。

    width: Min(calc(100vw - 51rem), calc(100vh - 2rem));

【讨论】:

  • 似乎它不适用于 linter 基本配置
【解决方案2】:

您可以使用这些 Sass 函数来强制 CSS 函数。

@function css-function( $function, $values... ) {
    @return 
        $function
        + unquote( '(' )
        + $values
        + unquote( ')' )
    ;
}

@function css-min( $values... ) {
    @return css-function( min, $values );
}

@function css-max( $values... ) {
    @return css-function( max, $values );
}

@function css-clamp( $values... ) {
    @return css-function( clamp, $values );
}

结合使用 Sass 变量和 CSS 变量时,您可能仍需要使用 #{ } 插值。

用法:

$width-first: 40px;
$width-second: 30px;

.my-selector {
    width: css-min(#{$width-first}, #{$width-second});
}

编译:

.my-selector {
    width: min(40px, 30px);
}

【讨论】:

  • 谢谢,这个解决方案适用于 css 变量
  • 不客气☺️
【解决方案3】:

您可以将min 包装在calc 中,它可以工作:

width: calc(min(calc(100vw - 51rem), calc(100vh - 2rem)));

在您的情况下,您甚至可以简化代码:

width: calc(min(100vw - 51rem, 100vh - 2rem));

【讨论】:

  • 不适用于 css 变量
  • 确实如此。要在 calc() 中使用 SASS 变量,需要将其包装在 #{} 中,因此它看起来像这样:calc(1px + #{$myVar})
  • 对不起,我的意思是它可以工作,但是 linter 基本配置以某种方式拒绝它,我想这与 CSS 和 SCSS 中的 min 混淆太多了,我在谈论 CSS 变量 var(--my -var)我正在注入我的节点,而不是在构建时编译的 SCSS 变量。但顺便说一句,这是个不错的技巧。
猜你喜欢
  • 2018-04-22
  • 2019-09-13
  • 2019-03-07
  • 2017-05-14
  • 2013-08-01
  • 1970-01-01
  • 2016-03-22
  • 1970-01-01
  • 2021-12-09
相关资源
最近更新 更多