我可以在Sass中为一个属性使用多个值吗?

时间:2017-04-03 15:06:58

标签: html css css3 sass grid-layout

与我的问题here略有关系。

在Sass中说,如果我希望为一个属性使用多个值,有没有办法可以使用mixin实现这个?

NB:我知道我对@each的使用是错误的,但这有助于说明我正在尝试做什么。

到目前为止,我有以下

@mixin grid-fractions($grid-type, $args) {
  @supports (display:grid) {
    display: grid;    
    #{$grid-type}: @each $args #{$args}fr;
  }
}

它的用法如下:@include('grid-template-rows', 2, 1, 1);我想让mixin输出如下内容:

@supports (display:grid) {
    display: grid;    
    grid-template-rows: 2fr 1fr 1fr;
  }

我知道$args允许你在mixin中包含多个值,但它显然不起作用,因为我可能没有正确使用它!

1 个答案:

答案 0 :(得分:0)

为什么不只是@include('grid-template-rows', '2fr 1fr 1fr');

或者

包含mixin并将参数作为arglist传递。它可以根据您的需要以不同的方式完成。

  @mixin grid($template-rows:null,$template-cols:null,$template-areas:null){
    @supports (display:grid) {
      display:grid;
      $grid-rows:();
      $grid-cols:();
      $grid-areas:();

      @each $rows in $template-rows{
        $grid-rows: append($grid-rows, #{$rows}fr);
      }
      @each $cols in $template-cols{
        $grid-cols: append($grid-cols, #{$cols}fr);
      }
      @each $areas in $template-areas{
        $grid-areas: append($grid-areas, #{$areas}fr);
      }
      grid-template-rows:#{$grid-rows};
      grid-template-columns:#{$grid-cols};
      grid-template-areas:#{$grid-areas};
    }
  }

  html{
    @include grid(1 2 3, 4 5 6, 7 8 9 );
  }

        /*
          // Outputs:
          @supports (display: grid) {
            html {
              display:grid;
              grid-template-rows: 1fr 2fr 3fr;
              grid-template-columns: 4fr 5fr 6fr;
              grid-template-areas: 7fr 8fr 9fr;
            }
          }
        */