跳到主要内容

CSS - 层叠样式表

全称 cascading style sheet,层叠样式表。

盒模型 1

picture 3

  • 内容区、padding、border、margin
  • 怪异盒模型/IE 盒模型与标准盒模型的区别
    • 标准盒模型 content-box - width 计算范围为 content 区
    • IE 盒模型 border-box - width 计算范围为 content+padding+border
  • box-sizing 切换盒模型
  • 块盒子和内联盒子区别
    • 内联盒子
      • 宽高被忽略
      • margin、padding、border 生效
      • 不会撑开盒子的实际占用大小,影响外部布局
  • 内部显示类型和外部显示类型
  • margin 折叠 - 垂直边距

层叠规则

按照重要程度、优先级、顺序依次判断

重要程度

  • 用户代理(UA)样式表(如浏览器的默认样式)
  • 用户样式表中的常规声明
  • 网站样式表中的常规声明
  • 网站样式表中的!important 声明
  • 用户样式表中的!important 声明

优先级

  • 行内样式
  • id 选择器
  • class 选择器、属性选择器、伪类
  • 元素、伪元素选择器
  • 通用选择器、组合符/连接符、否定伪类 :not 不参与计算

注意优先级计算为跨层级计算,同层级比对权重值,不同层级直接比较级别高低

顺序

  • 后来居上

重绘和重排

  • 重排:元素的几何尺寸、位置等信息发生了变化,渲染引擎需要重新计算元素位置,并且会影响到其它元素的位置
  • 重绘:元素的颜色等信息的重新绘制,消耗相比小很多

优化手段:

  • 集中修改样式,可以让渲染引擎合并操作
  • 集中修改 dom 结构,利用 fragment 作为临时容器
  • 不要一边修改一边读取 dom/样式,读取会让渲染引擎强制进行渲染再返回新的样式信息
  • 使用 transform、opacity、will-change 等生成独立图层,开启 GPU 加速。3
  • 让元素脱离常规流

GPU 加速会导致滥用会导致内存消耗变大,还有字体模糊等问题

常规流/文本流 2

常规流(normal flow,常被翻译为文档流)

  • float 脱离常规流,不脱离文本流,其它元素会忽略它的尺寸占位,但是文本会进行环绕
  • absolute、fixed,脱离常规流,脱离文本流

参考资料