对于 CSS 的载入方式,在这里咬文嚼字下。这篇主要探讨 CSS 的两种载入方式:@import 和 link 元素间的差异。
link 是在 (X)HTML 文档中的语义是「 页面资源 」(当然也会包括 CSS),而 @import 只是 CSS2.1 的语句。
使用 @import 可以使各 CSS 文件间相互嵌套。在 Explorer5.x 时代, 同时也是浏览器间判断是否支持 CSS2.1 的一个方法 。
其实,我们最关注的是 @import 和 link 两种不同的 CSS 载入方式的性能问题。先写了两个简单的脚本,让 CSS 文件延时 5 中载入,可以在各浏览器下看看结果 使用 @import 使用 link 。
可以看见,Exploer 系列在使用 @import 方式时,会先载入文档,然后再载入样式;而在其他浏览器以及其他情况下,都需要等待样式载入完毕以后统一渲染。
总结下我个人的看法。我个人倾向于使用 link 方式,主要是下面的几个原因
- CSS 文件也是页面资源的一部分(更佳的语义)
- 没有各浏览器间的载入分歧
- 便于 Javascript 操作(link 是 HTML 结构的一部分,而 @import 载入的只能操作 style 节点)
当然,应用 @import 的场合也很多,比如在无法更改页面结构、或者是需要统一的 CSS 入口的情况下等。
参考阅读
很不幸的我又沙发了.
两种方式各有利弊是肯定的. 但有些时候还确实非得用 @import 不可.
For no real apparrent reason (are you sensing a theme?), when a < script > or < link > tag is placed in the < head > section your flickering, delayed CSS problem should be history.
@import在IE下一闪的问题,哈
还是倾向link 方式。
还有个问题是在ie下动态修改样式后,@import会失效
http://blog.12km.com/import/import_bug.html
opera访问两个地址效果一样,都是先载入内容再载入样式,为何?
@robbenmu 感谢补充
@x Opera 没有测试过
2楼大猫兄,用 @import 方式时,会先载入文档,然后再载入样式,这种方式下出现闪屏很正常。而对于firefox,在yslow中可以看到,即使把@import 放到页面最上面,显示的还是没有遵守css放页面上面的原则