css – Sass:$color-darken with HSL color codes

我知道如何使用内置函数从十六进制代码中确定较暗的颜色.但是如何用hsl做到这一点?我有三种颜色,一种是主色,一种是深色,一种是浅色.我需要编写一个函数来计算它们之间的差异,并为它们获得更浅和更暗的阴影.因此,当我添加另一种颜色代码时,它会给出相同百分比的浅色和深色.

据我从Sass文档中了解到,我首先需要一个函数来获得基色的色调,饱和度和亮度,对吧?那么呢?

这些是我的十六进制颜色:

$base: #7760BF;
$base-darker: #483584;
$base-lighter: #b5a9dc;

在这里他们是hsl,以防万一:

$base: hsl(255,43%,56%);
$base-darker: hsl(254,36%);
$base-lighter: hsl(254,42%,76%);

有人可以帮我吗?

解决方法

在Sass中,类型会自动转换. Sass standard library的颜色功能可以接受任何颜色,rgb或hsl.

首先要产生更暗更浅的颜色,你可以使用变暗和变亮.我做了一个例子here.

然后要知道颜色之间的亮度差异以生成具有相同差异的新颜色,您可以使用亮度.

@function get-lightness-diff($base,$color) {
    @return lightness($base) - lightness($color);
}

@function get-variant($color,$diff) {
    @if ($diff < 0) {
        @return darken($color,-$diff);
    } @else {
        @return lighten($color,$diff);
    }
}

@function get-variants($color,$diff) {
    $ret: ();
    $ret: map-merge($ret,( darker: get-variant($color,-$diff) ));
    $ret: map-merge($ret,( lighter: get-variant($color,$diff) ));
    @return $ret;
}

@function get-variants-from-set($color,$darker,$base,$lighter) {
    $darker-diff: get-lightness-diff($base,$darker);
    $lighter-diff: get-lightness-diff($base,$lighter);

    $ret: ();
    $ret: map-merge($ret,$darker-diff) ));
    $ret: map-merge($ret,$lighter-diff) ));
    @return $ret;
}

$base: hsl(255,56%);
$base-lighter: hsl(255,66%);
$base-darker: hsl(255,46%);

// Get a lightness diff,from the light color for example
$diff: get-lightness-diff($base,$base-lighter);

// Variants: contains a map with 'darker' and 'lighter' colors.
$variants: get-variants($base,$diff);
// Or create your lighter/darker variants manually:
$darker: get-variant($base,-10%);
$lighter: get-variant($base,10%);

// Or all-in-one: create your variants from an other set of colors:
$other-base: hsl(255,33%,33%);
$other-variants: get-variants-from-set($other-base,$base-darker,$base-lighter);

我做了另一个例子here,但你可能需要调整它以使其适合你的需要.

编辑(17/07/17):自从我写这篇文章以来,我改进了可用于生成颜色变体的实用程序.您可以在以下位置查看示例:https://codepen.io/ncoden/pen/yXQqpz?editors=1100.

相关文章

Css3如何实现鼠标移上变长特效?(图文+视频)
css3怎么实现鼠标悬停图片时缓慢变大效果?(图文+视频)
jquery如何实现点击网页回到顶部效果?(图文+视频)
css3边框阴影效果怎么做?(图文+视频)
css怎么实现圆角边框和圆形效果?(图文+视频教程)
Css3如何实现旋转移动动画特效