[点晴永久免费OA]现代 CSS 解决方案:文字颜色自动适配背景色!
当前位置:点晴教程→点晴OA办公管理信息系统
→『 经验分享&问题答疑 』
在 23 年的 CSS 新特性中,有一个非常重要的功能更新 -- 相对颜色。 简单而言,相对颜色的功能,让我们在 CSS 中,对颜色有了更为强大的掌控能力。 其核心功能就是,让我们能够基于一个现有颜色 A,通过一定的转换规则,快速生成我们想要的颜色 B。 其功能能够涵盖: 完整的教程,你可以看这里 -- Chrome for Developers- CSS 相对颜色语法 当然,今天我们不会一个一个去过这些功能,更多的时候,我们只需要知道我们能够实现这些功能。 本文,我们将从实际实用角度出发,基于实际的案例,看看 CSS 相对颜色,能够如何解决我们的一些实际问题。 快速语法入门首先,我们通过一张图,一个案例,快速入门 CSS 相对颜色语法: 相对颜色语法的目标是允许从另一种颜色派生颜色。 上图显示了将原始颜色 green 转换为新颜色的颜色空间后,该颜色会转换为以 r、g、b 和 alpha 变量表示的各个数字,这些数字随后会直接用作新的 rgb() 颜色的值。 举个例子: <p> CSS Relative Color </p> p { color: rgb(255, 0, 0);} 实现一个 color 为红色(rgb 值为 基于上面的相对颜色语法,我如何通过一个红色生成绿色文字呢?示意如下: p { --color: rgb(255, 0, 0); color: rgb(from var(--color) calc(r - 255) calc(g + 255) b); /* result = rgb(0, 255, 0) */ } 效果如下,我们就得到绿色字体: 解释一下:
通过这个 DEMO,我们把几个核心基础语法点学习一下:
第二个关键点,from 后面通常会接一个颜色值,这个颜色值可以是任意颜色表示法,或者是一个 CSS 变量,下面的写法都是合法的: p { color: rgba(from #ff0000) r g b); color: rgb(from rgb(255, 0, 0) r g b); color: rgb(from hsl(0deg, 100%, 50%) r g b); color: rgb(from var(--hotpink) r g b); }
另外一个非常重要的基础概念就是,我们可以对 就是我们上面的例子: p { --color: rgb(255, 0, 0); color: rgb(from var(--color) calc(r - 255) calc(g + 255) b); /* result = rgb(0, 255, 0) */ }
相对颜色的基础的使用规则就是这样,它不仅支持 使用 CSS 相对颜色,实现统一按钮点击背景切换通常页面上的按钮,都会有 hover/active 的颜色变化,以增强与用户的交互。 像是这样: 最常见的写法,就是我们需要在 Normal 状态、Hover 状态、Active 状态下写 3 种颜色: p { color: #ffcc00; transition: .3s all; } /* Hover 伪类下为 B 颜色 */ p:hover { color: #ffd21f; } /** Active 伪类下为 C 颜色 **/ p:active { color: #ab8a05; } 在之前,我们介绍过一种利用滤镜 在今天,我们也可以利用 CSS 相对颜色来做这个事情: p { color: #ffcc00; transition: .3s all; } /* Hover 伪类下为 B 颜色 */ p:hover { color: #ffd21f; } /** Active 伪类下为 C 颜色 **/ p:active { color: #ab8a05; } 我们通过
在实际业务中,这是一个非常有用的用法。 完整的 DEMO,你可以戳这里:CodePen Demo -- https://codepen.io/Chokcoco/pen/KKEdOeb 使用 CSS 相对颜色,实现文字颜色自适应背景相对颜色,还有一个非常有意思的场景 -- 让文字颜色能够自适应背景颜色进行展示。 有这么一种场景,有的时候,无法确定文案的背景颜色的最终表现值(因为背景颜色的值可能是后台配置,通过接口传给前端),但是,我们又需要能够让文字在任何背景颜色下都正常展现(譬如当底色为黑色时文字应该是白色,当背景为白色时,文字应该为黑色)。 像是这样: 在不确定背景颜色的情况下,无论什么情况,文字颜色都能够适配背景的颜色。 在之前,纯 CSS 没有特别好的方案,可以利用 div { // 不确定的背景色 } p { color: #fff; mix-blend-mode: difference; } 实操过这个方案的同学都会知道,在一定情况下,前景文字颜色还是会有一点瑕疵。并且,混合模式这个方案最大的问题是会影响清晰度。 有了 CSS 相对颜色后,我们有了更多的纯 CSS 方案。 利用 CSS 相对颜色,反转颜色我们可以利用相对颜色的能力,基于背景色颜色进行反转,赋值给 color。 一种方法是将颜色转换为 RGB,然后从 1 中减去每个通道的值。 代码非常简单: p { /** 任意背景色 **/ --bg: #ffcc00; background: var(--bg); color: rgb(from var(--bg) calc(1 - r) calc(1 - g) calc(1 - b)); /** 基于背景反转颜色 **/ }
效果如下: 配个动图,我们利用背景色的反色当 Color 颜色,适配所有背景情况: 完整的 DEMO 和代码,你可以戳这里:CodePen Demo -- CSS Relatvie Color Adapt BG 当然,这个方案还有两个问题:
为了解决这两个问题,CSS 颜色规范在 CSS Color Module Level 6 又推出了一个新的规范 -- color-contrast()。 利用 |
关键字查询
相关文章
正在查询... |