普通视图

发现新文章,点击刷新页面。
今天 — 2025年11月4日技术

别再社死了!`includeIf` 一招搞定 Git 提交者信息错乱,守护你的邮箱隐私

作者 Legend80s
2025年11月4日 17:14
在公司项目和自己开源项目之间切换容易提交错误的提交者信息,比如在 github 项目用公司邮箱和账号 push 了代码,导致泄露隐私。本文将介绍一个非常优雅的方案的实现 git 公司账号和个人账号的自

项目中使用el-table实现行合并及合并后序号不连续解决方案

前言 el-table作为前端开发中最常用的数据表格组件,行合并需求在实际项目中频繁出现,但官方文档介绍较为简略。本文结合开发中的实际需求,提供了一种简单、易用的el-table实现行合并的参考方案。

「项目前言」从配置程序员到动手造轮子:我用Vue3+NestJS复刻低代码平台的初衷

2025年11月4日 15:50
大家好,我是 elk,好久不见!距离上一篇文章发布已经过去 4 个月,这段时间因为频繁出差,学习与输出的节奏被打乱了不少,也逐渐松懈了下来。直到最近,才重新找回写东西的动力。 这次想开启一个全新的文章

探索现代 CSS 色彩:从 HSL 到 OKLCH,打造动态色阶

作者 小杨梅君
2025年11月4日 15:22

探索现代 CSS 色彩:从 HSL 到 OKLCH,打造动态色阶

在前端开发中,颜色是构建视觉体验的基石。我们早已习惯了 #RRGGBBrgb(),但为了更直观地调色和实现动态主题,CSS 引入了更强大的颜色模型。本文将带你深入了解 HSL、LCH、OKLCH,以及革命性的 from 语法,并通过一个动态色阶块的实战案例,展示它们如何让我们的工作更高效、更富创造力。

1. HSL:人类友好的调色起点

HSL(Hue, Saturation, Lightness)即色相、饱和度、亮度,它将颜色用更符合人类直觉的方式描述。

  • H (色相)0-360,构成一个色环,红(0)、绿(120)、蓝(240)。
  • S (饱和度)0%-100%,从灰色到纯色。
  • L (亮度)0%-100%,从黑到白。

用法示例

/* 一个鲜艳的蓝色 */
color: hsl(240, 100%, 50%);
/* 一个柔和的灰色 */
background-color: hsl(0, 0%, 80%);

适配性

极佳。所有现代浏览器甚至 IE9+ 都支持,是兼容性项目的首选。

优缺点

  • 优点:调色直观,易于理解和修改。
  • 缺点感知不均匀。相同亮度(L)下,不同色相的颜色看起来明暗差异很大,导致渐变不平滑,系统化配色困难。(ps:说人话就是同一亮度下不同颜色看起来亮度不一样,有的扎眼有的又显得很暗,看起来不和谐)

2. LCH:追求感知均匀的色彩空间

为了解决 HSL 的感知不均问题,LCH(Lightness, Chroma, Hue)应运而生。它基于 CIE LAB 色彩空间,旨在让颜色的数值变化与视觉感知保持一致。

  • L (亮度)0%-100%,感知上的绝对黑到绝对白。
  • C (色度)0 以上,代表颜色的鲜艳程度,数值越大越鲜艳。
  • H (色相)0-360,与 HSL 类似。

用法示例

/* 创建一组亮度相同、色相变化的平滑渐变 */
background: linear-gradient(to right, lch(70% 40 0), lch(70% 40 120), lch(70% 40 240));

适配性

🟡 良好。Chrome 111+, Firefox 113+, Safari 15+ 支持。不兼容 IE。

优缺点

  • 优点:感知均匀,亮度变化符合视觉预期,非常适合制作平滑渐变和设计系统。
  • 缺点:旧版浏览器不支持,参数含义对新手稍显复杂。

3. OKLCH:未来的色彩标准

OKLCH 是 LCH 的改良版,它提供了更佳的亮度感知均匀性,并原生支持 Display-P3 等广色域,是当前最先进的颜色模型。

  • L (感知亮度)0-10%-100%,感知均匀性最佳。
  • C (色度)0 以上,最大值取决于 L 和 H,通常 0.4 已非常鲜艳。
  • H (色相)0-360,色相感知极其稳定。

用法示例

/* 定义一组主色调,明暗变化非常自然 */
:root {
  --primary: oklch(0.7 0.25 250);
  --primary-hover: oklch(0.8 0.25 250);
}

适配性

🟡 良好。Chrome 111+, Firefox 113+, Safari 15.4+ 支持。不兼容 IE。

优缺点

  • 优点最佳感知均匀性,色相稳定,支持广色域,是构建高端设计系统的理想选择。
  • 缺点:旧版浏览器不支持。

4. rgb(from ...):革命性的相对颜色语法

CSS Color Module Level 4 带来了最激动人心的特性之一:相对颜色语法。它允许你从一个现有颜色中提取通道值,并在此基础上进行重新计算。 rgb(from #color r g b / alpha) 的含义是:

  • from #color:指定一个基础颜色。
  • r, g, b:分别代表红、绿、蓝通道,你可以使用 calc() 对它们进行计算。
  • / alpha:可选,用于设置透明度。 此语法同样适用于 hsl(from ...)lch(from ...)oklch(from ...)

适配性

🟡 良好rgb(from ...) 支持更早(Chrome 65+),但 hsl/lch/oklch(from ...) 需要较新版本浏览器。IE 和旧版浏览器完全不支持。

5. 实战案例:用 OKLCH 打造动态色阶块

现在,让我们结合 Vue 和你提供的案例,看看如何用现代 CSS 优雅地实现一个动态色阶。

需求分析

我们有一组色块,它们的颜色基于一个基础色 --content-bg-color,并且每个色块的色相(Hue)依次递增,形成一个和谐的色阶。

传统方案的痛点

在过去,你可能需要:

  1. 在 JS 中预先计算好 10 个颜色值。
  2. 使用 Sass/Less 循环生成 10 个静态类。
  3. 无法响应式地根据基础色变化。 这些方法要么缺乏动态性,要么代码冗余。

现代解决方案:oklch(from ...) + calc()

这是最简洁、最强大的实现方式。

第 1 步:定义基础色

在你的 CSS 中定义一个基础颜色,它可以随时被修改。

:root {
  --content-bg-color: #229100; /* 一个基础色 */
}
第 2 步:在 Vue 模板中使用相对颜色语法
<template>
  <div class="container">
    <div
      class="content-bg"
      v-for="i in 10"
      :key="i"
      :style="{
        backgroundColor: `oklch(from var(--content-bg-color) l c calc(h + ${(i - 1) * 35}) / 0.6)`,
        left: `${(i - 1) * 10}%`
      }"
    ></div>
  </div>
</template>
<style>
.container {
  position: relative;
  height: 100px;
}
.content-bg {
  position: absolute;
  width: 10%;
  height: 100%;
  box-shadow: 10px 0px 8px rgba(0, 0, 0, 0.2);
}
</style>

效果如下: image.png

代码解析
  • oklch(from var(--content-bg-color) ...): 这告诉浏览器,我们接下来的颜色计算都基于 --content-bg-color
  • l c: 我们保持基础色的亮度和色度不变。
  • calc(h + ${(i - 1) * 35}): 这是核心!我们提取了基础色的色相 h,并为每个色块动态增加 35 度。
  • 自动环绕:当 h + 35 的结果超过 360 时,浏览器会自动将其环绕回有效范围(例如,350 + 35 = 385 会被视为 25)。你无需手动处理 mod() 运算!

效果

你将得到一组从基础色开始,色相平滑过渡的色阶块。最棒的是,你只需修改 --content-bg-color 这一个变量,整个色阶就会自动更新为新的配色方案! 这极大地提升了主题切换和动态配色的效率。

6. 总结与选择指南

颜色函数/语法 核心优势 适配性 推荐场景
HSL 兼容性高,直观 ✅ 极佳 兼容性要求高的项目,简单调色
LCH 感知均匀,渐变平滑 🟡 良好 现代浏览器,设计系统,平滑渐变
OKLCH 最佳感知均匀,支持广色域 🟡 良好 现代项目首选,高端设计系统
from 语法 动态计算,主题化神器 🟡 良好 动态主题,智能交互,颜色变换

最终建议

  • 新项目毫不犹豫地使用 OKLCH,并配合 from 语法构建你的颜色系统。它带来的开发体验和视觉效果是革命性的。
  • 维护旧项目:可以继续使用 HSL 保证兼容,但在新功能中逐步引入 LCH 或 OKLCH,并利用 @supports 进行优雅降级。
  • 动态主题from 语法是你的不二之选,它将颜色从“静态常量”变成了“动态变量”,开启了无限可能。 拥抱现代 CSS 色彩,让你的设计既美观又智能!

CSS 滤镜(filter)

作者 JunpengHu
2025年11月4日 14:59

CSS 滤镜(filter)是 CSS3 推出的一组“即时图形后期”工具。
它不需要 Photoshop,也不需要 Canvas,只要一行声明就能把亮度、对比度、模糊、色相偏移等视觉效果实时渲染到任何元素上——图片、文字、视频、背景图,甚至整个模块都可以一次性处理。
下面带你从零开始认识这套“前端版美图秀秀”。


一、最简记忆:滤镜 = 函数链

filter: <函数-1>(参数) <函数-2>(参数) … ;
  • 顺序从左到右依次执行,类似管道符。
  • 每个函数都有明确区间,超出即 clamp(被裁剪)。
  • 可以写任意多个,空格分隔;也可以只写一个。

二、10 个原生函数速查表

函数 作用 默认值 常见玩法
blur(px) 高斯模糊 0 毛玻璃背景、loading 遮罩
brightness(number) 线性亮度 1 0.6 夜间模式,1.4 高光
contrast(number) 对比度 1 1.5 让黑白更分明
grayscale(number) 去色 0 1 彻底灰度,0.5 淡彩
sepia(number) 复古棕褐 0 1 老照片,0.3 暖色打底
saturate(number) 饱和度 1 0 灰度,2 鲜艳
hue-rotate(deg) 色相旋转 0deg 180deg 反色,90deg 换季节
invert(number) 负片 0 1 完全反色,0.9 暗黑模式
opacity(number) 透明度 1 与 CSS opacity 差异见注①
drop-shadow() 真实投影 支持半透明 PNG 的“镂空”阴影

注①:filter:opacity()创建独立层叠上下文,而 opacity 属性不会;前者还能被硬件加速。


三、组合实战 4 例

  1. 一键暗黑
.dark {
  filter: invert(1) hue-rotate(180deg) brightness(1.1);
}

原理:先反色,再把色相转半圈,最后略提亮,文字与图片一起“变黑”。

  1. 毛玻璃遮罩
.mask {
  backdrop-filter: blur(10px) saturate(1.2);
  background: rgba(255,255,255,0.4);
}

backdrop-filter 只模糊背后内容,自身背景保持半透明,iOS 风导航栏标配。

  1. 图片 hover 高亮
img {
  transition: filter .3s;
}
img:hover {
  filter: brightness(1.15) saturate(1.25);
}

鼠标移入瞬间“亮 + 艳”,移出平滑回落。

  1. 文字故障风
.glitch {
  filter: contrast(2) hue-rotate(90deg);
  text-shadow: 2px 0 #0ff, -2px 0 #f0f;
}

高对比 + 色相偏移 + 双色阴影,赛博朋克感拉满。


四、性能与兼容

  1. 硬件加速:现代浏览器会把 filter 丢给 GPU,通常比 Canvas 快,但:

    • 同时挂 5+ 个滤镜、大面积模糊(>30 px)或 4K 视频仍可能掉帧。
    • 移动端尽量 will-change:filter 提前声明,动画结束及时清除。
  2. 兼容性(2025 年 5 月):

    • 桌面:Chrome 53+、Edge 79+、Firefox 55+、Safari 14+ 全支持。
    • 移动端:iOS Safari 14+、Android Chrome 90+ 全覆盖。
    • 唯一老梗:IE 全系不支持,可优雅降级(无滤镜即原图)。
  3. 前缀:如今无需 -webkit-,但老设备(Android 7)仍建议:

-webkit-filter: blur(5px);
filter: blur(5px);

五、常见坑点

  • filter 会让元素生成包含块(contain: paint),内部 position:fixed 会“降级”为相对于该元素。
  • drop-shadowbox-shadow 差异:前者沿不透明像素边缘生成,适合 PNG 图标;后者永远矩形。
  • 滤镜不能作用于:
    – 父元素对子元素的背景穿透(background-filter 才行)
    – 部分表单控件(如 <video> 的 controls 条,需关闭原生控件再自定义)

六、一句话总结

CSS filter 把“后期调色”从设计软件搬到了浏览器,一行代码即可让网页拥有场景化氛围
白天/黑夜、节日换肤、图片灰度、视频负片、毛玻璃导航……
掌握这 10 个函数,你就拥有了不刷新页面、不增加图片体积的即时视觉魔法。

❌
❌