css颜色变淡和变浅方法收集(模拟sass的darken和lighten函数)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <style>
        :root{
            --color: rgb(211,68,52);
        }
        .list{
            display: flex;
        }
        .list > div{
            width: 100px;
            height: 100px;
            margin-left: 20px;
            margin-top: 20px;
        }
        /* bg start */
        @keyframes lightenBgColor {
            from {
                background-color: var(--color)
            }
            to{
                background-color: #fff
            }
        }
        @keyframes darkenBgColor {
            from {
                background-color: var(--color)
            }
            to{
                background-color: #000
            }
        }
        /* bg end */
        /* property start */
        @keyframes lightenColor {
            from {
                --lightenColor: var(--color)
            }
            to{
                --lightenColor: #fff
            }
        }
        @keyframes darkenColor {
            from {
                --darkenColor: var(--color)
            }
            to{
                --darkenColor: #000
            }
        }
        @property --lightenColor {
            syntax: '<color>';
            inherits: false;
            initial-value: #fff;
        }
        @property --darkenColor {
            syntax: '<color>';
            inherits: false;
            initial-value: #000;
        }
        /*color-mix获取中间色*/
        .con1{
            --darken: color-mix(in srgb, var(--color), #000 20%);
            background-color: var(--darken);
        }
        .con2{
            --lighten: color-mix(in srgb, var(--color), #fff 20%);
            background-color: var(--lighten);
        }
        /*用黑透明或白透明遮罩蒙层获取中间色*/
        .con4{
            background: linear-gradient(rgba(255,255,255,.2) 0 0), linear-gradient(var(--color) 0 0);
        }
        .con3{
            background: linear-gradient(rgba(0,0,0,.2) 0 0), linear-gradient(var(--color) 0 0);
        }
        /*动画获取中间色*/
        .con5{
            animation: darkenBgColor .001s 0.2 linear forwards;
        }
        .con6{
            animation: lightenBgColor .001s 0.2 linear forwards;
        }
        /*@property颜色变量获取中间色,比直接使用属性更具通用性*/
        .con7{
            background-color: var(--darkenColor);
            animation: darkenColor .001s 0.2 linear forwards;
        }
        .con8{
            background-color: var(--lightenColor);
            animation: lightenColor .001s 0.2 linear forwards;
        }
        /*滤镜和透明度获取中间色*/
        .con9{
            background-color: var(--color);
            filter: brightness(.8);
        }
        .con10{
            background-color: var(--color);
            opacity: .8;
            /* filter: brightness(1.2) */ /* 效果不同 */
        }
    </style>
    <div class="list">
        <div class="con1"></div>
        <div class="con2"></div>
    </div>
    <div class="list">
        <div class="con3"></div>
        <div class="con4"></div>
    </div>
    <div class="list">
        <div class="con5"></div>
        <div class="con6"></div>
    </div>
    <div class="list">
        <div class="con7"></div>
        <div class="con8"></div>
    </div>
    <div class="list">
        <div class="con9"></div>
        <div class="con10"></div>
    </div>
</body>
</html>

颜色变浅和变淡的方法主要有,color-mix混合,多背景颜色重叠,动画渐变截断,亮度滤镜,透明度等。

动画获取中间色的原理,animation可以颜色动画,即从一种颜色变化到另一种颜色。动画播放次数可以是小数,比如0.2次。再给动画一个极小的播放时间,就可以在页面上直接显示出一个中间色。

 

 

出处:CSS 颜色混合的N种方式

posted @ 2023-06-27 09:57  全玉  阅读(1003)  评论(0编辑  收藏  举报