Firefox 与 IE 对CSS的兼容性探讨

[ 202 查看 / 3 回复 ]

1. CSS样式兼容性问题的出现 2. CSS样式调试工具 3. Firefox与IE的Hack介绍 4. CSS样式兼容性问题分类 5. CSS兼容性案例分析及解决方案 5.1. margin-left双倍显示 5.2. table、form、div自适应 5.3. IE里div下的img默认有空格 5.4. 空格大小 5.5. IE里div里默认line-height 5.6. div居中center 5.7. table的padding 5.8. tr和td的border 5.9. width和height的计算 5.10. 链接a里面div 5.11. cursor不一致 6. 总结
1. CSS样式兼容性问题的出现


关于FireFox和IE6对CSS样式的兼容性差异由来已久,它们对标准兼容的差异性,导致了大量网站开发人员的工作量加倍,不得已煞费苦心的在Firefox和IE间进行调试,对于以前很少有关注过CSS样式浏览器兼容性问题的开发人员来说,更是一件雪上加霜的事情,原本调CSS就是一件很烦的事情,再加上兼容性问题的阻碍,使很多开发人员咬牙切齿,却也无可奈何。

2. CSS样式调试工具


有句话说得好,工欲善其事,必先利其器。作为一名IT开发人员来说那就是欲想编程好,必先工具好。在C++方面有Microsoft Studio的支持,在Java方面有eclipse的支持,而对于市面上调试CSS样式的工具却不是很多,但现有的工具也基本上满足我们的需求。首先介绍FireFox下的调试工具Firebug,这一款非常优秀的调试工具,不仅对CSS样式的调试起了所见即所得的功效,同时还支持JS的调试,DOM查看器,控制台,可编辑Html及网络状况监视器等(JS等方面请查看其他相关文档)。对于开发人员来说,有如此好的调试工具,当然是不容错过的一件事情。IE6下也提供了一款CSS样式调试工具IE DevToolbar,这款工具相对来说功能相对单一,但为了在IE上也能够进行CSS进行调试,这款工具也勉强派得上用场了。 由于对标准支持的不统一,IE对浏览器领域统治多年,产生了自己的一套标准,而兴起的Firefox及Google的Chrome则是对原有的标准进行了支持,所以两者之间的冲突在所难免。现在以实例方式来说明两种浏览器之间的差异,并提供相应的解决方法。希望在浏览器CSS样式兼容性上有需要的朋友可以得到帮助。

3. Firefox与IE的Hack介绍


Hack是指浏览器对CSS样式某些标志的识别,通过这些识别,同一CSS属性我们可以为不同的浏览器指定不同的CSS样式,以规避浏览器不同带来的差异。 首先介绍“!important”,这是我们最常使用的Hack标识,记住,需要“!”作为开头,比如“width0!important;”。这是一个IE7和Firefox都能够识别的标志,加上这个标志等于相同的CSS属性上,IE7或者Firefox会优先读取这个属性,所以当需要区别IE6和Firefox样式时可以使个标志。这也是最常用的Hack,因为IE7和Firefox支持的CSS样式标准基本一样,所以对CSS样式的兼容也基本上相同。 其次是介绍“*”,这是一个IE能够识别的标签,而Firefox无法识别的标签,在Firefox上忽略由该标志指定的CSS样式。所以当需要区别IE7和Firefox时可以使用如:“*width0!important”,这也是IE6无法识别的标签。
Table 1. IE6,IE7,Firefox的对于Hack标志区别
 IE6IE7FireFox
*YYN
!importantNYY
_YNN


通过这个表格,我们找到了一种同时区别三种浏览器对CSS支持的方法: 如“width0px;*width:60px;_width:100px;” 希望这个好的建议可以给大学解决浏览器间的CSS样式差异提供帮助。

4. CSS样式兼容性问题分类


总结来说CSS样式兼容性问题总共有三大类: 第一类为大小显示不一致:如margin-left或者height双倍显示,空格显示等; 第二类为位置显示不一致:如div居中显示,td默认内容位置等; 第三类则比较零散,需要在特定的场景才会出现,而特定的场景往往比较复杂,所以这里只给出建议,当遇到类似问题时,不妨参考一下解决方法,以找到正确设置CSS样式一致的方案。 现举例,一一说明问题的由来,并提供重现代码,以供读者更清晰的了解导致问题的原因,以找到更好的解决方案,其中margin-left双倍显示,table、form、div自适应,table的padding,width和height的计算是经常遇到的问题。

5. CSS兼容性案例分析及解决方案


现在就CSS这三类在项目中遇到的问题进行重现,并提出相应的解决方案。
5.1. margin-left双倍显示


margin-left在IE下双倍显示是IE裡面的一个bug,在很多种情况下会出现这种情况。现在列举一种最常见的是在两个都是float:left的Div旁,那么margin-left在IE里显示的就是两倍的。
<div style="border:1px solid #cccccc;width:600px;height:500px;float:left;">    <div style="border:1px solid #00cccc;width:100px;height:100px;float:left;margin-left:50px;">    </div></div>
解决方法: 通过CSS的Hack标志加上“!important”来标识Firefox读取这个属性值优先,而IE6不认识这个标识,所以FireFox读取的属性是“margin-left:50px;”,而IE6则读取“margin-left:25px”,当IE6的margin-left显示双倍时,就得到了50px,从而避开IE6的这个bug,达到两个浏览器的CSS样式兼容。(在后面的例子中,解决方法也基本类似,主要是把关键代码标上特殊颜色,供读者参考)。
<div style="border:1px solid #cccccc;width:600px;height:500px;float:left;">    <div style="border:1px solid #00cccc;width:100px;height:100px;float:left;margin-left:50px!important;margin-left:25px;">    </div></div>
5.2. table、form、div自适应


在firefox里面,form里面的内容超出form的容量时也不会自动扩展form、table及div的内容,而在IE里,table、form或者div里面的内容超出宽度时,则自动扩展外层的table、form及div,所以当我们从firefox上切换到IE6时这个问出现得比较多。
<table style="height:100px;width: 80px;border:1px solid #00FF00">    <tr><td>        <form style="border:1px solid #CCCCCC;width0px;height0px;">            <input type="text"/>        </form>    </td></tr></table>
解决办法: (1).固定外层table、form或者div的宽度或者高度适应内层的内容
<table style="height:100px;width:180px;border:1px solid #00FF00">    <tr><td>        <form style="border:1px solid #CCCCCC;width:170px;height:80px;">            <input type="text"/>        </form>    </td></tr></table>(2).缩小里面的内容,小于table、form或者是div的宽度或者高度
<table style="height:100px;width: 80px;border:1px solid #00FF00">    <tr><td>        <form style="border:1px solid #CCCCCC;width:80px;height:80px;">            <input type="text" style="width:60px"/>        </form>    </td></tr></table>
5.3. IE里div下的img默认有空格


这个问题是当初在设计导航条时遇到的问题,导航条很多时候就是横向一排div,每个div里面都是图片,就会在IE下产生了多了一点小空格的问题。
<div style="border:1px solid #FF0000;height:132px;width:100px;">    <img src="img/om.gif"/></div>
解决办法: (1)、将div下的font-size设置为0
<div style="border:1px solid #FF0000;height:132px;width:100px;font-size:0px">    <img src="img/om.gif"/></div>(2)、整合div里面的内容,使其没有空格,这样也可以使内容紧凑,这里可以看IE里面没有忽略img旁边的空格导致的问题
<div style="border:1px solid #FF0000;height:132px;width:100px; "><img src="img/om.gif"/></div>
5.4. 空格大小


默认字本显示问题,导致 显示的大小不一致,当你使用了 造成问题时请注意。
<table>    <tr>        <td>中华人民共      和国</td>    </tr></table>

5.5. IE里div里默认line-height


在IE里Div设置至少有一个line-height所以显示的时候IE下的div显示无法显示等于10px。
<div style="margin-left: 15px; border: 1px solid #FF0000; width: 60px; height: 40px;">    <div style="margin-left: 15px; border: 1px solid #FF0000; width: 20px; height: 10px;">    </div></div>
解决方法: 设置div层里的字体大小为0,则div的高度可以自由设置。
<div style="margin-left: 15px; border: 1px solid #FF0000; width: 60px; height: 40px;">    <div style="margin-left: 15px; border: 1px solid #FF0000; width: 20px;height:10px;font-size:0px;">    </div></div>
5.6. div居中center


当设置了“margin-left:auto;margin-right:auto”后,Firefox里的可以居中显示div,而IE上则不可以显示居中。
<div style="width:400px;height:80px;border:1px solid #FE871A;margin-left:auto;margin-right:auto;">    测试div上内容显示的位置</div>
这个问题我尚未有解决办法,所以,在使用div居中时,请注意这个问题,或者可以考虑使用table替换,不要被div居中困扰,希望能对你有帮助。

5.7. table的padding


这个问题也是我们经常遇到的问题,因为在firefox下,table的padding实在是太好用了,当我们转到IE6上时才发现,要改过来的痛苦,所以在使用table的padding时请注意兼容问题。
<table style="width:300px;height:100px;border:8px solid #CCCCCC;padding:18px;">    <tr>        <td  style="border:1px solid #ff0000">测试Table的padding</td>    </tr></table>
解决办法: 建议在td里面使用一个div,然后设置div的margin,使其出现在td正确的位置上。
<table style="width:300px;height:100px;border:8px solid #CCCCCC;">    <tr><td>        <div style="border:1px solid #ff0000;width:200px;height:50px;margin-left:8px;">测试Table的padding</div>    </td></tr></table>
5.8. tr和td的border


先声明,这个问题的发现是在我的实际项目中遇到的,项目中是想显示一条横线,但是目前我无法重现出来,所以如果大家有遇到类似问题的时候可以参考一下。在Firefox下,显示的td的border-top的时候可以显示,而在IE6下则无法显示的问题,总结了一下是td显示边框的时候会出现的问题。所以解决办法是在td里面再设置一个div来进行显示。
<table>  <tr><td style="width:300px;height:1px;border-top:1px solid #ff0000">  </td></tr></table>解决办法:
<table>    <tr><td>      <div style="width:300px;height:1px;border-top:1px solid #ff0000"></div>    </td></tr></table>
5.9. width和height的计算


这个问题应该是大部分人都会遇到的了,先介绍一下Firefox和IE下计算width和height的方法: 在IE下: 显示宽度=marginLeft + width + marginRight; 显示高度=marginTop + height +marginBottom; 在Firefox下: 显示宽度=marginLeft + paddingLeft + borderLeft + width + marginRight + paddingRight + borderRight; 显示高度=marginTop + padingTop + borderTop + height + marginBottom + paddingBottom + borderBottom;
<div>    <div style="width:280px;margin-left:40px;padding-left:15px;border-width: 1px 20px 1px 20px;border-style: solid;border-colorFE871A">      测试width    </div>    <br/>    <div style="height:100px;width:200px;margin-top:40px;padding-top:15px;border-width:20px 1px 20px 1px;border-style:solid;border-colorCCCCCC;">        测试height    </div></div>
解决办法: 看到上面的示例后,可以选择用Hack来解决兼容性问题,
<div>    <div style="width:225px!important;width:280px;margin-left:40px;padding-left:15px;border-width:1px 20px 1px 20px;border-style: solid;border-colorFE871A">        测试width    </div>    <br/>    <div style="height:45px!important;height:100px;width:200px;margin-top:40px;padding-top:15px;border-width:20px 1px 20px 1px; border-style:solid;border-colorCCCCCC;">        测试height    </div></div>
5.10. 链接a里面div


在firefox链接里面放一个div是在点击链接时候会莫名其妙的出现两个点(在firefox3下显示得很明显),而在IE里则显示多下横线,鼠标移过时显示的图标不一致:
<table><tr><td>    <a href="#">        <div style="border: 1px #cccccc solid;height:30px;width:80px;">本地链接</div>    </a></td></tr></table>
解决办法: 在显示链接的时候设置cursor:pointer和text-decoration:underline;或者设置其他值,解决两个点的问题当然是把链接移动外面显示才是最好的解决方式,但由于特殊需要div必须放在链接里面时,目前不没有有效的解决方式。
<style type="text/css">a:hover{    cursor:pointer;}div{    text-decoration:underline;}</style>
5.11. cursor不一致


在IE中cursor:hand和cursor:pointer都显示手形,而Firefox中,cursor:hand则显示为编辑图标,只是把它当文字处理而已,若要在Firefox中显示手形,请设置cursor:pointer。
<span style="cursor:hand;">hand</span><span style="cursor:pointer;">pointer</span>


6. 总结


在CSS兼容道路上,相信前景还是很美好的,毕竟我们Microsoft在IE7和IE8支持标准的程度已经大大提高,现在写的这篇文章里只是略微阐述了对CSS兼容性的一些实践看法,希望对大家有所帮助,也希望大家提供更多的建议给我,使得本文的阐述更完善。






所有评论
exception 2009-07-02 评论道:
div 在 IE 中居中,还有个简陋的方法是设置父容器的 text-align:center。对于容器中其他不想居中的 div ,可再次设置 text-align 。
LCP 2009-06-10 评论道:
div在IE中居中可以设置align="center",但这样做的副作用是div里面的文字也会居中对齐了。另一种解决方法是设置div的margin-left=(页面的宽度-div的宽度)/2。前提是知道页面和div的宽度
mfkvfn 2009-06-09 评论道:
FireFox不支持滤镜效果 目前在IE所有版本中optgroup的样式只能改变背景色之类的,不能改变文字的样式(粗体,倾斜),想改成不倾斜的不行。在FireFox下是没有问题的。
分享 转发
TOP

CSS对浏览器器的兼容性具有很高的价值,通常情况下IE和Firefox存在很大的解析差异,这里介绍一下兼容要点。
1、DOCTYPE 影响 CSS 处理
2、FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行
3、FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中
4、FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width
5、FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式,值得注意的是,一定要将xxxx !important 这句放置在另一句之上
6、div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行
7、cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以
8、FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。
9、在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法:div{margin:30px!important;margin:28px;}
注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样:div{maring:30px;margin:28px}
重复定义的话按照最后一个来执行,所以不可以只写marginXpx!important;
10、IE5 和IE6的BOX解释不一致
IE5下div{width:300px;margin:0 10px 0 10px;}
div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以 300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改div{width:300px! important;width /**/:340px;margin:0 10px 0 10px}
关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持,如果有人理解的话,请告诉我一声,谢了!:)

11、ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义ul{margin:0;padding:0;}
就能解决大部分问题


注意事项:
1、float的div一定要闭合。
例如:(其中floatA、floatB的属性已经设置为float:left;)<#div id=\”floatA\” >
<#div id=\”floatB\” >
<#div id=\”NOTfloatC\” >
这里的NOTfloatC并不希望继续平移,而是希望往下排。
这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。
在<#div class=\”floatB\”>
<#div class=\”NOTfloatC\”>
之间加上<#div class=\”clear\”>
这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。
并且将clear这种样式定义为如下即可:.clear{clear:both;}
此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;
当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。
例如某一个wrapper如下定义:.colwrapper{
overflow:hidden;
zoom:1;
margin:5px auto;}

2、margin加倍的问题。
设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。
解决方案是在这个div里面加上display:inline;
例如:
<#div id=\”imfloat\”>
相应的css为
#IamFloat{
float:left;
margin:5px;/*IE下理解为10px*/
display:inline;/*IE下再理解为5px*/}

3、关于容器的包涵关系
很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。

4、关于高度的问题
如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)

5、最狠的手段 - !important;
如果实在没有办法解决一些细节问题,可以用这个方法.FF对于”!important”会自动优先解析,然而IE则会忽略.如下.tabd1{
background:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/
background:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}
值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过;

IE7.0出来了,对CSS的支持又有新问题。浏览器多了,网页兼容性更差了,疲于奔命的还是我们 ,为解决IE7.0的兼容问题,找来了下面这篇文章:
现在我大部分都是用!important来hack,对于ie6和firefox测试可以正常显示,但是ie7对!important可以正确解释,会导致页面没按要求显示!搜索了一下,找到一个针对IE7不错的hack方式就是使用“*+html”,现在用IE7浏览一下,应该没有问题了。
现在写一个CSS可以这样:
#example { color: #333; } /* Moz */
* html #example { color: #666; } /* IE6 */
*+html #example { color: #999; } /* IE7 */
那么在firefox下字体颜色显示为#333,IE6下字体颜色显示为#666,IE7下字体颜色显示为#999,他们都互不干扰。
---------------------------------------------------------------------------------------------------------------------------------
先温习一下对于IE的box-model的破解
IE box-model这个臭名昭著的bug存在于IE6/Win以前的每一只版本,这个虫子直到tantak发布了流传最为广泛的那个hack才开始被驯服
IE5.X/win对box-model的解析是一样的,他们认为width包括了边框(border)和补白(padding),幸运的是这个情况在IE6中有了好转
但是IE6在向后兼容的同时也包容了以前的错误,IE6其实有两个核心,在旧的页面前他仍旧表现出对错误的宽容,只有在文档中严格地加上文档类型(DOCTYPE)声明,IE6才能够接受正确的box-model
所以,tantak的hack必须和正确的DOCTYPE同时包含在文档中才能够正常工作
Quote
div.content {
width:400px; //这个是错误的width,所有浏览器都读到了
voice-family: "\"}\""; //IE5.X/win忽略了"\"}\""后的内容
voice-family:inherit;
width:300px; //包括IE6/win在内的部分浏览器读到这句,新的数值(300px)覆盖掉了旧的
}
html>body .content { //html>body是CSS2的写法
width:300px; //支持CSS2该写法的浏览器有幸读到了这一句
}
现在回到主题,我们经常看到!important和(空格)/**/:组合在一起使用,这个写法有什么奥妙呢?
看刚才那个写法,我这里可以提供另一种写法也能达到这样的效果
Quote
div.content {
width:300px !important; //这个是正确的width,大部分支持!important标记的浏览器使用这里的数值
width(空格)/**/:400px; //IE6/win不解析这句,所以IE6/win仍然认为width的值是300px;而IE5.X/win读到这句,新的数值(400px)覆盖掉了旧的,因为!important标记对他们不起作用
}
html>body .content { //html>body是CSS2的写法
width:300px; //支持CSS2该写法的浏览器有幸读到了这一句
}
同样,这个方法仍必须依靠正确的文档类型声明才能够正常工作,原因在前面已经说过。
文档类型声明就像一个开关,打开向后兼容的未来,而错误使用的话,就是一个Pandora box

---------------------------------------------------------------------------------------------------------------
ie7.0的面世,尚且不论他是否较之ie6.0进步, ie7和ie6 之间不兼容,毫无疑问又引入了新的痛处,至少在调试的过程中,又多了一道程序以及随之而来的大量不兼容。
目前,使用ie7.0的用户尚且是少数,使用ie6.0的用户仍然占据很大的比重。然而,大量通过ie6 测试的网页,在ie7.0中都显示不正常。
据ie7.0官方解说:
  ie7.0在IE6的基础上引入了strict模式,包含了许多有关于层叠样式表(CSS)解析与呈现的改进。这些改进意在提高Internet Explorer解释层叠样式表的一致性,以达到W3C的推荐的标准,同时为开发者提供一个可以依赖的功能集合。
  不管官方的语言是多么动听,也不管ie7.0是不是真的W3C了,浏览器之间太多个性化的东西,太多差异,让我们无可奈何。在ie7.0下设计出的网页,ie6下面显示的几乎是不堪入目。那么,我们在设计网页的时候,在解决好ie6.0与火狐的兼容问题的同时,我们是更多的服从符合W3C一些的ie7.0,还是对96%的ie6.0妥协?这个问题其实有些多余,我们能做的,或许只有选择中庸,只有尽量调试到各个浏览器都显示正常吧。
  ie7.0与ie6.0的之间不兼容,目前就我知道的有如下几个方面,如有遗漏或者说错了的地方,欢迎在后面补充或者纠正。

  1. ie7,ie6 div+css出现宽度定义不同
  在宽度定义上出现宽度的解释不同,IE7宽度在IE6上要宽一些,,正是这个原因网页可能会出现溢出问题, 还好这个问题可以通过更改数值或者修改一下百分比解决.

  2. ie7.0修复了!important这个bug。
  先前由于ie6.0对!important识别存在bug, 在firefox和IE中的BOX模型解释不一致导致相差2px,大部分网页标准设计师通过这个bug来兼容ie6.0和firefox,即采用:div {margin:30px!important;margin:28px;}。但是ie7.0把这个bug给修复了,所以问题又出现了,怎么兼容 ie.7.0的同时又能兼容ie6.0和firefox?

  3. Box Model的改变
  在IE7中,为了适应CSS2.1 box model修改了溢出的行为。

  4. ie7.0中一些CSS filter将不再可用
  IE7中修改了许多潜在解析错误,这些可能会阻止filter在以前的IE版本中正常工作。如:*HTML filter,下划线filter和/**/注释filter等等。

  5. ie7.0对很多不规范的css不再支持,对js语法要求更严格规范。
  很多在IE6下正常显示的js页面,在IE7下均不能正常显示,并且还没有提示错误。ie7.0对js语法要求更严格规范,只是这个规范似乎并没有说明,也没有明白的告诉大家,他们是怎么“规”怎么“范”的。
TOP

CSS 兼容要点:DOCTYPE 影响 CSS 处理
FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行
FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中
FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width
FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式
div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行
cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以
FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格XHTML+CSS兼容性解决方案小集
使用XHTML+CSS构架好处不少,但也确实存在一些问题,不论是因为使用不熟练还是思路不清晰,我就先把一些我遇到的问题写在下面。
1.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法:
Example Source Code
div{margin:30px!important;margin:28px;}
注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样:
Example Source Code
div{maring:30px;margin:28px}
重复定义的话按照最后一个来执行,所以不可以只写marginXpx!important;
2.IE5 和IE6的BOX解释不一致IE5下div{width:300px;margin:0 10px 0 10px;}div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则 是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改:
Example Source Code
div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}
关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持,如果有人理解的话,请告诉我一声,谢了!:)
3.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义
Example Source Code
ul{margin:0;padding:0;}
就能解决大部分问题
4.关于脚本,在xhtml1.1中不支持language属性,只需要把代码改为
Example Source Code
<script type="text/javascript">
TOP

很好的,我也在用,但是不太会用,拜你为师吧。
OPK  网络兼职  网上赚钱  网上创业 看养生
TOP