【问题标题】:Sass Mixin: order-independent arguments without using named arguments? [duplicate]Sass Mixin:不使用命名参数的顺序无关参数? [复制]
【发布时间】:2015-12-27 22:32:44
【问题描述】:

情况

我有一个这样的混合:

@mixin flexbox($type: null, $direction: null) {
    @if $type == null or $type == 'flex' {
        (...)
        display: flex;
    } 
    @if $type == 'inline-flex' {
        (...)
        display: inline-flex;
    }
    @if $direction == null or $direction == 'row' {
        (...)
        flex-direction: row;
    } 
    @if $direction == 'column' {
        (...)
        flex-direction: column;
    }
}

我现在可以这样使用:

@include flexbox(inline-flex, column);

但是我不能这样做:

@include flexbox(column);

因为现在 mixin 将“列”视为“$direction”的参数。

有办法解决吗?
一种让我的论点独立于它们的顺序的方法?

例如我希望能够通过以下任何一种方式使用 mixin:

@include flexbox(column);

@include flexbox(column, inline-flex);

@include flexbox(row, flex);

@include flexbox(row);

目前这些都不起作用,因为参数需要按特定顺序排列。

为什么不使用命名参数?

更新:我接受此解决方案是最好的方法。

正如 Hashem Qolami 所建议的,下面的“命名参数”将是解决此问题的一种选择:

@include flexbox($direction: column);

这是一个完全可以接受的解决方案。谢谢。

但是,我正在开发一个可供我公司多人使用的框架。
因此,我想让所有的 mixin 尽可能地简单易用。

在这种情况下:

@include flexbox(column); 

比这个更受欢迎:

@include flexbox($direction: column);

因为其他开发人员知道 flexbox 可以做什么,但不知道我如何命名我的参数。

这是一件小事,真的。但是使用命名参数意味着每个人都必须了解每个可用 mixin 的参数名称。

【问题讨论】:

  • 你不能用@include flexbox(, column);吗?否则,我会为唯一方向创建一个 mixin,为唯一类型创建一个 mixin,为两者创建一个 mixin..
  • 谢谢。拆分我的 mixins 可能是一种选择。

标签: css parameters sass arguments


【解决方案1】:

Keyboard Arguments

命名参数可以任意顺序传递,默认参数 值可以省略。由于命名参数是变量名, 下划线和破折号可以互换使用。

因此,您可以按如下方式传递参数:

.box {
  @include flexbox($direction: row);
}

输出将是:

.box {
  display: flex;
  flex-direction: row;
}

【讨论】:

  • 感谢哈希姆的回答。我更新了我的问题以进一步澄清情况。但是,如果没有命名参数的解决方案是不可能的,我会采用你的方法。
  • @Arrowcatch 别提了。根据更新,我认为如果您要构建一个框架,所有功能都应该以某种方式记录下来,而不是其他开发人员可以使用。因此,如果您让他们知道参数名称是什么就可以了。这是我目前知道的唯一方法。
猜你喜欢
  • 1970-01-01
  • 2012-08-22
  • 2014-06-30
  • 1970-01-01
  • 1970-01-01
  • 2014-04-04
  • 1970-01-01
  • 1970-01-01
  • 2012-10-26
相关资源
最近更新 更多