【CSS黑科技1】使用CSS的currentColor变量写DRY代码

| 导语 如果你已经是sass或者less的用户,你肯定已经在你的样式表中用过变量了,也知道有变量的存在,会非常灵活好用,如果你没用过,那一定很想在普通的css中有变量的存在,那么我们就来认识一下这个特殊的变量吧: currentColor

变量的好处

css中,如果有变量的使用,会让我们的代码能DRY(don‘t repeat youself :特指在程序设计以及计算中避免重复代码,因为这样会降低灵活性、简洁性,并且可能导致代码之间的矛盾),特别是在我们管理维护大型项目的时候非常好用,因为这往往是包含了大量的重复值。

变量常用的用例之一是颜色主题。比如说,在项目中,配色方案通常要重复使用一些颜色值,如果方案对这些值改变,我们最希望的是,只是在变量中修改这些值,整个配色方案生成结果也跟着改变。

currentColor

这个currentColor关键字就像是css变量,我们来看看他的官方定义

也就是说:currentColor是 color 属性的值,具体意思是指:currentColor关键字的使用值是 color 属性值的计算值。

  • 如果currentColor关键字被应用在 color 属性自身,则相当于是 color: inherit。
  • 上述这些话都是什么意思呢?先看个例子

  • 如果你能立马知道上述代码的运行结果,那么就差不多理解 currentColor 关键字的意思了。
  • 上述代码将会让div拥有一个红色的边框,这就解释了 border-color 属性的默认值是 color 属性的值;
  • 如果将上述代码中的color属性定义删除,那么边框的颜色将取决于父元素的 color 计算值,因为 color 拥有继承性;

举个栗子

我们用栗子来进一步说明这个神奇的currentColor吧

这是一个svg图标+说明文字的按钮,也就是说如果我们给按钮的各个状态(:hover , :focus , :active)设定不同的样式,会有类似下方的代码:

假如,恩,是的 假如有一天,设计师(maybe产品?)同学改颜色方案了,网站不是蓝色调了,换成了灰色调了

我们只好苦逼的再换一次颜色呗,只是换文字的颜色还不行,还得把里面svg的也换一遍

假如我们用了currentColor,svg的颜色以及边框颜色 都会使用color的值

主要意义——级联

对,就是这么神奇,当一个元素有一个color值,无论它是显式设置还是继承的,该元素的某些能够接受<color>值(如border-color、background-color 、fill 等等)的前景元素使用currentColor将会默认继承该color值

元素中将会得到/继承元素color值的包括:

  • 元素的文本内容——正是color属性使用的地方
  • 文本的轮廓
  • 元素的边框
  • 元素的盒阴影
  • img的alt文本。也就是,当无法显示图像时,代替图像出现的文本,会继承这个颜色值。
  • 列表项的小黑点和边框
  • 一些浏览器(比如Chrome)水平线(<hr>)的边框颜色。(没有边框的话,颜色就不会受影响)

如果你没有在某个元素的这些属性中显式地给它们设置颜色,它们就会默认继承元素的color计算值。

我们理解一下上面这段话,currentColor这个属性的主要意义是颜色级联,它能在各种地方派上用场。我们通过currentColor这个属性,让各个相关的地方的颜色关联起来,我们最后再通过2个栗子来理解一下吧

1、如下面这个GIF图像所示。Simon使用了浏览器中的开发工具以及颜色拾取器来改变color属性的值,然后得到了一个实时的组件颜色改变的预览。

地址:http://simurai.com/blog/2014/05/04/cssconf/ 是的 currentColor这个黑科技我就是在cssconf上看到他的

2、下面这个是由Scott Kellum创建的示例,他进一步理解了这个概念,并为color属性添加了一个动画效果。在color属性值改变时,所有受到该color影响的元素都会随之改变他们的颜色。查看一下Scott Kellum (@scottkellum)在CodePen上创建的示例

地址:http://codepen.io/scottkellum/pen/Fhxql/

结语

感谢阅读,如果你有别的黑科技,跪求分享~

时间: 2024-11-08 04:32:22

【CSS黑科技1】使用CSS的currentColor变量写DRY代码的相关文章

【CSS黑科技2】CSS百分比实现高度占位自适应(margin/padding)

| 导语 在很多场景下,我们都需要给容器设定宽高比,实现自适应占位,巧用margin/padding可以让我们实现我们的需求 基本知识点 本文依赖于一个基础却又容易混淆的css知识点:当padding/margin取形式为百分比的值时,无论是left/right,还是top/bottom,都是以父元素的width为参照物的! 哈,top/left以父元素的width为参照物还好理解,但top/bottom不是以height更符合我们的预期吗?有疑惑很简单,看官方解释: 举个栗子 我们有个页面,如

几个css黑科技

这里的黑科技其实就是一些CSS中不怎么为人所知但在解决某些问题的时候很溜的属性. .box { border-radius: 5px 5px 3px 2px / 5px 5px 1px 3px; } 斜线前面的影响的是水平方向,斜线后面影响的是垂直方向,各个数字就分别代表四个不一样的方向. input { outline-offset: 4px ; } 调节该属性值的大小你就可以看到outline的距离变化了. ol li:nth-child(n+7):nth-child(-n+14) { ba

新手玩CSS中的一些黑科技

哎哎 1.鼠标移进网页里,不见了= = *{ cursor: none!important; } 2.简单的文字模糊效果 *{ color: transparent; text-shadow: #111 0 0 5px; } 3.多重边框 .div { box-shadow: 0 0 0 6px rgba(0, 0, 0, 0.2), 0 0 0 12px rgba(0, 0, 0, 0.2), 0 0 0 18px rgba(0, 0, 0, 0.2), 0 0 0 24px rgba(0,

【2016.12.08】CSS中的一些黑科技2

1.border-radius 基本上很多人都是这么用的: .div { border-radius: 4px; } 稍微高端一点 .div { border-radius: 4px 6px 6px 4px; } 终极黑科技是这样用的 .div { border-radius: 10px 10px 30px 2px / 50px 50px 10px 3px; } 效果如图: border-radius 它可以赋8个值:斜线前面的影响的是水平方向,斜线后面影响的是垂直方向,各个数字就分别代表四个不

CSS currentColor 变量的使用

CSS的第一个变量,它就是crrentColor. 初识 currentColor代表了当前元素被应用上的color颜色值. 使用它可以将当前这个颜色值应用到其他属性上,或者嵌套元素的其他属性上. CSS里你可以在任何需要写颜色的地方使用currentColor这个变量,这个变量的值是当前元素的color值.如果当前元素没有在CSS里显示地指定一个color值,那它的颜色值就遵从CSS规则,从父级元素继承而来. 场景1 <p>约么?</p> p{ color: red; } 此时,

css黑火狐代码

已经亲测了,找这个代码好苦啊,由于bilibili只能上传一个css,找了半天css hack,很多失效了,很多用法不明确,还有很多停留在上世纪的IE 5.0...... 因为自己做的css在webkit下非常棒,但是firefox下不尽如人意,因此想黑掉火狐 代码: @-moz-document url-prefix(){ #example{} } css黑火狐代码

聊聊H5与JS近几年的黑科技

聊聊H5与JS近几年的黑科技 自ajax技术的诞生,编程界兴起了一股WEB开发热,facebook,Twitter等众多大佬级企业都在网页应用上大放异彩,这十年我们见证了前端技术的崛起.这期间产生了众多脱离了浏览器的JS和H5开发的黑科技.移动端的react native,cordova,native.js:PC端的Node.js,NW.js:当然还有前端本身的众多框架,vue.js,jquery.js,bootstrap等等. 所以JS不再是一门单纯的浏览器脚本,作为一个前端开发者如果跟不上前

Python3网络爬虫(十一):爬虫黑科技之让你的爬虫程序更像人类用户的行为(代理IP池等)

原文链接: Jack-Cui,http://blog.csdn.net/c406495762 运行平台: Windows Python版本: Python3.x IDE: Sublime text3 1 前言 近期,有些朋友问我一些关于如何应对反爬虫的问题.由于好多朋友都在问,因此决定写一篇此类的博客.把我知道的一些方法,分享给大家.博主属于小菜级别,玩爬虫也完全是处于兴趣爱好,如有不足之处,还望指正. 在互联网上进行自动数据采集(抓取)这件事和互联网存在的时间差不多一样长.今天大众好像更倾向于

黑科技!仅需 3 行代码,就能将 Gitter 集成到个人网站中,实现一个 IM 即时通讯聊天室功能?

欢迎关注个人微信公众号: 小哈学Java, 文末分享阿里 P8 高级架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 个人网站: https://www.exception.site/essay/how-to-use-gitter-on-your-website-quickly 一.前言 小哈从很早以前就有写博文的习惯,不过那个时候,也没咋认真地写,倒是挺喜欢倒腾,从最初在 CSDN 写博客,写了得有 100 多篇后,那时,CSDN 开始加入了恶心的广告,体验开始