昨天碰到同事问了一个问题,@impor导入外部样式与link链入外部样式的优先级是怎样的,为何实验的结果是按照样式表导入后的位置来决定优先级。今天就这个问题具体总结以下:javascript
样式表的优先级顺序从高到低依次为:内嵌样式 > 内部样式表 > 导入外部样式表(实际上是属于内部样式表)
链入外部样式表与
内部样式表之间的优先级取决于所处位置的前后,最后定义的优先级最高。
本文主要是作@import导入样式表与link链入样式表的区别探讨,因此其余的不作详谈。
1. 链入外部样式表
链入外部样式表是把样式表保存为一个样式表文件,而后在页面中用<link>标记连接到这个样式表文件,这个<link>标记必须放到页面的<head>区内,以下:
<head>
……
<link href="mystyle.css" rel="stylesheet" type="text/css" media="all">
……
</head>
上面这个例子表示浏览器从mystyle.css文件中以文档格式读出定义的样式表。rel=”stylesheet”是指在页面中使用这个外部的样式表。type=”text/css”是指文件的类型是样式表文本。href=”mystyle.css”是文件所在的位置。media是选择媒体类型,这些媒体包括:屏幕,纸张,语音合成设备,盲文阅读设备等。
2.导入外部样式表
导入外部样式表是指在内部样式表的<style>里导入一个外部样式表,导入时用@import,看下面这个实例:
<head>
……
<style type=”text/css”>
<!--
@import “mystyle.css”
其余样式表的声明
-->
</style>
……
</head>
例中@import “mystyle.css”表示导入mystyle.css样式表,注意使用时外部样式表的路径。方法和链入样式表的方法很类似,实质上它至关于存在内部样式表中的。
注意:导入外部样式表必须在样式表的开始部分,在其余内部样式表上面。
综合度娘的多篇文章和我的理解,二者的区别总结以下:
1:老祖宗的差异。link属于XHTML标签,而@import彻底是CSS提供的一种方式。
link标签除了能够加载CSS外,还能够作不少其它的事情,好比定义RSS,定义rel链接属性,等,@import就只能加载CSS了。
2:加载时间及顺序不一样。使用link连接的css是客户端浏览你的网页时先将外部的CSS文件加载到网页当中,而后再进行编译显示,因此这种状况下显示出来的网页跟咱们预期的效果同样,即便一个页面link多个css文件,网速再慢也是同样的效果;而使用@import导入的CSS就不一样了,客户端在浏览网页时是先将html的结构呈现出来,再把外部的CSS文件加载到网页当中,固然最终的效果也是跟前者是同样的,只是当网速较慢时会出现先显示没有CSS统一布局时的html网页,这样就会给阅读者很很差的感受。这也是如今大部分网站的CSS都采用连接方式的最主要缘由。
3:兼容性不一样。因为@import是CSS2.1提出的因此老的浏览器不支持,@import只有在IE5以上的才能识别,而link标签无此问题。
4:使用dom控制样式时出现问题。当使用javascript控制dom去改变样式的时候,只能使用link标签,由于@import不是dom能够控制的。
5:导入样式能够避免过多页面指向一个css文件。当网站中使用同一个CSS文件的页面不是很是多时,这两种方式在效果方面几乎是没有不一样的,但网站的页面数达到必定程度时(好比新浪等门户),若是采用连接的方式可能就会使得因为多个页面调用同一个CSS文件而形成速度降低,可是通常页面能达到这种程度的网站也会有资本用最好的硬盘,因此这方面的因素也不用怎么担忧。
综上所述,通常普通的站点在调用外部样式表的时候,仍是
尽可能选择link链入外部样式表比较好。关于区别中第二点的加载顺序的差异中,找到一个国外的参考文章做为补充资料:http://www.stevesouders.com/blog/2009/04/09/dont-use-import/