【问题标题】:Use sass function result in function使用 sass 函数导致函数
【发布时间】:2020-03-23 16:41:56
【问题描述】:

我有一些断点,以及处理它们的 mixin:

$breakpoints: (
    'xs': (max-width: 768px),
    'sm': (min-width: 768px),
    'md': (min-width: 992px),
    'lg': (mix-width: 1200px),
) !default;

@mixin screen($breakpoint) {
    @if map-has-key($breakpoints, $breakpoint) {
        @media #{inspect(map-get($breakpoints, $breakpoint))} {
           @content;
         }
     } @else {
        @warn "Unfortunately, no value could be retrieved from `#{$breakpoint}`. "
        + "Available breakpoints are: #{map-keys($breakpoints)}.";
    }
}

现在我喜欢的是像素值将通过em() 函数。

该函数如下所示:

@function em($pixels, $context: $font-initial-size) {
   @return #{$pixels/$context}em;
}

现在我希望它看起来像这样:

 $breakpoints: (
    'xs': (max-width: em(768px)),
    'sm': (min-width: em(768px)),
    'md': (min-width: em(992px)),
    'lg': (mix-width: em(1200px)),
) !default;

然后 CSS 输出是这样的:

@media (min-width: em(768px)) {

...应该是:

@media (min-width: 48em) {

那么如何在一个 sass 函数中返回一个 sass 函数的结果呢?

我尝试将 #{} 添加到 $breakpoint... 但没有奏效。

【问题讨论】:

    标签: css sass scss-mixins


    【解决方案1】:

    好吧,那是行不通的,因为你需要先定义你的函数,然后再在 sass 文件中使用它。将em 函数移至文件顶部以解决问题:

    $font-initial-size: 16px;
    
    @function em($pixels, $context: $font-initial-size) {
      @return #{$pixels / $context}em;
    }
    
    $breakpoints: (
        "xs": (max-width: em(768px)),
        "sm": (min-width: em(768px)),
        "md": (min-width: em(992px)),
        "lg": (max-width: em(1200px))
    ) !default;
    
    @mixin screen($breakpoint) {
      @if map-has-key($breakpoints, $breakpoint) {
        @media #{inspect(map-get($breakpoints, $breakpoint))} {
          @content;
        }
      }
      @else {
        @warn "Unfortunately, no value could be retrieved from `#{$breakpoint}`. " + "Available breakpoints are: #{map-keys($breakpoints)}.";
      }
    }
    
     @include screen('sm') {
        color: blue;
    }
    

    【讨论】:

    • 是的!你是对的,这是加载函数的顺序问题。最后一个问题;对于这些媒体查询值,您应该使用 EM 还是 REM?如果我理解正确,EM 是基于基本字体大小的。 REM 总是 16px。那么我是否希望我的布局断点可以根据基本字体大小而变化...
    • 无法保证 rem 会有 16px,大多数浏览器确实将其设置为 16,但您仍然可以覆盖它。总的来说,我同意使用 rem 比使用 em 更好,但我会说这取决于你的特定用例,所以测试一下,如果 rem 对你有用,太好了!
    猜你喜欢
    • 2020-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    • 2019-08-25
    • 2020-04-07
    • 2019-09-13
    • 2021-08-14
    相关资源
    最近更新 更多