由于IE系浏览器对标准的支持不够好,导致Web开发中经常需要去处理浏览器兼容性问题,特别有些莫名其妙的问题很让人头疼,今天要说这个问题就是 这样的,先从插入CSS的三种方法说起:
外部样式(External Style Sheet)
当样式需要应用于很多页面时,外部样式表将是理想的选择。在使用外部样式表的情况下,你可以通过改变一个文件来改变整个站点的外观。每个页面使 用 <link> 标签链接到样式表。<link> 标签在(文档的)头部:
2 | <link rel= "stylesheet" type= "text/css" href= "mystyle.css" /> |
内部样式(Internal Style Sheet)
当单个文档需要特殊的样式时,就应该使用内部样式表。你可以使用 <style> 标签在文档头部定义内部样式表,就像这样:
5 | body { background-image : url ( "images/back40.gif" );} |
内联样式(Inline Styles)
由于要将表现和内容混杂在一起,内联样式会损失掉样式表的许多优势。请慎用这种方法,例如当样式仅需要在一个元素上应用一次时。要使用内联样 式,你需要在相关的标签内使用样式(style)属性。Style 属性可以包含任何 CSS 属性。
1 | <p style= "color: sienna; margin-left: 20px" >This is a paragraph</p> |
多重样式(Multiple Styles)
如果外部样式、内部样式和内联样式同时应用于同一个元素,就是使多重样式的情况,一般情况下优先级如下:
(外部样式)External style sheet <(内部样式)Internal style sheet <(内联样式)Inline style
之所以说是一般情况是因为可以使用!important来 改变这种顺序,比如外部样式如果某个样式项使用了!important来 提高优先级,其优先级将比内联样式高。还有个例外的情况就是如果外部样式放在内部样式的后面,则外部样式将覆盖内部样式:
09 | < link rel = "stylesheet" type = "text/css" href = "style.css" /> |
文字的颜色将是蓝色,因为外部样式的蓝色覆盖了内部样式的绿色,这在主流浏览器中表现都是一致的,包括IE在内。然而另外一种方式插入样 式,IE就表现出它的另类了。这种方法是使用脚本在外部样式前插入内部样式,即上面的内部样式用脚本创建出来,代码如下:
02 | var agent = window.navigator.userAgent.toLowerCase(); |
03 | var is_op = (agent.indexOf( "opera" ) != -1); |
04 | var is_ie = (agent.indexOf( "msie" ) != -1) && document.all && !is_op; |
05 | var is_ch = (agent.indexOf( "chrome" ) != -1); |
07 | var cssStr= "h3 {color:green;}" ; |
08 | var s=document.createElement( "style" ); |
09 | var head=document.getElementsByTagName( "head" ).item(0); |
10 | var link=document.getElementsByTagName( "link" ); |
16 | head.insertBefore(s,link); |
19 | document.styleSheets.item(document.styleSheets.length-1).cssText=cssStr; |
23 | var t=document.createTextNode(); |
26 | head.insertBefore(s,link); |
31 | head.insertBefore(s,link); |
在
Firefox/Chrome/Safari/Opera中 测试文字都是
蓝色的,符合外部样式如果插入到内部样式前的 话,外部样式将覆盖内部样式的原则,然而在
IE下却是
绿色的,也就是说IE在加载完页面文档,运行了脚本插入了内部样式之 后,就把文字颜色设置成绿色了而忽略了后面外部样式。
没有评论:
发表评论