让FireFox与IE兼容 CSS常见问题大全

开发 前端
在前端开发中,我们经常遇到浏览器的兼容性问题,特别是IE与FireFox之间,文章列举了常见的一些CSS兼容性问题,及相关的解决方法。

在前端开发中,我们经常遇到浏览器的兼容性问题,特别是IE与FireFox之间。文章列举了开发人员比较常见的FireFox与IE之间的兼容性问题,同时给出了相关的解决方法。

51CTO相关阅读:CSS hack:实现IE6、IE7、Firefox兼容

1.超链接访问过后hover样式就不出现的问题

被点击访问过的超链接样式不在具有hover和active了,很多人应该都遇到过这个问题,解决方法是改变CSS属性的排列顺序: L-V-H-A:

  1. <style type="text/css">     
  2. <!--      
  3. a:link {}     
  4. a:visited {}     
  5. a:hover {}     
  6. a:active {}     
  7. -->     
  8. </style>    
  9.  
  10. <style type="text/css"> 
  11. <!--   
  12. a:link {}  
  13. a:visited {}  
  14. a:hover {}  
  15. a:active {}  
  16. --> 
  17. </style> 

2.FireFox下如何使连续长字段自动换行

众所周知IE中直接使用 word-wrap:break-word 就可以了, FF中我们使用JS插入&#10;的方法来解决:

  1. <style type="text/css">     
  2. <!--      
  3. div {     
  4.     width:300px;     
  5.     word-wrap:break-word;     
  6.     border:1px solid red;     
  7. }     
  8. -->     
  9. </style>     
  10. <div id="ff">aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa     
  11. aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa     
  12. aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa     
  13. aaaaaaaaaaaaaaaaaaaaaaaaaaa</div>    
  14.  
  15. <style type="text/css"> 
  16. <!--   
  17. div {  
  18.     width:300px;  
  19.     word-wrap:break-word;  
  20.     border:1px solid red;  
  21. }  
  22. --> 
  23. </style> 
  24. <div id="ff">aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa  
  25. aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa  
  26. aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa  
  27. aaaaaaaaaaaaaaaaaaaaaaaaaaa</div> 
  28. Java代码   
  29. <scrīpt type="text/javascrīpt">     
  30. /* <![CDATA[ */    
  31. function toBreakWord(el, intLen){     
  32.     var ōbj=document.getElementById(el);     
  33.     var strContent=obj.innerHTML;       
  34.     var strTemp="";     
  35.     while(strContent.length>intLen){     
  36.         strTemp+=strContent.substr(0,intLen)+"&#10;";       
  37.         strContent=strContent.substr(intLen,strContent.length);       
  38.     }     
  39.     strTemp+="&#10;"+strContent;     
  40.     obj.innerHTML=strTemp;     
  41. }     
  42. if(document.getElementById  &&  !document.all)  toBreakWord("ff", 37);     
  43. /* ]]> */    
  44. </script>    
  45.  
  46. <scrīpt type="text/javascrīpt"> 
  47. /* <![CDATA[ */  
  48. function toBreakWord(el, intLen){  
  49.     var ōbj=document.getElementById(el);  
  50.     var strContent=obj.innerHTML;    
  51.     var strTemp="";  
  52.     while(strContent.length>intLen){  
  53.         strTemp+=strContent.substr(0,intLen)+"&#10;";    
  54.         strContent=strContent.substr(intLen,strContent.length);    
  55.     }  
  56.     strTemp+="&#10;"+strContent;  
  57.     obj.innerHTML=strTemp;  
  58. }  
  59. if(document.getElementById  &&  !document.all)  toBreakWord("ff", 37);  
  60. /* ]]> */  
  61. </script> 

3.ff下为什么父容器的高度不能自适应

在子容器加了浮动属性后,该容器将不能自动撑开,解决方法是在标签结束后加上一个清除浮动的元素。

  1. clear: both;    
  2. clear: both; 

4.IE6的双倍边距BUG

浮动后本来外边距10px,但IE解释为20px,解决办法是加上:

  1. display: inline    
  2. display: inline 

5. IE6下绝对定位的容器内文本无法正常选择的问题

此问题在IE6、7中存在,解决问题的办法是让IE进入到qurks mode。

6. IE6下为什么图片下方有空隙产生

解决这个BUG的方法也有很多,可以是改变html的排版,或者设置img 为display:block 或者设置vertical-align 属性为vertical-align:top | bottom |middle |text-bottom
都可以解决.

7. IE6下两个层中间怎么有间隙

这个IE的3PX BUG也是经常出现的,解决的办法是给.right也同样浮动 float:left 或者相对IE6定义.left margin-right:-3px;

8. list-style-image无法准确定位的问题

list-style-image的定位问题也是经常有人问的,解决的办法一般是用li的背景模拟,这里采用相对定位的方法也可以解决。

9. LI中内容超过长度后以省略号显示的方法

此方法适用与IE与OP浏览器:

  1. <style type="text/css">     
  2. <! --      
  3. li {     
  4.     width: 200px;     
  5.     white-space:nowrap;     
  6.     text-overflow:ellipsis;      
  7.     -o-text-overflow:ellipsis;      
  8.     overflow: hidden;     
  9.     }     
  10. -->     
  11. </style>    
  12.  
  13. <style type="text/css"> 
  14. <! --   
  15. li {  
  16.     width: 200px;  
  17.     white-space:nowrap;  
  18.     text-overflow:ellipsis;   
  19.     -o-text-overflow:ellipsis;   
  20.     overflow: hidden;  
  21.     }  
  22. --> 
  23. </style> 

#p#

10.web标准中定义id与class有什么区别吗

一.web标准中是不容许重复ID的。

比如 div id="aa"  不容许重复2次,而class 定义的是类,理论上可以无限重复, 这样需要多次引用的定义便可以使用他.

二.属性的优先级问题。

ID 的优先级要高于class,看上面的例子。

三.方便JS等客户端脚本。

如果在页面中要对某个对象进行脚本操作,那么可以给他定义一个ID,否则只能利用遍历页面元素加上指定特定属性来找到它,这是相对浪费时间资源,远远不如一个ID来得简单.

11.如何垂直居中文本

将元素高度和行高设为一致。

  1. <style type="text/css">     
  2. <!--      
  3. div {     
  4.     height:30px;     
  5.     line-height:30px;     
  6.     border:1px solid red     
  7.     }     
  8. -->     
  9. </style>    
  10.  
  11. <style type="text/css"> 
  12. <!--   
  13. div {  
  14.     height:30px;  
  15.     line-height:30px;  
  16.     border:1px solid red  
  17.     }  
  18. --> 
  19. </style> 

 

12.如何对齐文本与文本输入框

  1. 加上vertical-align:middle;   
  2.  
  3. <style type="text/css">     
  4. <!--      
  5. input {     
  6.     width:200px;     
  7.     height:30px;     
  8.     border:1px solid red;     
  9.     vertical-align:middle;     
  10. }      
  11. -->     
  12. </style>    
  13.  
  14. <style type="text/css"> 
  15. <!--   
  16. input {  
  17.     width:200px;  
  18.     height:30px;  
  19.     border:1px solid red;  
  20.     vertical-align:middle;  
  21. }   
  22. --> 
  23. </style> 

13.为什么FF下面不能水平居中呢

FF下面设置容器的左右外补丁为auto就可以了。

  1. <style type="text/css">     
  2. <!--      
  3. div {     
  4.     margin:0 auto;     
  5. }     
  6. -->     
  7. </style>    
  8.  
  9. <style type="text/css"> 
  10. <!--   
  11. div {  
  12.     margin:0 auto;  
  13. }  
  14. --> 
  15. </style> 

14.为什么FF下文本无法撑开容器的高度

标准浏览器中固定高度值的容器是不会象IE6里那样被撑开的,那我又想固定高度,又想能被撑开需要怎样设置呢?办法就是去掉height设置min-height:200px;  这里为了照顾不认识min-height的IE6 可以这样定义:

  1. {     
  2. height:auto!important;     
  3. height:200px;     
  4. min-height:200px;     
  5. }    
  6.  
  7. {  
  8. height:auto!important;  
  9. height:200px;  
  10. min-height:200px;  
  11. }  

15.为什么IE6下容器的宽度和FF解释不同呢

  1. <?xml version="1.0" encoding="gb2312"?>     
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">     
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />     
  4. <style type="text/css">     
  5. <!--     
  6. div {     
  7.     cursor:pointer;     
  8.     width:200px;     
  9.     height:200px;     
  10.     border:10px solid red     
  11.     }     
  12. -->     
  13. </style>     
  14. <div ōnclick="alert(this.offsetWidth)">web标准常见问题大全</div>    
  15.  
  16. <?xml version="1.0" encoding="gb2312"?> 
  17. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
  18. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 
  19. <style type="text/css"> 
  20. <!--  
  21. div {  
  22.     cursor:pointer;  
  23.     width:200px;  
  24.     height:200px;  
  25.     border:10px solid red  
  26.     }  
  27. --> 
  28. </style> 
  29. <div ōnclick="alert(this.offsetWidth)">web标准常见问题大全</div> 

问题的差别在于容器的整体宽度有没有将边框(border)的宽度算在其内,这里IE6解释为200PX ,而FF则解释为220PX,那究竟是怎么导致的问题呢?大家把容器顶部的xml去掉就会发现原来问题出在这,顶部的申明触发了IE的qurks mode。

16.为什么web标准中IE无法设置滚动条颜色了

解决办法是将body换成html:

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">     
  2. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />     
  3. <style type="text/css">     
  4. <!--      
  5. html {     
  6.     scrollbar-face-color:#f6f6f6;     
  7.     scrollbar-highlight-color:#fff;     
  8.     scrollbar-shadow-color:#eeeeee;     
  9.     scrollbar-3dlight-color:#eeeeee;     
  10.     scrollbar-arrow-color:#000;     
  11.     scrollbar-track-color:#fff;     
  12.     scrollbar-darkshadow-color:#fff;     
  13.     }     
  14. -->     
  15. </style>    
  16.  
  17. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
  18. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 
  19. <style type="text/css"> 
  20. <!--   
  21. html {  
  22.     scrollbar-face-color:#f6f6f6;  
  23.     scrollbar-highlight-color:#fff;  
  24.     scrollbar-shadow-color:#eeeeee;  
  25.     scrollbar-3dlight-color:#eeeeee;  
  26.     scrollbar-arrow-color:#000;  
  27.     scrollbar-track-color:#fff;  
  28.     scrollbar-darkshadow-color:#fff;  
  29.     }  
  30. --> 
  31. </style> 

#p#

17.为什么我定义的样式没有作用呢

这里你无法用.aa定义到li 遇到这种情况怎么解决呢?答案是提高.aa 的优先权。

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">     
  2. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />     
  3. <style type="text/css">     
  4. <!--     
  5. #aa ul li {     
  6.     color:red     
  7.     }     
  8. .aa {     
  9.     color:blue     
  10.     }     
  11. -->     
  12. </style>     
  13. <div id="aa">     
  14. <ul>     
  15. <li class="aa">     
  16. web标准常见问题大全  
  17. </li>     
  18. </ul>     
  19. </div>    
  20.  
  21. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
  22. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 
  23. <style type="text/css"> 
  24. <!--  
  25. #aa ul li {  
  26.     color:red  
  27.     }  
  28. .aa {  
  29.     color:blue  
  30.     }  
  31. --> 
  32. </style> 
  33. <div id="aa"> 
  34. <ul> 
  35. <li class="aa"> 
  36. web标准常见问题大全  
  37. </li> 
  38. </ul> 
  39. </div> 

18.为什么无法定义1px左右高度的容器

IE6下这个问题是因为默认的行高造成的,解决的方法也有很多,例如:

  1. overflow:hidden | zoom:0.08 | line-height:1px
  2.   

19.为什么这个背景颜色无法显示

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">     
  2. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />     
  3. <style type="text/css">     
  4. <!--      
  5. ul {     
  6.     background:red     
  7.     }     
  8. li {     
  9.     float:left;     
  10.     width:180px;     
  11.     }     
  12. -->     
  13. </style>     
  14. <!--[if lte IE 6]>     
  15. <style>     
  16. .gainlayout { height: 1px; }     
  17. </style>     
  18. <![endif]-->       
  19. <ul class="gainlayout">     
  20. <li>web标准常见问题大全</li>     
  21. <li>web标准常见问题大全</li>     
  22. <li>web标准常见问题大全</li>     
  23. <li>web标准常见问题大全</li>     
  24. <li>web标准常见问题大全</li>     
  25. <div style="clear:both"></div>     
  26. </ul>    
  27.  
  28. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
  29. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 
  30. <style type="text/css"> 
  31. <!--   
  32. ul {  
  33.     background:red  
  34.     }  
  35. li {  
  36.     float:left;  
  37.     width:180px;  
  38.     }  
  39. --> 
  40. </style> 
  41. <!--[if lte IE 6]> 
  42. <style> 
  43. .gainlayout { height: 1px; }  
  44. </style> 
  45. <![endif]-->    
  46. <ul class="gainlayout"> 
  47. <li>web标准常见问题大全</li> 
  48. <li>web标准常见问题大全</li> 
  49. <li>web标准常见问题大全</li> 
  50. <li>web标准常见问题大全</li> 
  51. <li>web标准常见问题大全</li> 
  52. <div style="clear:both"></div> 
  53. </ul> 
  54.  
  55. <!--[if lte IE 6]>     
  56. <style>     
  57. .gainlayout { height: 1px; }     
  58. </style>     
  59. <![endif]-->      
  60.  
  61. <!--[if lte IE 6]> 
  62. <style> 
  63. .gainlayout { height: 1px; }  
  64. </style> 
  65. <![endif]-->   

20.怎么样才能让层显示在FLASH之上呢

  1. 解决的办法是给FLASH设置透明:  
  2. <param name="wmode" value="transparent" />
  3.   

21.怎样使一个层垂直居中于浏览器中

这里我们使用百分比绝对定位,与外补丁负值的方法,负值的大小为其自身宽度高度除以二:

  1. <style type="text/css">     
  2. <!--      
  3. div {     
  4.     position:absolute;     
  5.     top:50%;     
  6.     left:50%;     
  7.     margin:-100px 0 0 -100px;     
  8.     width:200px;     
  9.     height:200px;     
  10.     border:1px solid red;     
  11.     }     
  12. -->     
  13. </style>    
  14.  
  15. <style type="text/css"> 
  16. <!--   
  17. div {  
  18.     position:absolute;  
  19.     top:50%;  
  20.     left:50%;  
  21.     margin:-100px 0 0 -100px;  
  22.     width:200px;  
  23.     height:200px;  
  24.     border:1px solid red;  
  25.     }  
  26. --> 
  27. </style> 

22 .图片垂直与容器内

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">     
  2. <style type="text/css">     
  3. <!--      
  4. * {margin:0;padding:0}     
  5. div {     
  6.     width:500px;     
  7.     height:500px;     
  8.     border:1px solid #ccc;     
  9.     overflow:hidden;     
  10.     position:relative;     
  11.     display:table-cell;     
  12.     text-align:center;     
  13.     vertical-align:middle     
  14.     }     
  15. div p {     
  16.     position:static;     
  17.     +position:absolute;     
  18.     top:50%     
  19.     }     
  20. img {     
  21.     position:static;     
  22.     +position:relative;     
  23.     top:-50%;left:-50%;     
  24.     width:276px;     
  25.     height:110px     
  26.     }     
  27. -->     
  28. </style>     
  29. <div><p><img src="logo.gif" /></p></div>    
  30.  
  31. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
  32. <style type="text/css"> 
  33. <!--   
  34. * {margin:0;padding:0}  
  35. div {  
  36.     width:500px;  
  37.     height:500px;  
  38.     border:1px solid #ccc;  
  39.     overflow:hidden;  
  40.     position:relative;  
  41.     display:table-cell;  
  42.     text-align:center;  
  43.     vertical-align:middle  
  44.     }  
  45. div p {  
  46.     position:static;  
  47.     +position:absolute;  
  48.     top:50%  
  49.     }  
  50. img {  
  51.     position:static;  
  52.     +position:relative;  
  53.     top:-50%;left:-50%;  
  54.     width:276px;  
  55.     height:110px  
  56.     }  
  57. --> 
  58. </style> 
  59. <div><p><img src="logo.gif" /></p></div> 

或者使用背景图的办法:

  1. background:url("logo.gif") center no-repeat; 
  2.  

23.如何让div横向排列

横向排列DIV可以使用浮动的方式比如float:left,或者设置对象为内联,还可以绝对定位对象等等。

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">     
  2. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />     
  3. <style type="text/css">     
  4. <!--      
  5. div {     
  6.     float:left;     
  7.     width:200px;     
  8.     height:200px;     
  9.     border:1px solid red     
  10.     }     
  11. -->     
  12. </style>  

 

【编辑推荐】

  1. CSS规范:你真的了解盒模型吗?
  2. DIV+CSS中常见十大错误总结
  3. CSS hack:实现IE6、IE7、Firefox兼容 
责任编辑:王晓东 来源: javaeye博客
相关推荐

2010-09-01 14:51:12

CSSIEFirefox

2010-09-01 15:16:47

CSSIEFirefox

2010-08-19 17:06:16

IEFirefox

2010-08-31 09:24:29

FireFoxIECSS

2010-08-27 15:08:10

FirefoxIE6IE7

2010-09-15 11:26:05

IE火狐CSS兼容性

2010-09-06 15:06:29

IE6IE7Firefox

2010-08-19 16:06:15

2010-08-18 15:02:54

IEFirefox兼容

2010-08-18 15:22:28

IE6IE7Firefox

2010-09-15 09:21:11

IEirefoxJavascript

2010-09-16 13:17:31

IE6IE7IE8

2010-01-06 16:23:45

Linux常见问题

2010-08-30 09:35:35

IE6IE7Firefox

2010-08-27 15:38:21

兼容IE6IE7

2010-09-16 13:33:47

IE6IE7IE8

2010-08-18 15:57:14

IE6IE7IE8

2010-08-23 09:23:48

IEFirefox兼容性

2009-10-26 11:11:22

接入网常见问题

2011-03-29 13:23:54

CACTI
点赞
收藏

51CTO技术栈公众号