当前位置:首页 > 科技  > 软件

快速了解CSS 相对颜色

来源: 责编: 时间:2023-11-06 17:20:01 241观看
导读在正式开始介绍之前,可以先想一个问题:如何动态去改变一个颜色的透明度?比如一个颜色:root{ color: red}如何将它变成透明度为 50% 的红色呢?现在 Chrome 119 中,令人无比期待的 CSS 相对颜色终于正式支持了!有了它,可以很

Hw628资讯网——每日最新资讯28at.com

在正式开始介绍之前,可以先想一个问题:如何动态去改变一个颜色的透明度?Hw628资讯网——每日最新资讯28at.com

比如一个颜色Hw628资讯网——每日最新资讯28at.com

:root{  color: red}

如何将它变成透明度为 50% 的红色呢?Hw628资讯网——每日最新资讯28at.com

Hw628资讯网——每日最新资讯28at.com

Hw628资讯网——每日最新资讯28at.com

现在 Chrome 119 中,令人无比期待的 CSS 相对颜色终于正式支持了!有了它,可以很轻松地将一个颜色转换成任意你所需要的颜色,对设计师和前端都非常友好,一起了解一下吧Hw628资讯网——每日最新资讯28at.com

一、什么是 CSS 相对颜色

CSS 相对颜色(CSS relative color)是 CSS Color Level 5[1] 的新特性,它可以将一个颜色以某种颜色格式进行分解、重组,从而得到一个全新的颜色。Hw628资讯网——每日最新资讯28at.com

语法非常简单,以rgb为例。Hw628资讯网——每日最新资讯28at.com

color: rgb(from red r g b / alpha)

这个表示将颜色red以rgb模式,分解成r、g、b(alpha)几个单独的变量,非常类似 JS 中的结构赋值。Hw628资讯网——每日最新资讯28at.com

Hw628资讯网——每日最新资讯28at.com

也就是说,上面的写法最后等同于。Hw628资讯网——每日最新资讯28at.com

color: rgb(255 0 0 / 100%)

那么,这个有什么用呢?Hw628资讯网——每日最新资讯28at.com

其实经过上面的from关键词分解以后,得到的r、g、b、alpha都是独立的变量,我们可以将任意变量改写成所需要的,比如透明度为50%。Hw628资讯网——每日最新资讯28at.com

color: rgb(from red r g b / 50%) /* rgb(255 0 0 / 50%) */

注意,这里的颜色是完全动态的,我们还可以用 CSS 变量将任意颜色实时改变透明度。Hw628资讯网——每日最新资讯28at.com

--color: red;--color50: rgb(from var(--color) r g b / 50%)

下面是一个演示,可以实时将颜色的透明度变为50%。Hw628资讯网——每日最新资讯28at.com

Hw628资讯网——每日最新资讯28at.com

你也可以访问在线链接Hw628资讯网——每日最新资讯28at.com

  • CSS relative color (juejin.cn)[2]
  • CSS relative color (codepen.io)[3]

二、相对颜色实现的奥秘:calc

从上一节我们了解到,通过from关键词,可以将一个颜色分解成几个独立变量,比如r、g、b、alpha,但是,仅仅这样是不够的。Hw628资讯网——每日最新资讯28at.com

回到文章标题,为什么说是相对颜色呢?那肯定是和现在的颜色有些关联,要做到这一点,需要用到 CSS calc 函数。Hw628资讯网——每日最新资讯28at.com

举个例子,比如一个半透明的红色。Hw628资讯网——每日最新资讯28at.com

--color: rgba(255,0,0,.5)

如何在这个基础上继续降低20%的透明度呢?Hw628资讯网——每日最新资讯28at.com

很简单,将这个颜色分解后,直接用calc进行计算。Hw628资讯网——每日最新资讯28at.com

--color: rgba(255,0,0,.5)--color20: rgb(from var(--color) r g b / calc(alpha - .2)) /*rgba(255,0,0,.3)*/

这样,无论给定的颜色是什么透明度,都可以在这个基础之上降低20%,这就是「相对颜色」!Hw628资讯网——每日最新资讯28at.com

Hw628资讯网——每日最新资讯28at.com

下面介绍的几个例子都需要用到calc,接着往下看。Hw628资讯网——每日最新资讯28at.com

三、颜色的加深和减淡

颜色的加深和减淡其实是提升和降低颜色的亮度。Hw628资讯网——每日最新资讯28at.com

提到亮度,需要用到有表示亮度(light)的颜色空间,比如说绿色,用hls表示如下:Hw628资讯网——每日最新资讯28at.com

Hw628资讯网——每日最新资讯28at.com

如果需要将这个绿色加深,就是需要将亮度调暗一点,比如减少10%。Hw628资讯网——每日最新资讯28at.com

color: hsl(from green h s calc(l - .1 )); /*hsl(120deg 100% 15%)*/

如果需要将这个绿色减淡,其实就是需要将亮度调高一点。Hw628资讯网——每日最新资讯28at.com

color: hsl(from green h s calc(l + .1 )); /*hsl(120deg 100% 35%)*/

下面是实际效果(中间是原色,两边分别是减淡和加深的效果)。Hw628资讯网——每日最新资讯28at.com

Hw628资讯网——每日最新资讯28at.com

四、让颜色更加鲜艳

和上面的例子一样,还可以通过改变颜色的饱和度,让颜色更加鲜艳。Hw628资讯网——每日最新资讯28at.com

当然,这里就不能用上面的绿色了,因为它的饱和度已经是100了,我们换一个比较温和的绿色。Hw628资讯网——每日最新资讯28at.com

color: hsl(122.42deg 39.44% 49.22%);

Hw628资讯网——每日最新资讯28at.com

如果需要将这个绿色更加鲜艳一点,就是需要将饱和度提高一点,比如增加30%。Hw628资讯网——每日最新资讯28at.com

color: hsl(from var(--color) h calc(s + .3) l); /*hsl(122.42deg 69.44% 49.22%)*/

如果需要将这个绿色看起来暗淡无光,直到成灰色,其实就是需要需要将饱和度减少一点。Hw628资讯网——每日最新资讯28at.com

color: hsl(from var(--color) h calc(s - .3) l); /*hsl(122.42deg 9.44% 49.22%)*/

下面是实际效果(中间是原色,两边分别饱和度降低和增强的效果)。Hw628资讯网——每日最新资讯28at.com

Hw628资讯网——每日最新资讯28at.com

五、生成邻近色或者互补色

在 CSS 滤镜中有一个色相旋转滤镜,可以很轻松的改变任意元素的色相。Hw628资讯网——每日最新资讯28at.com

filter: hug-rotate(30deg)

不过这种滤镜是整体改变,无法只改变某个颜色。Hw628资讯网——每日最新资讯28at.com

现在用 CSS 相对颜色就很好实现了,比如下面是红色在经过一系列色相变化后的效果。Hw628资讯网——每日最新资讯28at.com

--color: red;--color1: hsl(from var(--color) calc(h + 30 ) s l);--color2: hsl(from var(--color) calc(h + 30 ) s l);--color3: hsl(from var(--color) calc(h + 60 ) s l);...

效果如下:Hw628资讯网——每日最新资讯28at.com

Hw628资讯网——每日最新资讯28at.com

这里每个颜色色相相差 30度, 相差180度的就是光学互补色,比如红色和青色(浅绿色)就是互补色。Hw628资讯网——每日最新资讯28at.com

六、颜色的反向

所谓反向,就是黑的变白,白的变黑,蓝的变黄,绿的变紫色,这个在滤镜中也有现成的。Hw628资讯网——每日最新资讯28at.com

filter: invert(1)

那么,相对颜色中如何计算呢?Hw628资讯网——每日最新资讯28at.com

其实这个是 rgb的计算方式,只需要将每个通道的颜色值反过来就行了,就像这样。Hw628资讯网——每日最新资讯28at.com

color: rgb(from yellow calc(1 - r) calc(1 - g) calc(1 - b));

注意,这里的值都是归一化处理的,1 表示 255。Hw628资讯网——每日最新资讯28at.com

效果如下,左边是原色,右边是反色。Hw628资讯网——每日最新资讯28at.com

Hw628资讯网——每日最新资讯28at.com

以上所有演示可以访问以下链接Hw628资讯网——每日最新资讯28at.com

  • CSS relative colors demo (juejin.cn)[4]
  • CSS relative colors demo (codepen.io)[5]

七、最后总结一下

CSS 相对颜色可以说是关于 CSS 颜色处理最为强大的新特性了,几乎可以满足在 CSS 中一切关于颜色的计算,再也无需 JS参与计算了,下面总结一下要点。Hw628资讯网——每日最新资讯28at.com

  • 在以往,CSS 中很难对一个颜色进行转换,只能通过滤镜或者其他偏方去处理。
  • 现在出来了 CSS 相对颜色,可以将颜色按照颜色空间分解成单独的值,类似于 JS 中的解构赋值。
  • 并且这些值可以随意配合 calc 计算,在现有基础上增加或者减少,因此叫做相对颜色。
  • CSS 相对颜色可以实现颜色的加深和减淡、饱和度变化、色相变化,还有反色等需求。

当然相对颜色的应用远远不止以上几点,可以说能够想到的场景都可以用这种方式来解决,将来,这一特性在全局主题应用中尤为重要,一起期待一下吧。Hw628资讯网——每日最新资讯28at.com

[1]CSS Color Level 5: https://www.w3.org/TR/css-color-5/#relative-colors。Hw628资讯网——每日最新资讯28at.com

[2]CSS relative color (juejin.cn): https://code.juejin.cn/pen/7297274766421917747。Hw628资讯网——每日最新资讯28at.com

[3]CSS relative color (codepen.io): https://code.juejin.cn/pen/7297274766421917747。Hw628资讯网——每日最新资讯28at.com

[4]CSS relative colors demo (juejin.cn): https://code.juejin.cn/pen/7297507402143203337。Hw628资讯网——每日最新资讯28at.com

[5]CSS relative colors demo (codepen.io): https://code.juejin.cn/pen/7297507402143203337。Hw628资讯网——每日最新资讯28at.com

本文链接://www.dmpip.com//www.dmpip.com/showinfo-26-17286-0.html快速了解CSS 相对颜色

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 优雅处理Java字符串:提升编程效率的技巧与实践

下一篇: 聊聊Golang饱受争议的Error

标签:
  • 热门焦点
  • 28个SpringBoot项目中常用注解,日常开发、求职面试不再懵圈

    28个SpringBoot项目中常用注解,日常开发、求职面试不再懵圈

    前言在使用SpringBoot开发中或者在求职面试中都会使用到很多注解或者问到注解相关的知识。本文主要对一些常用的注解进行了总结,同时也会举出具体例子,供大家学习和参考。注解
  • K6:面向开发人员的现代负载测试工具

    K6:面向开发人员的现代负载测试工具

    K6 是一个开源负载测试工具,可以轻松编写、运行和分析性能测试。它建立在 Go 和 JavaScript 之上,它被设计为功能强大、可扩展且易于使用。k6 可用于测试各种应用程序,包括 Web
  • 十个可以手动编写的 JavaScript 数组 API

    十个可以手动编写的 JavaScript 数组 API

    JavaScript 中有很多API,使用得当,会很方便,省力不少。 你知道它的原理吗? 今天这篇文章,我们将对它们进行一次小总结。现在开始吧。1.forEach()forEach()用于遍历数组接收一参
  • 2023 年的 Node.js 生态系统

    2023 年的 Node.js 生态系统

    随着技术的不断演进和创新,Node.js 在 2023 年达到了一个新的高度。Node.js 拥有一个庞大的生态系统,可以帮助开发人员更快地实现复杂的应用。本文就来看看 Node.js 最新的生
  • K8S | Service服务发现

    K8S | Service服务发现

    一、背景在微服务架构中,这里以开发环境「Dev」为基础来描述,在K8S集群中通常会开放:路由网关、注册中心、配置中心等相关服务,可以被集群外部访问;图片对于测试「Tes」环境或者
  • Python异步IO编程的进程/线程通信实现

    Python异步IO编程的进程/线程通信实现

    这篇文章再讲3种方式,同时讲4中进程间通信的方式一、 Python 中线程间通信的实现方式共享变量共享变量是多个线程可以共同访问的变量。在Python中,可以使用threading模块中的L
  • 零售大模型“干中学”,攀爬数字化珠峰

    零售大模型“干中学”,攀爬数字化珠峰

    文/侯煜编辑/cc来源/华尔街科技眼对于绝大多数登山爱好者而言,攀爬珠穆朗玛峰可谓终极目标。攀登珠峰的商业路线有两条,一是尼泊尔境内的南坡路线,一是中国境内的北坡路线。相
  • 重估百度丨“晚熟”的百度云,能等到春天吗?

    重估百度丨“晚熟”的百度云,能等到春天吗?

    ©自象限原创作者|程心排版|王喻可2016年7月13日,百度云计算战略发布会在北京举行,宣告着百度智能云的正式启程。彼时的会场座无虚席,甚至排队排到了门外,在场的所有人几乎都
  • 腾讯VS网易,最卷游戏暑期档,谁能笑到最后?

    腾讯VS网易,最卷游戏暑期档,谁能笑到最后?

    作者:无锈钵来源:财经无忌7月16日晚,上海1862时尚艺术中心。伴随着幻象的精准命中,硕大的荧幕之上,比分被定格在了14:12,被寄予厚望的EDG战队以绝对的优势战胜了BLG战队,拿下了总决
Top
Baidu
map