问题描述
我正在尝试为文本样式创建 scss mixin,其中包括颜色、字体大小、字体粗细、行高和字体系列。这就是我所做的 -
$color-gray-6: #777777;
$font-serif: 'Barlow',sans-serif;
$font-sans: 'Playfair display',serif;
@mixin font-style(
$colour: $color-gray-6,$size: 1.6,$weight: 400,$line: $size * 1.5,$family: serif
) {
@if $size {
font-size: ($size * 1) + px;
font-size: ($size / 10) + rem;
}
@if $line == 1 {
line-height: 1;
} @else {
line-height: ($line * 1) + px;
line-height: ($line / 10) + rem;
}
@if $colour {
color: $colour;
}
@if $weight {
font-weight: $weight;
}
@if $family == serif {
font-family: $font-serif;
} @else {
font-family: $font-sans;
}
}
我将混合用作 - @include font-style(#000000,14,400,sans)
问题 - 当我没有通过行高时出现此错误 - 未定义操作“sans * 1。我认为当行高不存在时,它将字体系列视为第 4 个参数。
问题 - 有没有办法让第 4 个参数可选,或者如果有更好的方法,请提出建议。
解决方法
第四个参数或您的 font-style()
mixin 是 $line
。当您传入 sans
作为参数时,您并没有跳过它。取而代之的是,您将第五个参数变成了第四个参数。
您可以采取的最佳方法是使用“关键字参数”:https://sass-lang.com/documentation/at-rules/mixin#keyword-arguments
本质上,您需要告诉 mixin 它是您提供的参数。
示例:
@include font-style(#000,14,400,$family: sans);