我试图准确了解浏览器处理 CSS 的方式和顺序。我已经知道 CSS 是从右到左读取的,但更具体地说,我想知道:
- 浏览器遍历 DOM 中的每个元素,并且对于每个元素,扫描 CSS 规则以查找匹配的样式?...或者如果:
- 浏览器会遍历每个 CSS 规则,并为每个选择器扫描 DOM 以找到与该选择器匹配的 DOM 元素?
(或者这甚至可能因浏览器而异?)
据我所知,这不是由 CSS 标准定义的,它只指定结果,而不是达到它们的方法。由于两种“算法”都会为您提供相同的视觉输出,因此它们都应该是有效的实现,假设它们还考虑了网页的动态特性(即,元素几乎可以随时通过 Javascript 移动、添加、修改或删除这可能会改变它们匹配的 CSS 规则,甚至改变其他元素匹配)。
这应该取决于实现。不同的浏览器不必都以相同的方式进行。不过请放心,浏览器领域的竞争非常激烈,您不必担心设置 CSS 规则对性能的影响。
关于 CSS 处理层次结构需要注意的一件事是链接到 CSS 文件时。
调用的样式表link
将更快加载:
<link rel='stylesheet' type='text/css' href='foo.css'>
比用以下方式调用的样式表@import
:
<style>
@import url('foo.css');
</style>
这是一个非常简单的例子,但你明白了。您可以在这里阅读更多内容:http: //www.stevesouders.com/blog/2009/04/09/dont-use-import/