【Hello CSS】第七章-CSS的继承与可变性

栏目: CSS · 发布时间: 6年前

内容简介:继承(英语:inheritance)是面向对象软件技术当中的一个概念。在在之前的文章中,我们介绍过鱼头注:有很多人会认为
  • 首发:krissarea.gitee.io/blog/

  • 作者:陈大鱼头

  • github: KRISACHAN

继承

继承(英语:inheritance)是面向对象软件技术当中的一个概念。在 CSS 中与 层叠(英语:Cascade) 一起描述了如何设置样式规则,并为所有元素的所有属性赋值。这两个属性同属规范 “ CSS Cascading and Inheritance Level ”。CSS中的 继承 实际上是父级元素对子元素的影响。

在之前的文章中,我们介绍过 层叠(优先级) 的规则,这里我们先复习一下:

选择器 千位 百位 十位 个位 合计值
h1 0 0 0 1 0001
#indentifier 0 1 0 0 0100
h1+p::first-letter 0 0 0 3 0003
li>a[href*="zh-CN"]>.inline-warning 0 0 2 2 0022
没有选择器, 规则在一个元素的 <style> 属性里 1 0 0 0 1000

鱼头注:有很多人会认为 !important 也参与了优先级的排列,但 !important 是在优先级的规则之外的,如果参与了优先级的排列,意思就是 !important 是可以被覆盖的,但事实显然不是。

接下来我们谈谈 CSS中的 继承

特殊的通用属性值

CSS为处理继承提供了四种特殊的通用属性值,其值如下:

意义
initial 属性初始值。
inherit 继承的值。
unset 如果使用 unset 的属性为继承属性,则将其视为  inerit ,否则则视为  initial
revert 属性值被设置成自定义样式所定义的属性(如果被设置), 否则属性值被设置成用户代理的默认样式。

reset属性值

在这里分享一个CSS属性 all 。CSS all 简写属性 将除却 unicode-bididirection 之外的所有属性重设至其初始值,或继承值。 all 的值可以如下:

以上四值的功能如上面的表一样。这里我们重点分享一下 revertrevert 关键字指定依赖于CSS声明的源:

  • 用户代理源(user-agent origin):浏览器会有一个  基本的样式表 来给任何网页设置默认样式,这些样式统称 用户代理样式 ,等同于  unset

  • 用户源(user origin):网站的用户(或读者)所选择的自定义样式,主要是根据用户的一员定制(例如用户自定义的系统主题与字体)。

  • 作者源(author origin):网站开发者定义的样式。

例子如下:

效果如下:

【Hello CSS】第七章-CSS的继承与可变性

代码在我codepen (https://codepen.io/krischan77/pen/VNJEJo) 中,大家可以随时查看。

鱼头注:至于CSS中可继承的属性有点多,我就不列出来了,各位有兴趣的可以看看这个问题:https://stackoverflow.com/questions/5612302/which-css-properties-are-inherited 。

计算值(Computed Value)

计算值(Computed Value)是解析指定属性值的结果,通过将其绝对化用以继承。

计算值(Computed Value)用以继承时是由父节点传达到子节点的值,由于历史原因,它不一定是由 getComputedStyle() 返回的结果。

常见的 计算值(Computed Value) 有: emexvhvwsmallerbolder 等不固定具体 px 尺寸的值。

下面是一个不同计算值单位下盒子的宽度变化的DEMO

代码有点长,就不贴出来了,有兴趣可以点开链接尝试一下: https://krissarea.gitee.io/blog/css/unit

【Hello CSS】第七章-CSS的继承与可变性

功能表示法(Functional Notations)

功能表示法是一种组件值,可以表示更复杂的类型或调用特殊处理。主要分有以下三个部分:

  • 数学表达式(用以四则运算):calc()、 min()、max()和clamp()。

  • 切换值(允许子元素循环调用传入参数):toggle()。

  • 属性引用(获取引用的属性):attr()。

以上功能属性,在之前的章节中也提到过,目前能用的就只有 calc()attr() ,但是即便如此,这两个函数已经却也已经发挥出了很强大的功能。

var()

var()是 CSS Custom Properties for Cascading Variables Module Level 1 的内容,中文名叫 自定义属性并不叫CSS变量并不叫CSS变量并不叫CSS变量 ,重要的内容说三次。

语法如下:

方法的第一个参数是要替换的自定义属性的名称。函数的可选第二个参数用作回退值。如果第一个参数引用的自定义属性无效,则该函数将使用第二个值。

我们可以在任何选择器中声明,例子如下:

从上面的代码我们可以知道,自定义属性不仅仅可以在全局作用域下定义,甚至也可以在局部作用域下定义,这点是一些 CSS处理器 所无法实现的。

我们知道,CSS目前还没有条件判断的功能,但是我们藉由数学表达式函数 calc() 也可以实现很多有趣的功能。

这里我们分享一个由 var()calc() 实现的进度条功能,效果如下:

【Hello CSS】第七章-CSS的继承与可变性

代码在我codepen( https://codepen.io/krischan77/pen/QPezjB )中,各位随时可以去看效果。

currentColor

关键字 currentColor 是属性 color 的值,如果 color 上设置 currentColor ,则将其视为 color:inherit

border和 box-shadow 默认的颜色就是当前的文字颜色,也就是类似 currentColor

嗯,所以有什么用?

我们可以通过 currentColor 来轻松实现换肤功能。DEMO如下:

【Hello CSS】第七章-CSS的继承与可变性

currentColor是 CSS3 中非常好用的一个关键字,利用它我们就可以轻松实现文本颜色与图形之间的互动。

说到这里,不知道大家有没有觉得很奇怪, 像 multi-word 这种具有连字符的单词才是 CSS 中的常规命名,而 currentColor 确是驼峰命名?如果你知道答案的话,可以在下方留言区域留言回答,不知道的话也没关系,可以持续关注鱼头的 『Hello CSS』 ,鱼头会在下一篇文章中解答。

后记

本文主要简单分享了 CSS 的继承与可变性,同时也再次地回顾了之前系列中所分享过的层级,函数等内容,一方面是想做个整理归纳,如果 CSS 属性分配得恰当,不仅可以减轻我们很多的工作量,也可以轻松实现一些比较有趣的效果,更重要是可以减少 JSCSS 的耦合度,对我们的开发与后期维护也是有很大帮助的。

大家也不妨多挖掘挖掘 CSS 的潜在能力,这也许会带来意想不到的收获。

【Hello CSS】系列

HelloCSS 是以 CSS 基础概念为主题的系列文章,旨在帮助大家更深刻地了解并且提高 CSS 在各位开发者心目中的地位。由于鱼头我水平有限,文笔有限,如果各位在文章中发现有任何不合理,不正确的地方,还烦不吝指出,我会非常感谢的;如果通过文章有任何想法或疑问,也希望各位能积极留言,我们互相探讨;如果通过本系列文章有所收获,这就让鱼头我喜不自胜了!

如果你也喜欢 CSS ,喜欢探讨技术,或者对本文,本系列有任何的意见或建议,鱼头非常希望你能加入一个有趣的微信群 — “ 进击的CSS ”。如果你有兴趣,请添加鱼头微信( krisChans95 ),添加时注明 “ 加群 ”,Mmmm,最后,如果觉得我的文章还不错,请加个关注跟点个“ 在看 ”呗!


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Parsing Techniques

Parsing Techniques

Dick Grune、Ceriel J.H. Jacobs / Springer / 2010-2-12 / USD 109.00

This second edition of Grune and Jacobs' brilliant work presents new developments and discoveries that have been made in the field. Parsing, also referred to as syntax analysis, has been and continues......一起来看看 《Parsing Techniques》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具