css - 如何将多个参数传递给 Sass Mixin:列表和命名变量
问题描述
我正在使用 mixin 来输出默认的转换时间函数、持续时间和可变数量的属性。
当前混合:
@mixin fast-transition($properties...) {
transition-duration: 0.1s;
transition-timing-function: cubic-bezier(0.42, 0, 0.58, 1);
@if length($properties) > 1 {
transition-property: $properties;
} @else {
transition-property: all;
}
:global(.browser-ie) & {
transition: none;
}
}
当前使用情况:
@include fast-transition(background-color, color);
当前结果:
.el {
transition-duration: 0.1s;
transition-timing-function: cubic-bezier(0.42, 0, 0.58, 1);
transition-property: background-color, color;
}
.browser-ie .el {
transition: none;
}
我想做的是指定transition: none
代码块的用法,可能通过@if 语句。
所需的 Mixin(不起作用)
@mixin fast-transition($properties..., $ieTransition) {
transition-duration: 0.1s;
transition-timing-function: cubic-bezier(0.42, 0, 0.58, 1);
@if length($properties) > 1 {
transition-property: $properties;
} @else {
transition-property: all;
}
@if not ($ieTransition) {
:global(.browser-ie) & {
transition: none;
}
}
}
用法:(无效)
@include fast-transition((background-color, color), $ieTransition);
期望的输出:
.el {
transition-duration: 0.1s;
transition-timing-function: cubic-bezier(0.42, 0, 0.58, 1);
transition-property: background-color, color;
}
工作版 - 来自云岑的回答
@mixin fast-transition($ie: false, $props: "all") {
transition-duration: 0.1s;
transition-timing-function: cubic-bezier(0.42, 0, 0.58, 1);
transition-property: #{$props};
@if not($ie) {
:global(.browser-ie) & {
transition: none;
}
}
}
@include fast-transition($props: "background-color, color", $ie: true);
解决方案
您必须将任意参数放在 mixin 参数列表的末尾(参见文档)
试试这个:它使用@include
参数列表中的命名参数和选项参数(doc)@mixin definition
@mixin fast-transition($ieTransition: false, $properties: "all") {
transition-duration: 0.5s;
transition-timing-function: cubic-bezier(0.42, 0, 0.58, 1);
transition-property: $properties;
@if not($ieTransition) {
:global(.browser-ie) & {
transition: none;
}
}
}
用它做这个
.el-all {
// use all for transition properties and no transition for IE
@include fast-transition();
)
// or
.el-no-ie {
// use $properties for transition properties and no transition for IE
@include fast-transition($properties: 'background-color, color");
)
// or
.el-ie {
// use $properties for transition properties and transition for IE
@include fast-transition($properties: 'background-color, color", $ieTransition: true);
)
请参阅此演示https://codepen.io/HerrSerker/pen/dyXEvWK?editors=1100
推荐阅读
- python - 使用 Python configparser 模块并获取值的最佳实践?
- php - 音频未在实时服务器 codeigniter 中播放
- laravel - Laravel 的 Eloquent:绕过 191 个字符的 VARCHAR 限制
- mongodb - Poste方法mongodb和HBS
- reactjs - React 官方文档中关于“setState”的阴霾
- html - 当用于根据内容改变宽度时,内联块不与网格一起使用
- django - 嵌套类相对于类属性有什么优势?
- python - 如何创建一个脚本来接受用户输入并使用 python 3.6 在终端命令中使用它?
- reactjs - 布尔“真”测试用例上的属性 __mobxInstanceCount 无法准备好打字稿和 mobx 失败
- reactjs - 使用 jest 运行测试用例时出现“意外的令牌导入”错误