HTML文档与CSS的关联常见有4种方式:
-
使用link标记
<link rel="stylesheet" type="text/css" href="sheet.css" />
-
使用style元素
<style type="text/css"> body{background:#fff;} h1{font-size:2em;} </style>
-
使用@import指令
<style type="text/css"> @import url(sheet1.css); @import "sheet2.css"; </style>
-
使用style属性的内联样式(inline style)
<p style="color:#f00;">这是红色的字</p>
在实际应用中,使用style属性的内联样式是不推荐使用的,XHTML1.1已经将其标准为不建议使用,原因很简单这种方式不比font标记强多少,削弱了CSS集中控制整个文档外观的优点。前3种方式利用了link标记和style标记,在IE(包括IE6、IE7和IE8 beta1)中有如下限制:
-
文档中只有前31个link或style标记关联的CSS能够应用。
从第32个开始,其标记关联的CSS都将失效。IE的官方文档All style tags after the first 30 style tags on an HTML page are not applied in Internet Explorer也提及这个限制,包括在使用.xsl的.xml文件也有这个限制。但是似乎写错了数量。请在IE看:
-
一个style标记只有前31次
@import
指令有效应用。从第32个@import指令开始忽略。请看:
-
一个css文件只有前31次@import指令有效应用。
从第31个@import指令开始忽略。请看:
例4:用link标记引入一个使用34次
@import
指令的css文件 -
一个CSS文件的不能超过288kb?
-
@import指令下层叠限制不能超过4层
在IE下通过@import指令引入css文件时,第5层会失效。这个限制来自Cascade limit via @import rule。实际上,由于浏览器对多层嵌套的支持不完善,所以即使不得已使用了@import指令引入CSS文件,也不要超过2层。
IE对CSS的限制在绝大部分情况下是不会遇到的,即使遇到最佳的解决方案也应该是手动或者通过后端程序对CSS文件和响应的标记进行合并,最小化的http请求数是优化页面呈现的第一原则。
在IE中,可以通过document.styleSheets
对象(Firefox、Opera9和Safari3.1都支持)修改内联和嵌入样式的值。该对象仅在文档包含style或link元素时可用,其实用document.styleSheets.length
就可以看出IE下这个值最大是31。下面是利用Javascript来合并link
和style
标记来解决IE下的限制:
var fnMergeStyleSheet = function(){
if(!document.styleSheets){
return;
}
var aSheet = document.styleSheets,
aStyle = document.getElementsByTagName('style'),
aLink = document.getElementsByTagName('link');
if(aStyle.length + aLink.length < 32 || !aSheet[0].cssText){
//document.styleSheets.cssText 只有IE支持
return;
}
var aCssText = [],aCloneLink = [];
//把style标签中的样式存入,然后删掉该标签,但保留第一个
//因为由getElementsByTagName方法返回值是nodeList,所以删除时循环用倒序
for(var i=aStyle.length-1;i>-1;--i){
var o = aStyle[i];
aCssText.push(o.innerHTML);
if(i>0){
o.parentNode.removeChild(o);
}
}
//在IE中只有在31之内的link标签才能通过其styleSheet.cssText获取样式
//无法的获取复制到一个数组aCloneLink中
for(var i=aLink.length-1;i>-1;--i){
var o = aLink[i];
if(o.getAttribute && o.getAttribute('rel')==='stylesheet'){
if(o.styleSheet){
aCssText.push(o.styleSheet.cssText);
}else{
aCloneLink.push(o.cloneNode(true));
}
if(i>0){
o.parentNode.removeChild(o);
}
}
}
var oHead = document.getElementsByTagName('head')[0];
//通过前面的删除,前31个link或者style标记最多只剩下2个
//通过重新增加link节点的方法激活其styleSheet属性,从而获取样式
for(var i = aCloneLink.length-1;i>-1;--i){
var o = aCloneLink[i];
oHead.appendChild(o);
aCssText.push(o.styleSheet.cssText);
oHead.removeChild(o);
}
//把所有的样式都复制给第一个标签
aSheet[0].cssText += aCssText.join('');
}
上面仅仅是一个简单的粗糙的解决方案,演示请看例1和例2,可以改进的地方还有:
- 没有考虑
media
这个属性,如果有多个media
应该分别合并,当然更没有考虑link
标记的rel="alternate stylesheet"
带来的影响。但我更建议通过@media
指令把相应的样式写在同一个文件中,至少可以减少HTTP连接数。 - 没有解决@import指令31次限制的问题,其实可以提取其href值然后进行激活处理。但是实际应用在建议用
link
标记来替代@import指令,因为在IE中@import
指令相当与把link标记写在文档的底部,会导致在IE5/6页面加载时瞬间无样式问题,学名叫“Flash of Unstyled Content”(简称为FOUC)的bug,当然可以通过在文档头中放一个link或script元素可以避免这个bug。 - 一般来讲页面之所有出现大量的
link
或者style
标签很可能有很多是相同的,可以在aCssText合并前除掉相同的项,减少代码量。
相关推荐
然而,在使用IE浏览器时,开发者可能会遇到一些对CSS样式表的限制。本文将分析这些限制并提供相应的解决方案。 首先,我们需要了解HTML文档与CSS关联的几种常见方式。它们分别是使用link标记引入外部CSS文件、使用...
使用ie-css3.htc的方法很简单,只需要在CSS样式表中将ie-css3.htc文件作为行为(behavior)属性关联到需要CSS3效果的元素: ```css selector { behavior: url(/path/to/ie-css3.htc); /* 其他CSS3属性,如border-...
在IT行业中,尤其是在Web开发领域,兼容性问题一直是一大挑战。Internet Explorer(IE)作为曾经的主流...提供的压缩包文件“本地ie9+10加载css样式”应该包含了一个示例,你可以参考这个例子来实践上述解决方案。
通过合理运用上述提到的各种CSS Hack技术和兼容性解决方案,可以有效地解决不同版本IE浏览器以及其他非IE浏览器之间的兼容性问题,从而确保网站在各种环境下都能够呈现出一致且良好的用户体验。
1.3 规划、组织和维护样式表 1.3.1 对文档应用样式 1.3.2 对代码进行注释 1.3.3 样式指南 1.3.4 组织样式表以便简化维护 1.4 小结 第2章 可视化格式模型 2.1 框模型概述 2.1.1 IE/Win和框模型 2.1.2 空白边...
标题中的“ie-css3(让ie6 ie7 ue8支持css3).rar”指的是一个针对Internet Explorer(IE)浏览器的解决方案,尤其是版本6、7和8,这些版本不原生支持CSS3的新特性。这个压缩包包含了一个名为“ie-css3(让ie678支持css...
"PIE.htc"和"PIE_IE678.js"是用于解决IE8对CSS3边框圆角、阴影等效果支持不足的解决方案。PIE(Position: -pie-)是一个行为(Behavior)文件,它可以使得IE6到IE8支持CSS3的border-radius、box-shadow等属性。它...
1. **代码冗余**:使用CSS Hack会增加CSS代码量,使得样式表变得臃肿。 2. **维护成本**:随着浏览器更新换代,旧的Hack可能不再适用,需要定期检查并更新。 3. **浏览器识别**:不同的浏览器版本可能会识别不同的...
在探讨CSS样式兼容IE6、IE7、IE8与火狐浏览器的方法时,我们需深入理解不同浏览器对CSS的支持差异,以及如何通过特定的技术手段确保网页在这些浏览器中的一致性和美观性。以下是对这一主题的详细解析: ### 1. 了解...
- Flexbox和Grid布局提供更现代的布局解决方案。 8. CSS预处理器(如Sass、Less): - 使用变量、嵌套规则、混合和函数,提高代码可读性和可维护性。 9. CSS响应式设计: - 使用媒体查询(media queries)根据...
总之,解决IE浏览器对CSS3的兼容问题主要依赖于像Modernizr这样的工具,它们能够检测浏览器的特性并提供适应性的解决方案。通过学习和实践,开发者可以确保他们的网站在各种浏览器上都能呈现出一致且良好的用户体验...
其中,一个常见的问题是本地HTML页面中的CSS样式表或外部JavaScript文件无法正常加载。本文将详细介绍如何解决IE9和IE10在本地环境中加载CSS和JS失败的问题。 #### CSS加载失败的原因分析 当在IE9或IE10中打开本地...
本《CSS样式表中文手册》将全面覆盖这些主题,并提供实例演示和代码解析,帮助读者掌握CSS并应用于实际项目。通过学习,你将能够熟练运用CSS进行网页设计,创造出美观、高效且响应式的网页界面。
这份“IE6, IE7, IE8 CSS 兼容速查表”就是为了解决这一问题而编写的,它提供了关于这些浏览器中CSS特性的详尽对比和解决方案。 1. **CSS盒模型差异**:IE6、7采用了独特的盒模型,其中`width`属性包含了边框和内...
在IT领域,尤其是在前端开发中,CSS3是现代网页设计不可或缺的一部分,它引入了许多新的选择器,极大地增强了样式表的功能和灵活性。然而,早期版本的Internet Explorer(IE)浏览器,尤其是IE8及以下版本,对CSS3...
在IT行业中,CSS3是层叠样式表的第三版,带来了许多令人兴奋的新特性,显著提升了网页设计的视觉效果和用户体验。然而,IE(Internet Explorer)浏览器,特别是早期版本,对CSS3的支持并不完全,这使得开发者在创建...
尽管这些库可以极大地提升IE的CSS兼容性,但值得注意的是,它们并不是万能的解决方案。在某些情况下,可能仍需要针对特定的IE版本编写额外的CSS hack或者使用JavaScript进行样式调整。此外,随着IE浏览器逐渐被淘汰...
4. 使用条件注释:在HTML中,可以使用IE特有的条件注释来加载专门为IE编写的CSS,这样可以为IE提供单独的样式表,其中包含解决圆角和阴影的替代方案。 5. 引入polyfill库:一些现代JavaScript库,如Modernizr,可以...
根据给定的文件信息,以下是对“CSS样式表设计的十条技巧”中提及的知识点的详细解析: ### 1. CSS 字体简写规则 在CSS中,可以通过使用简写属性来减少代码量并提高可读性。对于字体属性,可以将`font-size`, `...