原文连接:advancedweb.dev/books/advan…css
一点见解:CSS 语法自己易于学习,这也致使了不少人并无认真了解 CSS 的一些基本概念。随手复制一段 CSS,样式 OK 就过了,最终致使项目中出现了大量重复的样式定义,!important 乱用等等。了解 CSS 属性的计算过程,能够帮助咱们以可预测的方式编写更优雅和可维护的代码。web
CSS 属性的计算过程分为如下几个步骤:浏览器
收集给定元素的全部样式声明,包括 user agent、用户或者网站做者指定的样式。这些声明须要通过各类过滤和验证,以确保适用于该文档,而且语法是有效的。bash
基于上一步获取的无序声明列表,根据如下标准将它们按照优先级降序排列:网络
Origin & Importance - 来源和重要性:根据声明的来源(user agent, user, author, transition, animation)和 !important 注释。务必谨慎使用 !important。布局
- Transition
- User agent + `!important`
- User + `!important`
- Author + `!important`
- Animation
- Author
- User
- User agent复制代码
Specificity 特异性:选择器特异性的计算方式以下:
学习
Order of Appearance 出现顺序: 特异性相同时,以最后一个声明为准
字体
当没有为元素声明 CSS 属性时执行该步骤,有几种方法:flex
咱们会使用许多相对单位 (auto, em, rem, vh)、相对 URL 和一些人类可读的关键词 (small, normal, bold) 来获取灵活性,该步骤尝试将全部值绝对化,而无需进行文档布局、网络请求或从父元素以外的其余地方获取值:网站
格式化整个文档,完成上一步中剩余的工做。该步骤特别关注诸如元素之间的相对位置、auto、flex等布局,须要大量的计算,产生几乎彻底可用的绝对值。
在实际绘制以前根据浏览器环境(如浏览器引擎、媒体类型、设备像素密度或操做系统)进行一些调整。一些常见的调整是将浮点数四舍五入为整数或根据可用字体调整字体的大小。