【发布时间】:2022-01-21 10:34:43
【问题描述】:
我正在尝试制作一个可以检测是否显示深色文本(如果传递给 buttonStyles 的颜色是浅色的)或浅色文本(用于传递深色)的 mixin。我记得有一种方法可以用 LESS 来做,我想知道是否有 SASS 方法。
考虑这个 SCSS:
$white: #fff;
$text: #393939;
$font-std: 18px;
$transition-std: 0.4s ease all;
$primary: #f8e421;
$secondary: #354052;
@mixin buttonStyles($color) {
font-size: $font-std;
color: $text;
padding: 1rem 3rem;
background-color: $color;
color: $white;
transition: $transition-std;
&:hover {
cursor: pointer;
background-color: lighten($color, 15%);
}
&:focus {
background-color: lighten($color, 10%);
}
&:active {
background-color: lighten($color, 25%);
}
}
.btnPrimary {
@include buttonStyles($primary);
}
.btnSecondary {
@include buttonStyles($secondary);
}
还有这个html:
<button class='btnSecondary'>secondary</button>
<button class='btnPrimary'>primary</button>
辅助按钮比主按钮更易读。我知道我可以传入第二个参数来设置文本颜色,但想知道是否有与 LESS 一样更清洁、更自动的方式? (不幸的是,我不记得它是如何使用 LESS 完成的)
现场演示:https://jsfiddle.net/3v0ckeq9/5/
谢谢
编辑:
我已经添加了这个似乎几乎可以工作的功能:
@function ligthOrDark($color) {
$result: red;
@if (blackness($color) == 50) { // fails with > 50 or < 50
$result: green;
}
@return $result;
}
但问题是 SASS 在尝试确定颜色是否大于 50(或小于)时会抱怨,但可以使用 ==。我只想能够确定提供的颜色是深色还是浅色,以便应用正确的文本颜色。
看来这里应该有判断明暗的选项:https://sass-lang.com/documentation/modules/color#grayscale
欢迎使用替代解决方案。
【问题讨论】:
标签: css sass scss-mixins