CSS-Modules
根据浏览器CSS渲染原理写出高性能的CSS代码
注意:CSS 引擎查找样式表,对每条规则都按从右到左的顺序去匹配。
例子
示例1
1 | #nav li {} |
CSS选择符是从右到左进行匹配的,浏览器必须遍历页面上每个li元素并确定其父元素的id是否为nav。
示例2
1 | *{} |
这种效率是差到极点的做法,因为 *
通配符将匹配所有元素,所以浏览器必须去遍历每一个元素,这样的计算次数可能是上万次
示例3
1 | ul#nav{} ul.nav{} |
在页面中一个指定的ID只能对应一个元素,所以没有必要添加额外的限定符,而且这会使它更低效。同时也不要用具体的标签限定类选择符,而是要根据实际的情况对类名进行扩展。例如把 ul.nav
改成 .main_nav
更好。
优化方案
- 避免使用通配规则。如
*{}
计算次数惊人!只对需要用到的元素进行选择 尽量少的去对标签进行选择,而是用
class
。如:#nav li{}
,可以为li
加上nav_item
的类名,如下选择.nav_item{}
不要去用标签限定ID或者类选择符。如:
ul#nav
,应该简化为#nav
尽量少的去使用后代选择器,降低选择器的权重值。后代选择器的开销是最高的,尽量将选择器的深度降到最低,最高不要超过三层,更多的使用类来关联每一个标签元素。
考虑继承。了解哪些属性是可以通过继承而来的,然后避免对这些属性重复指定规则