位置: 编程技术 - 正文

IE对CSS样式表的限制分析与解决方案(css在ie失效)

编辑:rootadmin
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:#f;">这是红色的字</p> 在实际应用中,使用style属性的内联样式是不推荐使用的,XHTML1.1已经将其标准为不建议使用,原因很简单这种方式不比font标记强多少,削弱了CSS集中控制整个文档外观的优点。前3种方式利用了link标记和style标记,在IE(包括IE6、IE7和IE8 beta1)中有如下限制: 文档中只有前个link或style标记关联的CSS能够应用。 从第个开始,其标记关联的CSS都将失效。IE的官方文档All style tags after the first style tags on an HTML page are not applied in Internet Explorer也提及这个限制,包括在使用.xsl的.xml文件也有这个限制。但是似乎写错了数量。请在IE看: 例1:个style标记同时应用 例2:1个style标记和个link标记同时应用 一个style标记只有前次@import指令有效应用。 从第个@import指令开始忽略。请看: 例3:在一个style标记中使用次@import指令。 一个css文件只有前次@import指令有效应用。 从第个@import指令开始忽略。请看: 例4:用link标记引入一个使用次@import指令的css文件 例5:用style标记引入一个使用次@import指令的css文件 例6:用link和style标记分别引入一个使用次@import指令以上的css文件 一个CSS文件的不能超过kb? 这个消息来自Internet Explorer CSS File Size Limit。 @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下这个值最大是。下面是利用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 < || !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中只有在之内的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]; //通过前面的删除,前个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指令次限制的问题,其实可以提取其href值然后进行激活处理。但是实际应用在建议用link标记来替代@import指令,应为在IE中@import指令相当与把link标记写在文档的底部,会导致在IE5/6页面加载时瞬间无样式问题,学名叫“Flash of Unstyled Content”(简称为FOUC)的bug,当然可以通过在文档头中放一个link或script元素可以避免这个bug。 一般来讲页面之所有出现大量的link或者style标签很可能有很多是相同的,可以在aCssText合并前除掉相同的项,减少代码量。 如果不用DOM中已存在的样式元素直接通过cssText属性添加样式代码,而是创建一个新的样式元素来添加,一定要注意先把新建的样式元素先添加到DOM中,然后再通过cssText属性添加样式代码。反之,其添加的样式代码似乎先被IE6的样式解析器解析后才添加,这样!imporant和hack都将失效。请看例7。不建议通过添加新的样式元素的方式来添加新的样式,这样很容易达到IE的限制条件。

推荐整理分享IE对CSS样式表的限制分析与解决方案(css在ie失效),希望有所帮助,仅作参考,欢迎阅读内容。

IE对CSS样式表的限制分析与解决方案(css在ie失效)

文章相关热门搜索词:ie支持css3,css样式表能兼容所有浏览器吗,css ie8,简要说明css样式表在网页制作中的作用,css样式表能兼容所有浏览器吗,css在ie失效,css ie8,css在ie失效,内容如对您有帮助,希望把文章链接给更多的朋友!

网页打开新窗口target=_blank不符合标准 "thereisnoattributetargetforthiselement(inthisHTMLversion)"原来在HTML4./XHTML1.0/XHTML1.1严格DOCTYPE下,target="_blank"、target="_self"等等语法都是无效的,我们只能通过JavaScr

Javascript的匿名函数讲解 一、什么是匿名函数?在Javascript定义一个函数一般有如下三种方式:函数关键字(function)语句:functionfnMethodName(x){alert(x);}函数字面量(FunctionLiterals):varfn

Firefox2中输入框丢失光标bug的解决方法 虽然庆幸的是Firefox3中解决了这个bug,但Firefox3还在beta阶段,取代Firefox2还是需要一些时间的,下面就来仔细说一下这个问题:一、样式为{position:absolute;

标签: css在ie失效

本文链接地址:https://www.jiuchutong.com/biancheng/375254.html 转载请保留说明!

上一篇:用CSS实现的一张图完成的按钮效果(用css制作网页的步骤)

下一篇:网页打开新窗口target=_blank不符合标准(网页打开新窗口怎么关闭)

  • 工程预付款的支付要求
  • 增值税专票税率1%
  • 一般纳税人提供服务税率
  • 没有数字的公章有效吗三方协议盖的章没有数字
  • 政府发放的人才补贴,企业可以增加条款要求离职返还吗
  • 非盈利组织的银行是什么
  • 金蝶以前年度损益调整属于哪类科目
  • 临时税务登记可以开发票吗
  • 公司未开展业务就没有债权债务吗
  • 公司拓展训练入什么会计科目核算做分录?
  • 无法支付的应付款怎么处理
  • 福利费不交个人所得税会怎么样
  • 同一套房
  • 一般纳税人贸易公司每个月最低费用多少
  • 什么时候需要计算环境熵变
  • 关于补充养老保险
  • 跨行转账16万手续费多少
  • 工会开发票有税号吗?
  • 实收资本的会计处理
  • 公司缴纳社保部分从个人扣除 犯法吗
  • 预提费用年底必须结转吗
  • 未承兑的商业汇票什么意思
  • 小规模租赁收入申报流程
  • 补贴收入是否缴税
  • 非现金资产包括
  • 起诉销售
  • 公司增资减资法条
  • win11本地用户和组
  • 如何预防电脑症候群的发生
  • 固定资产账面价值在什么情况下会出现负值
  • 民间非营利组织会计制度及操作实务
  • 房子按季度收取租金,怎么交房产税
  • 我公司对某公司作如下措施
  • 当期费用包括哪些科目
  • dpi鼠标按键是什么意思
  • 费用发票开的是跨年的账务处理
  • php rewrite
  • 转让股权怎么做会计分录
  • 社保缴纳基数相差多少
  • 劳务派遣发票会扣税吗
  • 其他应收个人贷方余额表示什么意思
  • PHP:imagecopymerge()的用法_GD库图像处理函数
  • 所得税分配表分录怎么写
  • thinkphp yii
  • thinkphp模板引擎原理
  • docker的常用命令汇总
  • 用命令ls-al显示出文件ff
  • 策划费多少钱
  • 多付款退回怎样写说明
  • python监控模块
  • 年底进项税额比年初多
  • 积分兑换业务有风险吗
  • 基本工资是包括哪些内容
  • 企业间借款利息可以开专票吗
  • 营改增之后建筑业预收账款是否需要预交税款
  • 公司收到服务费要交哪些税
  • 增值税普票没有发票章可以吗
  • 失控发票已补交什么意思
  • 主营业务成本账户属于什么账户
  • 房产税税率采用比例税率按照房产余值计征的年税率为
  • 没有按时对账
  • 施工企业人工费控制措施
  • 3%税率专票为什么不能抵扣
  • 计费销售额如何计税
  • 未分配利润属于总账科目吗
  • 企业如何科学设计产品
  • fedora gnome
  • win8在哪里卸载软件
  • 笔记本不支持win8
  • Linux中systemd target命令使用详解
  • 龙芯芯片组
  • ES6 javascript中Class类继承用法实例详解
  • jquery点击切换div
  • ubuntu用root运行
  • python3 栈
  • python 安装setup
  • 五个常用的视频格式及其特点
  • unity资源包管理器
  • 浅谈python
  • 安徽残疾人补助过年有多少钱
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设