IE的CSS渲染跟其它浏览器有什么不同

由于IE系浏览器对标准的支持不够好,导致Web开发中经常需要去处理浏览器兼容性问题,特别有些莫名其妙的问题很让人头疼,今天要说这个问题就是这样的,先从插入CSS的三种方法说起:

外部样式(External Style Sheet)

当样式需要应用于很多页面时,外部样式表将是理想的选择。在使用外部样式表的情况下,你可以通过改变一个文件来改变整个站点的外观。每个页面使用 <link> 标签链接到样式表。<link> 标签在(文档的)头部:嘉鱼县技工学校

<head>
<link rel="stylesheet" type="text/css" href="mystyle.css" />
</head>

内部样式(Internal Style Sheet)

当单个文档需要特殊的样式时,就应该使用内部样式表。你可以使用 <style> 标签在文档头部定义内部样式表,就像这样:

<head>
<style type="text/css">
  hr {color: sienna;}
  p {margin-left: 20px;}
  body {background-image: url("images/back40.gif");}
</style>
</head>

内联样式(Inline Styles)

由于要将表现和内容混杂在一起,内联样式会损失掉样式表的许多优势。请慎用这种方法,例如当样式仅需要在一个元素上应用一次时。要使用内联样式,你需要在相关的标签内使用样式(style)属性。Style 属性可以包含任何 CSS 属性。

<p style="color: sienna; margin-left: 20px">This is a paragraph</p>

多重样式(Multiple Styles)

如果外部样式、内部样式和内联样式同时应用于同一个元素,就是使多重样式的情况,一般情况下优先级如下:

(外部样式)External style sheet <(内部样式)Internal style sheet <(内联样式)Inline style

之所以说是一般情况是因为可以使用!important来改变这种顺序,比如外部样式如果某个样式项使用了!important来提高优先级,其优先级将比内联样式高。还有个例外的情况就是如果外部样式放在内部样式的后面,则外部样式将覆盖内部样式:

<head>
<!--内部样式-->
<style>
	h3{color:green;}
</style>
<!--外部样式style.css-->
<!--h3{color:blue;}-->
<link rel="stylesheet" type="text/css" href="style.css"/>
</head>
<body>
	<h3>测试!</h3>
</body>

文字的颜色将是蓝色,因为外部样式的蓝色覆盖了内部样式的绿色,这在主流浏览器中表现都是一致的,包括IE在内。然而另外一种方式插入样式,IE就表现出它的另类了。这种方法是使用脚本在外部样式前插入内部样式,即上面的内部样式用脚本创建出来,代码如下:

 (function(){
	var agent = window.navigator.userAgent.toLowerCase();
	var is_op = (agent.indexOf("opera") != -1);
	var is_ie = (agent.indexOf("msie") != -1) && document.all && !is_op;
	var is_ch = (agent.indexOf("chrome") != -1);
	var cssStr="h3 {color:green;}";
	var s=document.createElement("style");
	var head=document.getElementsByTagName("head").item(0);
	var link=document.getElementsByTagName("link");
	link=link.item(0);
	if(is_ie)
	{
		if(link)
			head.insertBefore(s,link);
		else
			head.appendChild(s);
		document.styleSheets.item(document.styleSheets.length-1).cssText=cssStr;
	}
	else if(is_ch)
	{
		var t=document.createTextNode();
		t.nodeValue=cssStr;
		s.appendChild(t);
		head.insertBefore(s,link);
	}
	else
	{
		s.innerHTML=cssStr;
		head.insertBefore(s,link);
	}
})();

在Firefox/Chrome/Safari/Opera中测试文字都是蓝色的,符合外部样式如果插入到内部样式前的话,外部样式将覆盖内部样式的原则,然而在IE下却是绿色的,也就是说IE在加载完页面文档,运行了脚本插入了内部样式之后,就把文字颜色设置成绿色了而忽略了后面外部样式。

时间: 2024-10-29 19:10:30

IE的CSS渲染跟其它浏览器有什么不同的相关文章

浏览器渲染引擎,提高css渲染速度。

一.渲染引擎渲染引擎的职责是……渲染,也就是把请求的内容显示到浏览器屏幕上.默认情况下渲染引擎可以显示HTML,XML文档以及图片. 通过插件(浏览器扩展)它可以显示其它类型文档. 二.各种渲染引擎我们提到的Firefox, Safari两种浏览器构建于两种渲染引擎之上:Firefox使用Gecko —— Mozilla自家的渲染引擎:Safari 和 Chrome 都使用 Webkit. 最终决定浏览器表现出来的页面效果的差异是:渲染引擎 Rendering Engine(也叫做排版引擎),也

html标签和css基础语法与浏览器兼容性等相关基础学习

<!-- table的使用 --> <h3>前端日常</h3> <form action="https://www.baidu.com"> <table border="1px" cellspacing="0px"><!--cellspacing单元格间隙--> <thead></thead><tbody> <col span=&qu

css样式兼容不同浏览器问题解决办法

在网站设计的时候,应该注意css样式兼容不同浏览器问题,特别是对完全使用DIV CSS设计的网站,就应该更注意IE6 IE7 FF对CSS样式的兼容,不然,你的网乱可能出去不想出现的效果! 所有浏览器 通用 height: 100px; IE6 专用 _height: 100px; IE6 专用 *height: 100px; IE7 专用 *+height: 100px; IE7.FF 共用 height: 100px !important; 一.CSS HACK 1, !important

【CSS】怎么解决浏览器兼容性问题

[CSS]怎么解决浏览器兼容性问题 工具/原料 Dreamweaver CSS 方法/步骤 不同浏览器对HTML标记所具有的内外边距属性具有不同的定义. 因此如果想消除这种差距,应该在相应的CSS部分加入以下CSS代码: *{margin:0px;padding:0px;} 借于此,所有标记的内外边距被统一起来. 优先级问题: 对于同一标记属性所给定的值,有不同的优先级.其中优先级最高的是内联代码,其实是页内CSS,接下来是浏览器默认设置,最后才是外部CSS所做的限制. Margin不一致的问题

转:【总结】浏览器CSS Hacks汇总,浏览器兼容方式CSS Hacks

[总结]浏览器CSS Hacks汇总 浏览器兼容可以说是前端开发所要面对的第一个挑战,目前我的电脑上已经安装了6种浏览器(基于IE内核的不算,如Maxthon等). CSS hacks利用浏览器的漏洞来隐藏特定浏览器的CSS规则.实现浏览器兼容主要有两种方式条件样式表和CSS Hacks(Selector Hacks.Attribute Hacks).对此根据一些资料汇总了一些CSS Hacks方法.   1.条件样式表 像这样的代码你应该见过: <link rel="stylesheet

CSS 滤镜(IE浏览器专属其他浏览器不支持)

Filter 属性介绍: 设置或检索对象所应用的滤镜或滤镜集合.此属性仅作用于有布局的对象,如块对象.内联要素要使用该属性,必须先设定对象的 height 或 width 属性,或者设定 position 属性为 absolute,或者设定 display 属性为 block.请参阅对象的 hasLayout 属性.若要在img 对象上应用 shadow 滤镜,可以在该对象 img 对象的父容器上应用.滤镜的机制是可扩展的.通过利用 Microsoft? DirectX? Media SDK,你

IE6,IE7,IE8 css bug搜集及浏览器兼容性问题解决方法汇总

http://www.jb51.net/css/85640.html 断断续续的在开发过程中收集了好多的bug以及其解决的办法,都在这个文章里面记录下来了!希望以后解决类似问题的时候能够快速解决,也希望大家能在留言里面跟进自己发现的ie6 7 8bug和解决办法! 1:li边距“无故”增加  任何事情都是有原因的,li边距也不例外.  先描述一下具体状况:有些时候li边距会突然增 加很多,值也不固定(只在IE6/IE7有这种现象),让人摸不着头脑,仔细“研究”发现是由于其低级元素ul的paddi

10条影响CSS渲染速度的写法与建议(摘抄HTML5中国)

1.尽量避免 *{} 由于不同浏览器对HTML标签的解释有差异,所以最终的网页效果在不同的浏览器中可能是不一样的,为了消除这方面的风险,设计者通常会在CSS的一开始就把所有的默认属性全部去除,以达到所有标签属性值都统一的效果.所以就有了*通配符.* 会遍历所有的标签: *{ margin:0;padding:0} 建议的解决方法: (1)不要去使用生僻的标签,因为这些标签在不同浏览器中解释出来的效果不一样:所以要尽可能的去使用那些常用的标签: (2)不要使用*:而是把常用到的这些标签进行处理:例

翻译:打造Edge渲染内核的浏览器

最近开始了解UWP和Edge内核,在微软技术博客中找到一篇文章,主要是介绍Edge渲染内核使用技术.顺手翻译了一下.不对之处请斧正! Over the past several months, we have made numerous improvements to theMicrosoft Edge rendering engine (Microsoft EdgeHTML), focusing oninteroperability with modern browsers and compl