css 小结

目录

CSS 渲染流程

Filtering

通过给定的所有 CSS 样式,匹配到元素的样式,得到 declared value。每个元素的每个样式可能有 0 或多个。得到声明值(多个)。

Cascading

按照特异性和顺序,为多个属性的样式确定优先级最高的属性值。得到层叠值。

Defaulting

将依旧为空的属性设置继承值或者初始值。此时每个元素的每个属性都一定不为空。得到指定值。

Resolving

将相对值或者关键字转化为绝对值,如 em 变成 px。此时依旧不考虑得到计算值。

Formatting

将计算值进行进一步转换变成绝对值,例如百分比需要计算为 px,得到使用值。

==计算值和使用值什么区别==?

比如某个 width: 100%. 在 resolving 阶段并不能转化为绝对值,因为

Constraining

将计算出来的小数转化成整数。得到实际值(也就是浏览器最终显示出来的值)。

布局相关技术

常规流、绝对定位、浮动

常规流——盒子模型

  • margin
  • border
  • padding
  • conten
  • width
  • height

width 与 height

  • 默认指定 content-box 的宽度/高度。
  • 长度、百分数(相对于容器)、auto(浏览器控制)
  • 注意 height 如果设置百分数,容器需要有指定高度:如果容器设置的是 auto 高度,里面元素设置 100% 高度,此时会出现循环依赖的情况:即容器高度和元素高度相互依赖,最终无法解算。

padding

padding 如果是百分比,则默认相对于 content 的宽度和高度进行计算。

因此 content-box 时需要注意宽度和 padding、border 的关系。

border

border 可以调整四个方向的边框的特性。

margin

使用 margin: auto 可以进行水平居中。上下 margin 可以出现堆叠的情况,需要在同一个 BFC。

box-sizing

  • content-box: 只包括 content
  • border-box: 包括 padding 和 border

在实际项目中,通常会使用 border-box。

overflow

  • visible: 可见益处
  • Hidden: 不可见
  • scroll: 利用滚动条

盒子和元素——display 属性

元素是 HTML 的概念,盒子是 CSS 里面的概念,一个行(块)级元素生成一个行(块)级盒子。

  • block: 块
  • inline: 行
  • Inline-block: 行,但可以放在行盒子中设置宽高,作为整体不被拆散成多行
  • none: 排版的时候忽略

IFC

inline formmating content, 可以