css - 如何使 sass 颜色比较函数具有多个参数?

标签 css colors sass compass-sass sass-rails

当前的colorcontrast 函数只比较三种颜色。寻找使用多个参数构建的最佳解决方案,例如 @function colorcontrast($color, $rest...) { for color: colorcontrast(yellow, blue, orange, tomato, deekskyblue); 但不确定如何与所有列出的颜色进行比较。

@function brightness($color) {
  @return ((red($color) * .299) + (green($color) * .587) + (blue($color) * .114)) / 255 * 100%;
}
@function colorcontrast($color, $dark, $light) {
    $color-brightness: brightness($color);
    $light-text-brightness: brightness($light);
    $dark-text-brightness: brightness($dark);
    @return if(abs($color-brightness - $light-text-brightness) > abs($color-brightness - $dark-text-brightness), $light, $dark);
}

.my-div{
  padding: 1rem;
  background-color: yellow;
  color: colorcontrast(yellow, #000, #fff);
}

最佳答案

您只需要循环计算列表中所有颜色的对比度。并选择与基色形成最佳对比的颜色。

@function brightness($color) {
  @return ((red($color) * .299) + (green($color) * .587) + (blue($color) * .114)) / 255 * 100%;
}

@function color-contrast($base-color, $colors...) { 
    // $colors... - means variadic arguments as Chris W says

    // Suppose that the best color is the first in the colors list
    $best-color: nth($colors, 1);
    $best-color-brightness: brightness($best-color);

    $base-color-brightness: brightness($base-color);

    @each $color in $colors {
      $color-brightness: brightness($color);

      // If the new color ($color) is more contrast than the previous one, 
      // remember it as the $best-color
      @if(abs($base-color-brightness - $color-brightness) > abs($base-color-brightness - $best-color-brightness)) {
        $best-color: $color;
        $best-color-brightness: $color-brightness;
      }
    }

    @return $best-color;
}

SassMeister demo .
Documentation对于 @each 指令。

关于css - 如何使 sass 颜色比较函数具有多个参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47423951/

相关文章:

javascript - Jquery拖放恢复到原始位置,双击div

asp.net - 单击 asp 按钮发送电子邮件后,我的表单移动到页面左侧。不应该发生

IE9 上的 CSS : divs inside td elements in a table will display vertically

CSS lint 抛出错误

vim - 为什么大多数 vim 配色方案在我使用时看起来不像屏幕截图那么漂亮?

javascript - 如何在聚焦时更改整个 div 的边框颜色?

Android:标题栏颜色不改变

Sass 映射和缩进语法

css - SASS 如何帮助我开发响应式网页设计?

css - 在最小宽度断点中嵌套方向断点