IE中的CSS_BUG总结.doc_第1页
IE中的CSS_BUG总结.doc_第2页
IE中的CSS_BUG总结.doc_第3页
IE中的CSS_BUG总结.doc_第4页
IE中的CSS_BUG总结.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

IE中的CSS BUG总结最让人头痛的当数IE,特别是IE6。搞定了IE6,基本也就能称霸半个江山了。搞定了IE,也相当于占领了7、80%的领地。你想做一个统治页面兼容的主么?反正我是想的。作为一名前端,我们通常要做的就是让页面在各系统A-Grade浏览器,甚至网站浏览份额0.1%以上的浏览器上良好显示。当然,还有性能问题。不 过,今天要说的是样式的兼容问题。在IE/Mozilla/Webkit/Opera四分天下的今天,IE6-9/Mozilla(Gecko)系列 /Chrome/Safari/Opera etc. 这些浏览器的兼容,无不让前端们头痛。而在这之中,最让人头痛的当数IE,特别是IE6。搞定了IE6,基本也就能称霸半个江山了。搞定了IE,也相当于 占领了7、80%的领地。你想做一个统治页面兼容的主么?反正我是想的。今天,趁着想完善公司的内部样式框架,把HasL的IE CSS Bug过了一遍。整理中收获了不少东西,一些官方的不足,也根据自己的知识升级了一下。当然,也顺利地升级了框架的一些内容,感觉甚爽。随后,便将一些值 得去看的Bug整理成一个列表,基于Alipay前端伟大的分享精神,分享出来以供团队工友们和大家参考。同时,由于整理仓促,有些理解和表达不当和其他纰漏在所难免,还请大家帮忙更正。谢谢。问题浏览器DEMO解决方法Hacking Rules: property:all-ie9; property:gte-ie80;*property:lte-ie7; +property:ie7; _property:ie6;1inputbutton | submit 不能用 margin:0 auto; 居中IE8bug | fixed为input添加width2bodyoverflow:hidden;没有去掉滚动条IE6/7bug | fixed设置htmloverflow:hidden;3hasLayout的标签拥有高度IE6/7bug | fixed*height:0;_overflow:hidden;4formhasLayout元素有margin-left时,子元素中的input | textarea 出现2margin-leftIE6/7bug | fixedform hasLayout 元素margin-left:宽度;form div*margin-left:宽度2;5当border-width有1条后有注释的选择器:selector /*/ selectorIE7bug | fixed官方DEMO有误14* htmlIE6 HACK只对IE6有效15PNG图片中的颜色和背景颜色的值相同,但显示不同IE6-7bug | fixed利用 pngcrush 去除图片中的 Gamma profiles16margin:0 auto; 不能让block元素水平居中IE6-8bug | fixed给block元素添加一个width17使用伪类 :first-line | :first-letter, 属性的值中出现!important 会使属性失效IE8bug | fixed!important is evil, dont use it anymore18:first-letter 失效IE6bug | fixed把 :first-letter 移到离最近的地方,如 h1, p:first-letter,而非 p:first-letter h119Position:absolute元素中,a display:block, 在非:hover时只有文本可点击IE6/7bug | fixed给a添加background, 如果背景透明,使用background:url(任何页面中已经缓存的文件链接),不推荐background:url(#)官方的解决方法,因为会增加一下HTTP请求20float列表元素不水平对齐:li不设置float,a设置display:block;float:方向,li不水平对齐IE6/7bug | fixed给li设置display:inline 或 float:方向21dt, dd, li 背景失效IE6bug | fixeddt, dd, liposition:relative;22元素的样式在启用javascript的情况下显示了样式IE6-8bug | fixed利用js给添加display:none;23使用filter处理的透明背景图片的透明部分不可点IE6-8bug | fixed把background:none变成background:url(链接),链接到本身和图片之外的任何文件24li内元素偏离 baseline 向下拉IE8bug | fixed给li设置display:inline 或 float:方向25列表中li的list-style不显示IE6/7bug | fixed给li添加margin-left,留空间来显示(不要加在ul上)26图片不能垂直居中IE6/7bug/fixed添加一个空标签,并赋给”Layout”, 比如display:inline-block;27不能自定义指针样式IE6-8bug | fixed给指针文件设置绝对路径28背景溢出,拖动滚动条后显示正常IE6bug | fixed给父元素添加overflow:hidden防止溢出,并赋予hasLayout,如果添加_zoom:1;29高度超过height定义的高IE6bug/fixed添加_overflow:hidden;(推荐)或者_font-size:0;30宽度超过width定义的宽IE6bug/fixed添加_overflow:hidden;31双倍边距IE6 常识添加display:inline到float元素中32margin负值隐藏:hasLayout的父元素内的非hasLayout元素,使用负边距时,超出父元素部分不可见IE6/7bug/fixed去掉父元素的hasLayout;或者赋hasLayout给子元素,并添加position:relative;33给两个浮动元素的某中一个的文字设定为斜体,另一个元素下拉在有斜体文字元素的下面IE6bug/fixed给有斜体文字的元素添加overflow:hidden;353px 间隔:在float元素后的元素,会有3px间隔IE6bug/fixed因为是确切的3px,所以,用“暴力破解”吧,比如_margin-left:-3px;35text-align 影响块级元素IE6/7bug/fixed整理你的float;或者分开设置text-align1超链接访问过后hover样式就不出现的问题被点击访问过的超链接样式不在具有hover和active了,很多人应该都遇到过这个问题,解决方法是改变CSS属性的排列顺序: L-V-H-Aa:link color: #1f3a87; text-decoration:none;a:visited color: #83006f;text-decoration:none;a:hover color: #bc2931; text-decoration:underline;a:active color: #bc2931;2IE6的双倍边距BUG浮动后本来外边距10px,但IE解释为20px,解决办法是加上display:inline3IE6下这两个层中间怎么有间隙这个IE的3PX BUG也是经常出现的,解决的办法是给.right也同样浮动 float:left 或者相对IE6定义.left margin-right:-3px;4IE6文字溢出BUG说明:注释造成文字溢出是IE的BUG。5一个空格引发CSS失效这段代码对的首字符样式定义在IE6上看是没有效果的(IE7没测试),而在p:first-letter和font-size:300%加上空格,也就是p:first-letter font-size:300%后,显示就正常了。但是同样的代码,在FireFox下看是正常的。按道理说,p:first-letterfont-size:300%的写法是没错的。那么问题出在哪里呢?答案是伪类中的连字符-。IE有个BUG,在处理伪类时,如果伪类的名称中带有连字符-,伪类名称后面就得跟一个空格,不然样式的定义就无效。而在FF中,加不加空格都可以正常处理。6IE6中奇数宽高的BUGIE6还有奇数宽高的bug,解决方案就是将外部相对定位的div宽度改成偶数。7IE6下为什么图片下方有空隙产生解决这个BUG的方法也有很多,可以是改变html的排版,或者定义img 为display:block或者定义vertical-align属性值为vertical-align:top | bottom |middle |text-bottom还可以设置父容器的字体大小为零,font-size:0CSS hack:针对IE6,IE7,firefox显示不同效果做网站时经常会用到,衡量一个DIV+CSS架构师的水平时,这个也很重要。区别不同浏览器的CSS hack写法:区别IE6与FF:background:orange;*background:blue;区别IE6与IE7:background:green !important;background:blue;区别IE7与FF:background:orange; *background:green;区别FF,IE7,IE6:background:orange;*background:green !important;*background:blue;注:IE都能识别*;标准浏览器(如FF)不能识别*;IE6能识别*,但不能识别 !important,IE7能识别*,也能识别!important;FF不能识别*,但能识别!important;IE6 IE7 FF* !important -另外再补充一个,下划线_,IE6支持下划线,IE7和firefox均不支持下划线。IE6 IE7 FF* !important _ 于是大家还可以这样来区分IE6,IE7,firefox: background:orange;*background:green;_background:blue;注:不管是什么方法,书写的顺序都是firefox的写在前面,IE7的写在中间,IE6的写在最后面。CSS HACK以下两种方法几乎能解决现今所有HACK.1, !important随着IE7对!important的支持, !important 方法现在只针对IE6的HACK.(注意写法.记得该声明位置需要提前.)stylegt;#wrapperwidth: 100px!important; /* IE7+FF */width: 80px; /* IE6 */stylegt;2, IE6/IE77对FireFox*+html 与 *html 是IE特有的标签, firefox 暂不支持.而*+html 又为 IE7特有标签.#wrapper#wrapper width: 120px; /* FireFox */*html #wrapper width: 80px; /* ie6 fixed */*+html #wrapper width: 60px; /* ie7 fixed, 注意顺序 */注意:*+html 对IE7的HACK 必须保证HTML顶部有如下声明:二、万能 float 闭合(非常重要!)关于 clear float 的原理可参见 How To Clear Floats Without Structural Markup将以下代码加入Global CSS 中,给需要闭合的div加上 /* Clear Fix */.clearfix:aftercontent:.;display:block;height:0;clear:both;visibility:hidden;.clearfixdisplay:inline-block;/* Hide from IE Mac */.clearfix display:block;/* End hide from IE Mac */* end of clearfix */关于闭合浮动元素(clearing float)的方法现在已经很多了,个人认为简单实用的方法就是使用:after伪类动态的嵌入一个用于清除浮动的元素,可惜代码量太大了,看上去不够简洁。现在看到有个方法超级简单。介绍一下这个方法。原文在:http:/annevankesteren.nl/2005/03/clearing-floats这一方面的原理是,外围元素之所以不能很好的延伸,问题出在了overflow上,因为overflow不可见(见W3C的解释)。现在只要将给外围元素添加一个“overflow:auto”,就可以解决问题,结果是除了IE,真的可以解决。下来就要解决ID的问题了,再加上“_height:1%”,这个问题就完全解决了。下面的例子作为比较1、没有闭合浮动元素;2、非IE下闭合浮动元素;3、完全闭合元素。相关代码如下:XHTML代码:Example Source Code Float leftFloat rightCSS样式:Example Source Code #wrap border:6px #ccc solid; overflow:auto; _height:1%;.column_left float:left; width:20%; padding:10px;.column_right float:right; width:75%; padding:10px; border-left:6px #eee solid;三、其他兼容技巧(再次啰嗦)1, FF下给 div 设置 padding 后会导致 width 和 height 增加, 但IE不会.(可用!important解决)2, 居中问题.1).垂直居中.将 line-height 设置为 当前 div 相同的高度, 再通过 vertical-align: middle.( 注意内容不要换行.)2).水平居中. margin: 0 auto;(当然不是万能)3, 若需给 a 标签内内容加上 样式, 需要设置 display: block;(常见于导航标签)4, FF 和 IE 对 BOX 理解的差异导致相差 2px 的还有设为 float的div在ie下 margin加倍等问题.5, ul 标签在 FF 下面默认有 list-style 和 padding . 最好事先声明, 以避免不必要的麻烦. (常见于导航标签和内容列表)6, 作为外部 wrapper 的 div 不要定死高度, 最好还加上 overflow: hidden.以达到高度自适应.7, 关于手形光标. cursor: pointer. 而hand 只适用于 IE.1 针对firefox ie6 ie7的css样式现在大部分都是用!important来hack,对于ie6和firefox测试可以正常显示,但是ie7对!important可以正确解释,会导致页面没按要求显示!找到一个针对IE7不错的hack方式就是使用“*+html”,现在用IE7浏览一下,应该没有问题了。现在写一个CSS可以这样:#1 color: #333; /* Moz */* html #1 color: #666; /* IE6 */*+html #1 color: #999; /* IE7 */那么在firefox下字体颜色显示为#333,IE6下字体颜色显示为#666,IE7下字体颜色显示为#999。2 css布局中的居中问题主要的样式定义如下:body TEXT-ALIGN: center;#center MARGIN-RIGHT: auto; MARGIN-LEFT: auto; 说明:首先在父级元素定义TEXT-ALIGN: center;这个的意思就是在父级元素内的内容居中;对于IE这样设定就已经可以了。但在mozilla中不能居中。解决办法就是在子元素定义时候设定时再加上“MARGIN-RIGHT: auto;MARGIN-LEFT: auto; ”需要说明的是,如果你想用这个方法使整个页面要居中,建议不要套在一个DIV里,你可以依次拆出多个div,只要在每个拆出的div里定义MARGIN-RIGHT: auto;MARGIN-LEFT: auto; 就可以了。3 盒模型不同解释.#box width:600px; /for ie6.0- width:500px; /for ff+ie6.0#box width:600px!important /for ff width:600px; /for ff+ie6.0 width /*/:500px; /for ie6.0-4 浮动ie产生的双倍距离#box float:left; width:100px; margin:0 0 0 100px; /这种情况之下IE会产生200px的距离 display:inline; /使浮动忽略这里细说一下block,inline两个元素,Block元素的特点是:总是在新行上开始,高度,宽度,行高,边距都可以控制(块元素);Inline元素的特点是:和其他元素在同一行上,.不可控制(内嵌元素);#box display:block; /可以为内嵌元素模拟为块元素 display:inline; /实现同一行排列的的效果 diplay:table;5 IE与宽度和高度的问题IE不认得min-这个定义,但实际上它把正常的width和height当作有min的情况来使。这样问题就大了,如果只用宽度和高度,正常的浏览器里这两个值就不会变,如果只用min-width和min-height的话,IE下面根本等于没有设置宽度和高度。比如要设置背景图片,这个宽度是比较重要的。要解决这个问题,可以这样:#box width: 80px; height: 35px;htmlbody #box width: auto; height: auto; min-width: 80px; min-height: 35px;6 页面的最小宽度min-width是个非常方便的CSS命令,它可以指定元素最小也不能小于某个宽度,这样就能保证排版一直正确。但IE不认得这个,而它实际上把width当做最小宽度来使。为了让这一命令在IE上也能用,可以把一个 放到 标签下,然后为div指定一个类:然后CSS这样设计:#container min-width: 600px; width:expression(document.body.clientWidth 600? 600px: auto );第一个min-width是正常的;但第2行的width使用了Javascript,这只有IE才认得,这也会让你的HTML文档不太正规。它实际上通过Javascript的判断来实现最小宽度。7 清除浮动.hackbox display:table; /将对象作为块元素级的表格显示或者.hack

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论