IE CSS Bug系列:32样式限制

开发 前端
IE 浏览器不支持很多 CSS 属性是出了名的,即便在支持的部分中,也是有很多 Bug 的。Zoffix Znet 整理了 IE 中的 CSS 问题,有简单的问题示例,也有解决方法。 这个系列共有 58 个指南,70 个解决方案。

受影响的版本

IE6IE7IE8(译者注:在IE9中切换浏览器版本为789均出现此bug,在IE11中切换浏览器版本均没有出现该bug,这个…..仅供参考)

表现

排在第32个(及之后的)样式会被忽略(例如<style><link>@import

教程日期

2009 8.12 14:58:58 星期三

描述

如果你正在维护一个网站,里面包含了很多第三方的广告或应用程序,这些第三方的东西会依赖于他们自己的<style>(<link>)元素,本文中的bug就会令你抓狂…..我这里说的很多意思是32个。让我们来看看下面的演示,然后我再解释。

演示

由于该bug的天然特性,这个演示在一个单独的页面上:

HTML Code

  1. <style type="text/css"></style> <!--1--> 
  2. <style type="text/css"></style> <!--2--> 
  3. <style type="text/css"></style> <!--3--> 
  4. <style type="text/css"></style> <!--4--> 
  5. <style type="text/css"></style> <!--5--> 
  6. <style type="text/css"></style> <!--6--> 
  7. <style type="text/css"></style> <!--7--> 
  8. <style type="text/css"></style> <!--8--> 
  9. <style type="text/css"></style> <!--9--> 
  10. <style type="text/css"></style> <!--10--> 
  11. <style type="text/css"></style> <!--11--> 
  12. <style type="text/css"></style> <!--12--> 
  13. <style type="text/css"></style> <!--13--> 
  14. <style type="text/css"></style> <!--14--> 
  15. <style type="text/css"></style> <!--15--> 
  16. <style type="text/css"></style> <!--16--> 
  17. <style type="text/css"></style> <!--17--> 
  18. <style type="text/css"></style> <!--18--> 
  19. <style type="text/css"></style> <!--19--> 
  20. <style type="text/css"></style> <!--20--> 
  21. <style type="text/css"></style> <!--21--> 
  22. <style type="text/css"></style> <!--22--> 
  23. <style type="text/css"></style> <!--23--> 
  24. <style type="text/css"></style> <!--24--> 
  25. <style type="text/css"></style> <!--25--> 
  26. <style type="text/css"></style> <!--26--> 
  27. <style type="text/css"></style> <!--27--> 
  28. <style type="text/css"></style> <!--28--> 
  29. <style type="text/css"></style> <!--29--> 
  30. <style type="text/css"></style> <!--30--> 
  31. <style type="text/css"></style> <!--31--> 
  32. <style type="text/css">p { border: 5px solid #000; }</style> <!--32--> 
  33.   
  34. <p>I should have borders!</p> 

解决方案

以下是针对此bug的解决方案

方案(伪bug)

教程日期

2009 8.12 15:28:11 周三

修复版本

所有受影响的版本

描述

如果你在实际网站开发中遇到了这个问题,你也许不能选择用“更少的样式标签”,解决方案可能会变得更复杂。基于那个事实,在修正的演示中,我会展示达到限制条件的情况:

由于该bug的天然特性,这个演示在一个单独的页面上:(译者注:此处的页面链接有错误,跟前一个演示链接是一样的,明显和下面的html代码不符)

HTML 代码:

  1. <style type="text/css">p { border: 5px solid #000; }</style> <!--1--> 
  2.   
  3. <p>I should have borders!</p> 

如果你不能采取“使用更少的样式标签”的解决办法,问题就会变得更复杂。最好的方案就是采用一个后处理,将超量的样式进行合并放入一个style里(如将多个<style>元素中的样式放入一个<style>元素中)。

如果<style>元素中的内容是静态的,你可以简单地复制代码并将它放在限制标签前面的<link>/<style>元素中。

如果你已经火烧眉毛,需要一个快速修复方法的话,下面是我在the page where I found the bug找到的一段jQuery代码,我没有测试过这段代码,所以使用者风险自负哦~代码是这样的:

  1. $(document).ready(function(){ 
  2.   // If msie and we have more than the allotted stylsheets... 
  3.   if ( $.browser.msie && $('style').length != document.styleSheets.length ) { 
  4.     var ssAry = $('style'); 
  5.     // Loop through the extra stylesheets not read and apply the styles found 
  6.     for ( var i = document.styleSheets.length; i < ssAry.length; i++ ) { 
  7.       var cssText = ssAry[ i ].innerHTML; 
  8.       // Replace newlines and then comments 
  9.       cssTextcssText = cssText.replace(/[\n\r]/g, ""); 
  10.       cssTextcssText = cssText.replace(/\/\*\**[^\*\/]*\*\//g, ""); 
  11.   
  12.       // Loop over all CSS selector groups... 
  13.       var regex = new RegExp(/{[^}]*}/); 
  14.       for ( var value = regex.exec( cssText ); value; value = regex.exec( cssText ) ) { 
  15.         // Split the css grouping into the selector and the CSS properties 
  16.         var pair = cssText.substring( 0, regex.lastIndex ) 
  17.                           .replace(/}/g, "").split(/{/); 
  18.         // Add it to the last DOM stylesheet 
  19.         document.styleSheets[ document.styleSheets.length - 1 ].addRule( 
  20.           pair[ 0 ].replace(/^\s+|\s+$/g, ""), 
  21.           pair[ 1 ].replace(/^\s+|\s+$/g, "") 
  22.         ); 
  23.         // Strip off the applied CSS 
  24.         cssTextcssText = cssText.substring( regex.lastIndex ); 
  25.       } 
  26.     } 
  27.   } 
  28. }); 

请注意,你不应使用这段代码作为此问题的永久性修复方案。

原文链接:http://haslayout.net/css/32-Styles-Limitation

译文链接:http://blog.jobbole.com/48353/

责任编辑:陈四芳 来源: 伯乐在线
相关推荐

2013-10-31 11:12:56

IECSS

2013-10-30 09:57:43

IECSS

2013-09-09 10:51:07

CSSIE浏览器

2013-10-31 10:59:23

IECSS

2013-10-29 15:20:38

IECSS

2010-08-19 14:19:12

IE6IE7IE8

2013-10-29 10:32:59

IECSS

2010-08-27 14:55:23

IE6IE7IE8

2010-08-19 16:53:10

IE6IE7Firefox

2009-08-13 10:12:07

IE的CSS Bug

2010-08-27 15:08:10

FirefoxIE6IE7

2010-08-17 15:38:49

CSS兼容IE7IE8

2010-09-03 09:55:10

CSS伪类hover

2010-09-08 11:23:27

2010-08-20 11:24:44

IE7IE8CSS

2009-09-18 16:15:25

CSS样式属性

2010-12-21 14:59:10

CSS 3IE

2010-08-19 09:02:06

2017-07-20 11:11:39

前端CSS书写规范

2022-12-13 07:41:43

CSSCSS Houdi
点赞
收藏

51CTO技术栈公众号