深入CSS(上) | 青训营笔记

53 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天

深入CSS

选择器优先级/特异性

important > 内联 > id > (伪)类 > 标签 > 通配符

继承与初始值

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

一般与文字相关的属性可继承,如color,而与盒模型相关的属性不被继承,如width

可通过设置inherit属性值来显式继承

初始值

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

  • background-color 的初始值为 transparent

可以使用initial关键字显式重置为初始值

  • background-color: initial;

求值过程

  1. 获取DOM树与样式规则

  2. filtering

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

    得到声明值,Declared Values,一个元素的某属性可能有0到多个声明值。比如p {font-size:16px}p.text {font-size:1.2em}

  3. cascading

    按照来源、!important、选择器特异性、书写顺序等选出优先级最高的一个属性值

    得到层叠值,Cascaded Value,在层叠过程中,优先级最高的值,比如1.2em

  4. defaulting

    当层叠值为空的时候,使用继承或初始值

    得到指定值,Specified Value,经过cascading和defaulting之后,保证指定值一定不为空

  5. resolving

    将一些相对值或者关键字转化成绝对值,比如em转为px,相对路径转为绝对路径

    得到计算值,Computed Value,一般来说是,浏览器在不进行实际布局的情况下,所能得到的最具体的值。比如60%

  6. formatting

    将计算值进一步转化,比如关键字、百分比等都转为绝对值

    得到使用值,Used Value,进行实际布局时使用的值,不会再有相对值或关键字。比如400.2px

  7. constraining

    将小数像素值转为整数

    得到实际值,渲染时实际生效的值,比如400px

布局Layout

布局简介

确定内容的大小和位置的算法

依据元素、容器、兄弟节点和内容等信息来计算

布局相关技术

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

盒模型

一个盒子尺寸包括margin、border、padding、content

box-sizing: content box

width

  • 指定content box宽度
  • 百分数相对于容器的content box宽度

height

  • 指定content box高度
  • 百分数相对于容器的content box高度,容器有指定的高度时,百分数才生效

padding

  • 内边距,百分数相对于容器的宽度

border

  • 边框,可利用边框制作三角形等图形

margin

  • 外边距,百分数相对于容器的宽度
  • margin在垂直方向上存在margin collapse边距重叠,会取两个外边距的最大值

box-sizing: border-box

  • width、height包含border、padding、content

overflow

对于超出盒子大小的内容,可通过overflow的属性值来指定其显示情况

  • vidible 可见
  • hidden 隐藏
  • scroll 滚动条