




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
各主流浏览器之间的兼容性-CSS篇一样米养百样人,尽管吃同样的食物,但还是有人健康,有人身体不适。这个个人估计和浏览器兼容问题一样,同样的HTML(HTML5)+CSS(CSS3)+JS,但是表现出的外部特征还是不能达到统一,存在瑕疵。同样的代码,有的浏览器效果显示“正常”,有的显示“不正常”。什么是兼容问题,那么:不正常的原因是什么?(不支持标签属性or存在bug)该如何让其显示正常?为什么浏览器会存在兼容问题?同一浏览器,版本越老,存在bug越多,相对于版本越新的浏览器,对新属性和标签、新特性支持越少。不同浏览器,核心技术不同,标准不同,实现方式也有差异,最终呈现出来在大众面前的效果也是会有差异。处理兼容问题的思路:1、要不要做?产品的角度(产品的受众、受众的浏览器比例、效果优先还是基本功能优先)。成本的角度 (有无必要做某件事)。2、做到什么程度?让哪些浏览器支持哪些效果。3、如何做?根据兼容需求选择技术框架/库(如jquery 1.x.x)。根据兼容需求选择兼容工具:html5shiv、Respond.js、CSS Reset、normalize.css、Modernizr.js、postcss。条件注释、CSS Hack、js 能力检测做一些修补。渐进增强和优雅降级渐进增强(progressive enhancement): 针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验优雅降级(graceful degradation): 一开始就构建完整的功能,然后再针对低版本浏览器进行兼容。以下是一些常见属性的兼容情况inline-block: =ie8min-width/min-height: =ie7:before,:after: =ie8div:hover: =ie7inline-block: =ie8background-size: =ie9圆角: = ie9阴影: = ie9动画/渐变: = ie10一些兼容写法范例:.clearfix:after content: ; display: block; clear: both;.clearfix *zoom: 1; /* 仅对ie67有效,zoom:1触发hasLayout,起到类似BFC的效果 */.target display: inline-block; *display: inline; /*仅对ie67生效*/ *zoom: 1; /*仅对ie67生效*/ !-一些和兼容相关的工具/库:html5shivRespond.jsCSS Resetnormalize.cssModernizr.jspostcss特别是Modernizr.js和postcss很有实践价值,值得好好看看用法。用到的网站:浏览器市场份额 - 百度统计流量研究院查CSS属性兼容Browserhacks查 Hack 的写法浏览器优先级别:FFIE7IE6,CSS hack书写顺序一般为FF IE7 IE6。多研究css标准,不写不规范的代码,规范的css是不可能出问题的。做出来的页面在不同浏览器上显示效果有差距这个有很多原因。各浏览器默认的样式不一样,比如 h 元素的 margin、字号,列表元素的缩进是 margin 还是 padding 等。需要先把这些默认样式覆盖掉,也叫初始化或 Reset。建议用 YUI 的 Reset CSS,应该是目前比较全的了 /yui/reset/。各浏览器对同一个属性的理解不一样或 bug,比如最烦人的 font-family,这个多找相关的文章看看,一般可以总结出来一个比较好的解决方案。针对 IE 的 bug,万不得已可以用 hack,某个属性浏览器压根不支持,这个就需要积累了。开发的时候最好在 Chrome 下进行(Chrome 也行,但是总感觉 Chrome 会把人惯坏) Firefox 也行,然后在 IE6 下调整一下(如果还需要考虑 IE6 的话),最后可以在 Opera 下看看行不行最直接的方法就是用第三方的插件.像bootstrap等,这些插件基本都处理了这种不兼容的问题。css虽然简单,但是也不是知道语法就可以走天下的东西。最容易出错的,float和position,其间涉及到文档流、视觉格式化的很多抽象概念。还有例如margin的垂直压缩,都是需要学习理论的。至于浏览器的兼容,实际上,已经存在的bug基本就那么多了(主要就是ie6/7/8),所以多做多搜索答案就没什么太难的东西。【所谓的浏览器兼容性问题,是指因为不同的浏览器对同一段代码有不同的解析,造成页面显示效果不统一的情况。在大多数情况下,我们的需求是,无论用户用什么浏览器来查看我们的网站或者登陆我们的系统,都应该是统一的显示效果。所以浏览器的兼容性问题是前端开发人员经常会碰到和必须要解决的问题。在学习浏览器兼容性之前,我想把前端开发人员划分为两类:第一类是精确按照设计图开发的前端开发人员,可以说是精确到1px的,他们很容易就会发现设计图的不足,并且在很少的情况下会碰到浏览器的兼容性问题,而这些问题往往都死浏览器的bug,并且他们制作的页面后期易维护,代码重用问题少,可以说是比较牢固放心的代码。第二类是基本按照设计图来开发的前端开发人员,很多细枝末节差距很大,不如间距,行高,图片位置等等经常会差几px。某种效果的实现也是反复调试得到,具体为什么出现这种效果还模模糊糊,整体布局十分脆弱。稍有改动就乱七八糟。代码为什么这么写还不知所以然。这类开发人员往往经常为兼容性问题所困。修改好了这个浏览器又乱了另一个浏览器。改来改去也毫无头绪。其实他们碰到的兼容性问题大部分不应该归咎于浏览器,而是他们的技术本身了。浏览器兼容问题一:不同浏览器的标签默认的外补丁和内补丁不同问题症状:随便写几个标签,不加样式控制的情况下,各自的margin 和padding差异较大。碰到频率:100%解决方案:CSS里 *margin:0;padding:0;备注:这个是最常见的也是最易解决的一个浏览器兼容性问题,几乎所有的CSS文件开头都会用通配符*来设置各个标签的内外补丁是0。浏览器兼容问题二:块属性标签float后,又有横行的margin情况下,在IE6显示margin比设置的大问题症状:在IE6中块元素浮动后,会出现横向双倍margin现象。碰到频率:90%(稍微复杂点的页面都会碰到,float布局最常见的浏览器兼容问题)解决方案:在float的标签样式控制中加入 display:inline;将其转化为行内属性备注:我们最常用的就是div+CSS布局了,而div就是一个典型的块属性标签,横向布局的时候我们通常都是用div float实现的,横向的间距设置如果用margin实现,这就是一个必然会碰到的兼容性问题。浏览器兼容问题三:设置较小高度标签(一般小于10px),在IE6,IE7,遨游中高度超出自己设置高度问题症状:IE6、7和遨游里这个标签的高度不受控制,超出自己设置的高度碰到频率:60%解决方案:给超出高度的标签设置overflow:hidden;或者设置行高line-height 小于你设置的高度。备注:这种情况一般出现在我们设置小圆角背景的标签里。出现这个问题的原因是IE8之前的浏览器都会给标签一个最小默认的行高的高度。即使你的标签是空的,这个标签的高度还是会达到默认的行高。浏览器兼容问题四:行内属性标签,设置display:block后采用float布局,又有横行的margin的情况,IE6间距bug问题症状:IE6里的间距比超过设置的间距碰到几率:20%解决方案:在display:block;后面加入display:inline;display:table;备注:行内属性标签,为了设置宽高,我们需要设置display:block;(除了input标签比较特殊)。在用float布局并有横向的margin后,在IE6下,他就具有了块属性float后的横向margin的bug。不过因为它本身就是行内属性标签,所以我们再加上display:inline的话,它的高宽就不可设了。这时候我们还需要在display:inline后面加入display:talbe。浏览器兼容问题五:图片默认有间距问题症状:几个img标签放在一起的时候,有些浏览器会有默认的间距,加了问题一中提到的通配符也不起作用。碰到几率:20%解决方案:使用float属性为img布局备注:因为img标签是行内属性标签,所以只要不超出容器宽度,img标签都会排在一行里,但是部分浏览器的img标签之间会有个间距。去掉这个间距使用float是正道。(我的一个学生使用负margin,虽然能解决,但负margin本身就是容易引起浏览器兼容问题的用法,所以我禁止他们使用)IE6下图片下方会产生间隙 解决办法是将图片设置为display:block;或者设置vertical-align:top bottom middle;浏览器兼容问题六:标签最低高度设置min-height不兼容,不支持最大最小宽高。问题症状:因为min-height本身就是一个不兼容的CSS属性,所以设置min-height时不能很好的被各个浏览器兼容。碰到几率:5%解决方案:如果我们要设置一个标签的最小高度200px,需要进行的设置为:min-height:200px; height:auto !important; height:200px; overflow:visible;。为IE6单独设置hack,即_height:最小高度值;_width:最小宽度值(对于IE6,当实际宽高超出定义的宽高时,元素会自动调整 宽高)。对于最大高度和最大宽度,没有必要设置兼容,当前对于开发者来说,只需要保证IE6下正常显示即可,无需在它身上花费太多功夫。备注:在B/S系统前端开时,有很多情况下我们又这种需求。当内容小于一个值(如300px)时。容器的高度为300px;当内容高度大于这个值时,容器高度被撑高,而不是出现滚动条。这时候我们就会面临这个兼容性问题。浏览器兼容问题七:透明度的兼容CSS设置问题症状:IE6,7,8不支持rgba与opacity两种透明的设置方法;解决方案:使用IE6当中的滤镜filter替代掉,如:opacity:0.6;filter:alpha(opacity=60)。备注:IE TESTER测试IE6不支持上面解决方案。浏览器兼容问题八:img外部的border问题症状:img外部有a标签,即img标签有链接时。解决方案:设置img边框border:0;备注:在用IE TESTER测试时,IE6-IE9都存在上述兼容问题,IE11时就ok。浏览器兼容问题九:空div默认行高问题症状:清除浮动的时候,有些人会采取一种清浮动的方法,使用一个空的div,然后为这个div设置clear:both。在大部分浏览器当中,这样做是没有任何问题的,但是在IE6浏览器当中,div即使是空的,也会存在默认行高。解决方案:设置其高度为0,并设置overflow:hidden。1 .clearfix zoom: 1; 2 .clearfix:afterclear: both; height: 0;overflow: hidden; content: ;display: block;选择清浮动位置时应注意以下:1、清浮动一定要在浮动标签完成浮动布局以后添加,否则会影响到浮动标签布局;2、清除浮动必须与前面的标签属于同级关系。clear属性定义了元素某个方向上不允许出现浮动元素:none(允许两边都可以有浮动对象)/left()/right(不允许右边有浮动对象)/both(不允许有浮动对象);空标签清除浮动:在HTML页面中加入一个空标签用来清除浮动。HTML:1 CSS:1 .clearclear:both;hegiht:0;overflow:hidden;clear:both;是清除所有浮动;height:0;overflow:hidden;是用来改变IE6下标签有默认的低于10px的行高时将以10px的高度显示的bug。但是空标签清浮动会增加多余的代码。overflow:在需要清除浮动的父级标签中加入overflow即可,在IE6中不认识此属性则加入zoom:1;或者height:1%;css样式改为:.outoverflow:auto;zoom:1;该属性对于父标签设置的高度小于子标签时,IE6/7、遨游则以下拉框形式出现,而火狐、谷歌、欧鹏、IE8会将子标签超出部分隐藏掉。overflow:visible属性只能对IE6/7、遨游起作用,对火狐、谷歌、欧鹏、IE8无清浮作用。overflow:visible(不剪切内容也不添加滚动条)/auto(是body对象和textarea的默认值,在需要时剪切内容并添加滚动条)/hidden(超出部分隐藏)/scroll(总是显示滚动条);after清浮动:css样式为:.outzoom:1;/*=for IE6/7 Maxthon2=*/outer:after clear:both;content:;visible:hidden;display:block;/*=for FF/chrome/opera/IE8=*/其中clear:both;只清除所有浮动;content:;display:block;对于FF/chrome/opera/IE8不能缺少,content()可以取空值。子标签浮动时,给父标签浮动下一标签直接清浮动:兄弟标签浮动时,下一标签直接写入清除clear:both;就可以。使用position:absolute;清除浮动。浏览器兼容问题十:空div默认行高问题症状:IE6浏览器中hover只支持a标签的使用,不支持一切其它标签使用;HTML:1 2 我是第一标题3 我是第二标题4 我是第二标题5 CSS:1 * margin: 0; padding: 0; 2 .div1 width: 600px; height: 200px; background-color: #ccc; border: 1px solid #ff9673; margin: 100px auto 0; 3 h2:hover color: red; 4 a float: left; width: 200px; height: 30px; background: yellow; text-decoration: none; 5 a:hover font-size: 50px; 6 a:hover .h color: red; 解决方案:解决办法:合理用a标签嵌套其他行内标签或者用javascript模拟a的hover效果;备注:afloat:left将a标签转化成块元素,这样可以设置宽和高。a:hover b当鼠标放在a标签上时,只是将a标签的b的内容隐藏掉,而不是将a隐藏掉。如果将a标签隐藏掉的,hover效果将消失,使display:none;失效。浏览器兼容问题十一:子选择器在IE6中不能使用问题症状:在IE6中,使用EF子选择器无效果。解决方案:采用其他选择器或者后代选择器进行控制。浏览器兼容问题十二:input聚焦框颜色与样式不同问题症状:各个浏览器表现不同。解决方案:使用outline:none,清除默认样式之后再统一设置。备注:使用上述方法可以清除IE和chrome浏览器默认样式,Firefox还是原样。做兼容页面的方法是:每写一小段代码(布局中的一行或者一块)我们都要在不同的浏览器中看是否兼容,当然熟练到一定的程度就没这么麻烦了。建议经常会碰到兼容性问题的新手使用。很多兼容性问题都是因为浏览器对标签的默认属性解析不同造成的,只要我们稍加设置都能轻松地解决这些兼容问题。如果我们熟悉标签的默认属性的话,就能很好的理解为什么会出现兼容问题以及怎么去解决这些兼容问题。/* CSS hack*/我很少使用hacker的,可能是个人习惯吧,我不喜欢写的代码IE不兼容,然后用hack来解决。不过hacker还是非常好用的。使用hacker我可以把浏览器分为3类:IE6 ;IE7和遨游;其他(IE8 chrome ff safari opera等)IE6认识的hacker 是下划线_ 和星号 *IE7 遨游认识的hacker是星号 *比如这样一个CSS设置:height:300px;*height:200px;_height:100px;IE6浏览器在读到height:300px的时候会认为高时300px;继续往下读,他也认识*heihgt, 所以当IE6读到*height:200px的时候会覆盖掉前一条的相冲突设置,认为高度是200px。继续往下读,IE6还认识_height,所以他又会覆盖掉200px高的设置,把高度设置为100px;IE7和遨游也是一样的从高度300px的设置往下读。当它们读到*height200px的时候就停下了,因为它们不认识_height。所以它们会把高度解析为200px,剩下的浏览器只认识第一个height:300px;所以他们会把高度解析为300px。因为优先级相同且想冲突的属性设置后一个会覆盖掉前一个,所以书写的次序是很重要的。】来说说 ie8的css兼容现在说说ie8下的css问题:1、 ie8支持:first-child,但不支持:last-child。因为前者是css2.1标准,后者是css3标准需要注意的是,如果浏览器 不支持的选择器和支持的选择器写在一起,那么整条规则就不起作用了。比如你不小心创造了一个伪元素(是真的伪哦).bb:bb-child, .ccbackground:#333;那么这整条规则就不起作用了,所有浏览器在此情况下都会歇菜,.cc的样式就丢失了。2、 input设置了左右padding,but输入较多内容时padding还是会消失。这个问题是无解的,ie浏览器她就是这么渲染input的,解决方法是在input 外面套一层div,用div设置左右padding,border,width和height,input只需要设置width和weight为100% 即可。另外,正常来讲,如果没有明确设置height的值,那么设置的line-height值就是height的值,but对于ie8,如果input 设置了 line-height,那么input必须设置height,否则input的内容显示有问题,会上下隐藏部分内容,她就是要躲猫猫。4、 为什么上面我不用input的伪元素进行设置而要嵌套多一层div呢?因为input,img,iframe等元素不支持伪元素 -_-|。:before 和:after伪元素指定了一个元素文档树内容之前和之后的内容。与content属性联用,指定了插入的内容(也就是你必须显性设置content 属性这两个伪家伙才能在文档中显示出来,哪怕设置content属性为空字符串也行)。作为DOM元素,伪元素都是在容器内进行渲染的, input,img,iframe等元素都不能包含其他元素,也就是不是容器,所以不能通过伪元素插入内容。5、 table中如果不是严格的用于表格,而是用于奇葩的局部布局时(我也想问为什么用来布局。),td设置成inline-block可以排成一行,但是 ie8和ie9 下,如果td中的内容很长,即使td设置了宽度,td也会撑开并占用td设置的margin(废话,td是没有margin可言的),直到挤占所有的td 宽度之和为tr的宽度。但是td设置成float:left;就能表现成block。这个不清楚为什么,但是管用。6、父元素的左padding会和子元素的左margin重叠。这个是没有好好实现盒子模型的事情了,包容吧。7、sprite图中的icons之间最好留空白间隔,哪怕间隔1px也好,否则ie8下会出现使用了某一个icon当背景,icon后面跟着的其他icon也顺带显示了一小部分的bug,所以icons之间还是要适当留白,不要太省。三、ie11部分css问题1、 ie11下很多元素表现和其他浏览器不一致,比如对应用了同一样式(不设置 高度)的div,其他浏览器解析的高度是一致的,但是ie11下该div有可能高度偏大,由此导致一些排版上的问题,所以,如果发现元素排版上下偏移的问题,查看此元素或其当代元素是否设置了高度,统一添上高度一切都ok了。2、抱歉,ie11问题确实不多。四、结尾附上一个关于css优先级的奇谈首先我们知道:1、id选择器优先级权重比class选择器大一个数量级,class选择器权重比标签选择器大一个数量级;2、class选择器和属性选择器同优先级;3、样式的优先程度需要根据第1条规则计算整体的优先级,按选择器权重计算各条样式规则中所有选择器优先级之和,哪条规则权重大,那条就说了算。如果相同那么后面的覆盖前面的。4、像这种.dog p开挂,多了特殊符号的,并不会增加优势,还是和 .dog p优先级一样。然后可以抛出一个问题了:对于下面的文档结构,分别对 p | .p | div p | .parent | #parent设置color属性,那么优先级如何呢? p结果很有意思:也就是.p div p p #parent .parentid选择器居然比p选择器优先级还低!将p元素和div元素分开看,.p div p p很正常,#parent .parent也很正常。所以问题关键在子级p和父级#parent,子级的选择器优先级比父级的选择器优先级高,或者说继承的优先级程度比自身的优先级低!嵌套多一层看看就知道是不是了,分别对#parent | div | p设置color属性: p 结果确实是p div #parent:即使应用两个选择器也无济于事,依然是p #parent div但是只要能定位到p元素,那么父级选择器的权重就起作用了,一试便知,对#parent p | #p 设置同样的样式结果是这样的:嗯,确实如此。所以:5、css样式优先级还和继承有关,继承的优先级不如本身应用的优先级高。葵花宝典1、 背景透明 0.5 必须卸载background:rgba(3,3,3,0.5);上边给设置透明度元素样式中添加background:#000;Filter:alpha(opacity=50);position:relative;例如:此div用作设置背景透明/此div用作承放内容2、 边框阴影(1) 给需要设置阴影的元素加样式代码-ms-filter:“progid:DXImageTransform.Microsoft.Shadow(Strength=4,Direction=120,Color=#000000)”;3、 IE8中图片有边框问题设置imgDisplay:inline-block;4、 css实现底边圆弧.boxPosition:relative;Width:100%;Height:200px;Text-align:center;Color:#fff;background:#27ac60;.box:afterPosition:absoulte;Left:0;Right:0;Bottom:-100px;Z- index:1;Content:;Height:200px;Width:100%;Border-radius:0 0 50% 50%;Background:#27ac06; hello word IE8 不兼容 sectionInput 防止浏览器记录超出范围 autocomplete=“off”让ul在div中随li数量变化而居中方法,将li中float:left;去掉改用display:inline-block;然后在给父元素设置text-align:center;5、 单行溢出限制Width:6em;宽度不固定White-space:nowrap;强制不
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农机服务在农业产业链中的增值服务模式探索考核试卷
- 2025年中国D(-)苯甘氨酸邓钾盐数据监测研究报告
- 2025年中国42度粮液数据监测研究报告
- 2025年中国1,8-二氯蒽醌数据监测研究报告
- 2025至2030年中国高压动力喷雾机市场分析及竞争策略研究报告
- 2025至2030年中国锅炉风机市场分析及竞争策略研究报告
- 2025至2030年中国酸枝木木材市场分析及竞争策略研究报告
- 2025至2030年中国聚乙烯挤压板市场分析及竞争策略研究报告
- 2025至2030年中国电热油汀取暖器市场分析及竞争策略研究报告
- 2025至2030年中国焊接安全眼镜市场分析及竞争策略研究报告
- 学院关于开展廉政风险点排查及防控工作实施方案
- 幼儿园《纲要》培训
- 夏季安全行车培训课件
- 语文九年级下册文言文对比阅读中考真题版共37篇(有翻译有答)
- 政府保密协议范本格式3篇
- 2024年度智能工厂MES系统实施合同
- 四川省雅安市2024-2025学年高二数学下学期期末检测试题理
- 财经基本技能-验钞技能
- CJT 313-2009 生活垃圾采样和分析方法
- 2024大功率风电叶片回收技术
- 《酒店消防安全培训》课件完整版
评论
0/150
提交评论