iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >使用CSS怎么实现前景背景自动配色
  • 692
分享到

使用CSS怎么实现前景背景自动配色

2023-06-08 08:06:02 692人浏览 八月长安
摘要

本篇文章给大家分享的是有关使用CSS怎么实现前景背景自动配色,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、颜色匹配效果预览如下GIF示意,当我们按钮背景色逐渐变淡的时候,文

本篇文章给大家分享的是有关使用CSS怎么实现前景背景自动配色,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

一、颜色匹配效果预览

如下GIF示意,当我们按钮背景色逐渐变淡的时候,文字颜色也从原来的白色变成黑色了,同时边框也显示出来了,其中的配色转换是纯CSS实现的。

使用CSS怎么实现前景背景自动配色

您可以狠狠地点击这里: 按钮文字及边框颜色随着背景色自动变化demo

拖动R,G,B对应滑块,可以看到按钮文字颜色以及边框颜色,会自动根据背景色不同而发生变化。具体表现为:

  • 深色背景下,文字白色,无边框。

  • 浅色背景下,文字黑色,有加深边框,便于和周围环境区分开。

这种智能匹配是纯CSS实现的,主要是使用css3 calc()计算,以及CSS3原生var变量。

二、配色代码展示

html代码很简单,如下:

<button class="btn">我是按钮</button>

重点和难点在CSS部分:

:root {    --red: 44;  --green: 135;  --blue: 255;    --threshold: 0.5;    --border-threshold: 0.8;}.btn {    background: rgb(var(--red), var(--green), var(--blue));    --r: calc(var(--red) * 0.2126);  --g: calc(var(--green) * 0.7152);  --b: calc(var(--blue) * 0.0722);  --sum: calc(var(--r) + var(--g) + var(--b));  --lightness: calc(var(--sum) / 255);      color: hsl(0, 0%, calc((var(--lightness) - var(--threshold)) * -999999%));     --border-alpha: calc((var(--lightness) - var(--border-threshold)) * 100);    border: .2em solid;  border-color: rgba(calc(var(--red) - 50), calc(var(--green) - 50), calc(var(--blue) - 50), var(--border-alpha));}

乍一看,犹如鸭子听雷&mdash;&mdash;不知所云,其实不复杂,且容我剖析下实现原理。

三、前景背景自动配色原理

1. CSS属性值范围溢出边界渲染特性

CSS这门语言有个很有意思的特性,就是CSS属性值超过正常的范围的时候,只要格式正确,也会渲染,而渲染的值就是合法边界值。

举两个板栗:

opacity 透明度属性值合法范围是0-1,但是,你设置负数,或者极大值,浏览器也能解析,只是要么是0,要么是1而已,如下:

.example {  opacity: -2;      opacity: -1;      opacity: 2;       opacity: 100;   }

色值,如HSL,S和L的范围都是0%-100%,但是,你设置负数,或者极大值,浏览器也能解析,只是要么是0%,要么是100%而已,如下:

.example {  color: hsl(0, 0%, -100%);      color: hsl(0, 0%, 200%);     }

本文的配色技术就活用了这种边界渲染特性。

2. var变量传递给calc实现复杂计算

我们对CSS代码从上往下逐个剖析下。

首先,在:root根选择器上定义几个全局CSS变量(语义上的全局):

:root {  --red: 44;  --green: 135;  --blue: 255;  --threshold: 0.5;  --border-threshold: 0.8;}

其中:

&ndash;threshold
这个是color变色的临界值,用来和当前RGB颜色值的亮度对比。
&ndash;border-threshold
这个是边框颜色透明度的临界值,同样也是和当前RGB颜色值的亮度对比。
然后是 .btn{} 内部的CSS代码:

background: rgb(var(--red), var(--green), var(--blue));

这个很好理解,就是基本的RGB色值作为背景色。

--r: calc(var(--red) * 0.2126);--g: calc(var(--green) * 0.7152);--b: calc(var(--blue) * 0.0722);--sum: calc(var(--r) + var(--g) + var(--b));--lightness: calc(var(--sum) / 255);

这里5行5个CSS变量,需要的其实是最后一个 --lightness ,就是计算当前背景色的亮度。用的是使用sRGB Luma灰度算法 ① ,为什么需要5行呢?因为计算公式就是如此:

lightness = (red * 0.2126 + green * 0.7152 + blue * 0.0722) / 255

其中,R,G,B色值相乘的系数就是固定的,不同灰度算法系数还不一样。 --lightness 表示亮度,范围是0-1,此时就可以和 --threshold 和 --border-threshold 这两个临界值比对,来确定按钮的文字颜色,边框透明度。

① 这里的灰度可以看成是亮度,实际上HSL的亮度计算方法应该是,R,G,B中的色值最大值和最小值之和的二分之一。

color: hsl(0, 0%, calc((var(--lightness) - var(--threshold)) * -999999%))

设置颜色的CSS代码。

此处 calc 计算翻译成中文就是:(亮度值 &ndash; 临界值) * 比例系数。

其中亮度值在0-1之间游走,临界值是固定的0.5,于是:

如果亮度值小于0.5,亮度值减去临界值为负,由于我们的比例系数是很大很大的负数,负负得正,于是,会得到一个巨大的正数,按照边界渲染原理,会按照100%渲染,于是颜色是白色;
如果亮度值大于0.5,亮度值减去临界值为正,由于我们的比例系数是很大很大的负数,于是,会得到一个巨大的负数,按照边界渲染原理,会按照0%渲染,于是颜色是黑色;
以上就是按钮文字颜色变色背景下黑色,深色背景下白色的原理。

--border-alpha: calc((var(--lightness) - var(--border-threshold)) * 100);

边框透明度是类似的原理。此处 calc 计算翻译成中文就是:(亮度值 &ndash; 边框临界值) * 100。

其中亮度值在0-1之间游走,边框临界值是固定的0.8,于是:

如果亮度值小于0.8,亮度值减去边框临界值为负,在CSS中,负数透明度会按照边界0渲染,此时边框完全透明;

如果亮度值大于0.8,亮度值减去边框临界值为正,此时的透明度计算值会在0~20之间游走,当然,数值大于1的透明度值都会按照1渲染,此时,边框基本处于完全不透明状态,加深的边框显现;

border: .2em solid;border-color: rgba(calc(var(--red) - 50), calc(var(--green) - 50), calc(var(--blue) - 50), var(--border-alpha));

设置边框样式,边框颜色比背景色深50个单位值(负数为按照0渲染),然后透明度就是基于亮度动态计算的。深色背景下,按钮边框透明度为0,不显示;浅色背景下,透明度在0~1之间游走,出现,北京颜色越浅,边框透明度越大,边框颜色越深,符合配色预期。

相信经过上面的一番剖析,大家就会明白其实现的原理了。

改变按钮的背景色

.btn类名下的CSS代码是固定的,让我们需要改变按钮的颜色的时候,不是改.btn下的CSS,而是修改:root中的下面3个变量值:

--red: 44;--green: 135;--blue: 255;

以上就是使用CSS怎么实现前景背景自动配色,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网精选频道。

--结束END--

本文标题: 使用CSS怎么实现前景背景自动配色

本文链接: https://www.lsjlt.com/news/252689.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用CSS怎么实现前景背景自动配色
    本篇文章给大家分享的是有关使用CSS怎么实现前景背景自动配色,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、颜色匹配效果预览如下GIF示意,当我们按钮背景色逐渐变淡的时候,文...
    99+
    2023-06-08
  • CSS前景背景自动配色的方法
    本篇内容主要讲解“CSS前景背景自动配色的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“CSS前景背景自动配色的方法”吧!   一、颜色匹配效果预览  ...
    99+
    2024-04-02
  • css怎么去掉背景色
    这篇文章将为大家详细讲解有关css怎么去掉背景色,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。什么是csscss是一种用来表现HTML或XML等文件样式的计算机语言,主要是用来设计网页的样式,使网页更加美...
    99+
    2023-06-14
  • css怎么设置背景图片和背景颜色
    这篇文章主要讲解了“css怎么设置背景图片和背景颜色”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“css怎么设置背景图片和背景颜色”吧!一、设置背景颜色:b...
    99+
    2024-04-02
  • css中如何实现背景色渐变动画
    这篇文章主要为大家展示了“css中如何实现背景色渐变动画”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“css中如何实现背景色渐变动画”这篇文章吧。通过本文,你能...
    99+
    2024-04-02
  • 怎么用css设置背景颜色
    本篇内容主要讲解“怎么用css设置背景颜色”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用css设置背景颜色”吧!我们先来看一个小例子吧,了解一下什么是背景...
    99+
    2024-04-02
  • css怎么实现背景颜色渐变效果
    本文小编为大家详细介绍“css怎么实现背景颜色渐变效果”,内容详细,步骤清晰,细节处理妥当,希望这篇“css怎么实现背景颜色渐变效果”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。首先,在页面中创建一个div标签;...
    99+
    2023-07-04
  • css好看的渐变色背景怎么实现
    要实现CSS中的渐变色背景,可以使用CSS的linear-gradient()函数。linear-gradient()函数可以在指定...
    99+
    2023-08-08
    css
  • css怎么将背景设为黑色
    本篇内容介绍了“css怎么将背景设为黑色”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 网页后盾配置为...
    99+
    2024-04-02
  • css该怎么去掉背景颜色
    这篇文章主要介绍css该怎么去掉背景颜色,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!css去掉背景颜色的方法是,给背景颜色添加background-color属性,并且将属性值设置为transparent即可,例如...
    99+
    2023-06-15
  • CSS中怎么实现多重背景动画
    CSS中怎么实现多重背景动画,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。CSS代码给一个页面元素设置多个背景图片,这种技术很早就可行了,你只...
    99+
    2024-04-02
  • CSS怎么设置页面背景色
    这篇文章将为大家详细讲解有关CSS怎么设置页面背景色,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。css是什么意思css是一种用来表现HTML或XML等文件样式的计算机语言,主要是用来设计网页的样式,使网...
    99+
    2023-06-14
  • CSS渐变背景色怎么设置
    CSS渐变背景色可以通过`background`属性的`linear-gradient()`函数来设置。语法:```backgrou...
    99+
    2023-10-12
    CSS
  • 使用js实现动态背景
    本文实例为大家分享了js实现动态背景的具体代码,供大家参考,具体内容如下 1.将下面的代码复制并存为js文件 window.onload = function () { ...
    99+
    2024-04-02
  • css实现div背景色渐变色代码分享
    这篇文章主要讲解了“css实现div背景色渐变色代码分享”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“css实现div背景色渐变色代码分享”吧!效果图:代码...
    99+
    2024-04-02
  • 使用CSS实现流星雨背景
    使用CSS实现流星雨背景?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。vue页面使用<template>    <vi...
    99+
    2023-06-08
  • CSS中怎么应用纯色作为背景
    本篇内容介绍了“CSS中怎么应用纯色作为背景”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 笼统使用&n...
    99+
    2024-04-02
  • css怎么使用磨砂背景
    这篇文章主要介绍“css怎么使用磨砂背景”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“css怎么使用磨砂背景”文章能帮助大家解决问题。代码实现<!DOCTYPE html>&l...
    99+
    2023-06-27
  • CSS如何实现背景渐变和自动全屏
    这篇文章主要介绍CSS如何实现背景渐变和自动全屏,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!CSS 关于背景渐变和自动全屏的问题主编在css开发时发现了一个致命的问题:在设置了背景颜色渐变后好不容易调成了全屏覆盖但...
    99+
    2023-06-08
  • ppt怎么设置动态背景让背景实现动态效果
    在PPT中设置动态背景实现动态效果,可以通过以下方法进行操作:1. 在PPT中选择“设计”选项卡,然后点击“背景样式”下的“格式背景...
    99+
    2023-09-20
    ppt
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作