深入CSS | 青训营

75 阅读3分钟

01 CSS选择器的特异度

<h1 class="title">拉森火山国家公园</h1>
</article>

<style>
  .title {
    color: blue;
  }
  
  article h1 {
    color: red;
  }
</style>

哪条规则生效涉及到选择器的优先级问题,根据选择器的特异度,所谓特异度就是选择器的特殊程度。越特殊的选择器,它的优先级会更高。

特异度计算方法:

  • #nav .list li a:link

1个id,2 个(伪)类,2 个标签,特异度为122

  • .hd ul.links a

0个id,2 个(伪)类,2 个标签,特异度为22

02 CSS继承

某些属性会自动继承其父元素的计算值,除非显式指定一个值。

一般在CSS里,和文字相关的一些属性都是可以继承的,但是跟盒模型相关的一些属性都是不可继承的。

初始值

  • CSS 中,每个属性都有一个初始值

    • background-color 的初始值为 transparent
    • margin-left 的初始值为 0
  • 可以使用 initial 关键字显式重置为初始值

    • background-color: initial

03 CSS求值过程解析

HTML和CSS具体是怎样发生关系的,也就是说一个元素,它的样式是怎么样被计算出来的,这里涉及到CSS的求值过程。浏览器拿到HTML后会进行解析,会把其解析为DOM树,在解析过程中会发现一些样式规则。浏览器为了布局或渲染页面,需要遍历页面上每一个元素对应的的每一个CSS属性的值,

1.jpg

  1. filtering:对应用到该页面的规则用以下条件进行筛选:选择器匹配、属性有效、符合当前 media 等。

    • 声明值(Declared Values):一个元素的某属性可能有0到多个声明值。
  2. cascading:按照来源、!important 、选择器特异性、书写顺序等选择出优先级最高的一个属性值(即层叠值)。

    • 层叠值(Cascaded Value):在层叠过程中,赢得优先级比赛的那个值。
  3. defaulting:当层叠值为空的时候,使用继承或初始值(默认值策略)。总之经过这一步骤之后,一定能够得到有且只有一个且不为空的值即指定值。

    • 指定值(Specified Value):经过cascading和defaulting后,保证指定值一定不为空。
  4. resolving:将一些相对值或者关键字转化为绝对值,比如 em 转化为 px,相对路径转化为绝对路径。

    • 计算值(Computed Value):一般来说,浏览器会在不进行实际布局的情况下,所能得到的最具体的值。
  5. formatting:将计算值进一步转换,比如关键字、百分比等都转为绝对值。

    • 使用值(Used Value):进行实际布局时使用的值,不会再用绝对值和关键字。
  6. constraining:将小数像素值转化为整数。

    • 实际值:渲染时实际生效的值。

04 CSS布局方式及相关技术

布局(Layout)是什么?

  • 确定内容的大小和位置的算法
  • 根据元素、容器、兄弟节点和内容等信息来计算

布局相关技术:

  • 常规流(Normal Flow)
    • 行级
    • 块级
    • 表格布局
    • FlexBox
    • Grid
    • 布局
  • 浮动
  • 绝对定位

思考

目前我还不是很熟悉CSS的相关知识,在学习字节内部课程的过程中同时也在另外学习相关基础知识,CSS 新特性还在不断出现,要养成学习的习惯,持续学习,保持好奇心,善用浏览器的开发者工具,充分利用 MDN 和 M3C CSS 规范。