CSS中使用 HSL(Hue, Saturation, Lightness) 动态生成色值

前言

HSL(Hue, Saturation, Lightness)是一种直观的颜色表示方法,比传统的RGB模式更符合人类对颜色的感知方式。下面我将详细介绍HSL颜色模式,并提供实际应用案例。

1、HSL颜色模式详解

1.1、 HSL的三个分量

1.1.1、色相(Hue):表示颜色的基本属性,取值范围0-360度

:红色
120° :绿色
240° :蓝色
360°:回到红色

1.1.2、饱和度(Saturation):表示颜色的纯度,取值范围0%-100%

0% :完全灰色(无色彩)
100%:完全饱和(颜色最鲜艳)

1.1.3、亮度(Lightness):表示颜色的明暗程度,取值范围0%-100%

0% :黑色
50% :纯色
100%:白色

2. HSL与RGB的比较

3、案例

由 红色 到绿色 分为100份,根据数据的大小进行色值改变

例如:

红色为:hsla(355, 65%, 46%, 1)

绿色为:hsla(148, 100%, 38%, 1)

javascript 复制代码
<template #stationNum-slot="{row}">
    <div class="my-cell-span" :style="{backgroundColor: `hsl(${(120 - row.stationNum * 1.2)}, ${(100 - (100 - 65) / 99) * row.stationNum}%, ${46 - ((46 - 38 ) / 99 ) * row.stationNum}%)`}">
        {{ row.stationNum }}
    </div>
</template>

// 色相(Hue):(120 - row.stationNum * 1.2),因为红色 0°:红色,120°:绿色; 或者 ${148 + ((355 - 148) / 99) * row.stationNum }
// 饱和度(Saturation): ${(100 - (100 - 65) / 99) * row.stationNum}%, 根据基础色的饱和度进行等份换算
// 亮度(Lightness): ${46 - ((46 - 38 ) / 99 ) * row.stationNum}%
...


const handleReload = () => {
let data = []
for(let i=1;i<101;i++){
    data.push({
        regionName: i,
        stationNum: Math.round((Math.random() * 100) + 1) 
    })
}
tabledata.value = data.sort((a, b) => b.stationNum - a.stationNum)
}

效果图片:这种色值过渡效果明显要比使用RGBA 展示的效果让人看着更舒服

4、HSL的优势和使用场景

4.1、优势

直观性 :HSL比RGB更符合人类对颜色的感知方式
易于调整 :只需调整一个分量即可改变颜色特性
创建和谐配色:通过固定色相,调整饱和度和亮度可以轻松创建和谐的颜色方案

4.2、使用场景

主题颜色系统 :使用HSL可以轻松创建主色、辅助色和强调色
颜色渐变 :通过调整色相创建平滑的颜色过渡
响应式颜色 :根据主题或状态调整颜色亮度和饱和度
可访问性:通过调整亮度对比度确保内容可读性

总结

HSL颜色模式提供了一种直观的方式来处理颜色,特别适合需要动态生成颜色或创建和谐配色方案的场景。通过固定色相并调整饱和度和亮度,可以轻松创建出一系列协调的颜色,非常适合设计系统和主题开发。

相关推荐
IT_陈寒3 分钟前
Vue这个特性差点让我加班到凌晨,谁懂啊
前端·人工智能·后端
kyriewen7 分钟前
我让AI改一个bug——它偷偷动了5个我没让它碰的地方
前端·javascript·ai编程
小白巨白23 分钟前
玫瑰花园管理系统:AI识病+3D可视化,一套面向中小型玫瑰种植园的数字化管理工具
css·人工智能·计算机视觉·html5
遇乐的果园37 分钟前
前端学习笔记-vue加载渲染优化
前端·笔记·学习
用户985033593281 小时前
OpenLayers 热力图从原理到 Vue 组件一键接入
前端
颜酱1 小时前
01 | 骨架搭建:FastAPI + Vue 跑通第一个 SSE 流式问答
前端·人工智能·后端
hoLzwEge1 小时前
解码 IDE 智能提示:jsconfig.json 辅助开发全攻略
前端·前端框架
leoZ2312 小时前
记忆系统与 Agent 定制完全指南(四):自定义 Agent 开发(一)
前端·chrome
慧一居士2 小时前
Element Plus 按需引入的配置使用说明和完整示例
前端·vue.js
程序员黑豆2 小时前
鸿蒙应用开发实战:从零学会自定义组件
前端·华为·harmonyos