浏览器兼容性问题

Posted 张三的美丽家园

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浏览器兼容性问题相关的知识,希望对你有一定的参考价值。

1.不同浏览器的标签默认的外补丁和内补丁不同

问题症状:随便写几个标签,不加样式的情况下,各自的margin和padding差异比较大。

解决方案:CSS里 *{margin:0;padding:0;},几乎所有的CSS文件开头都是以通配符*来设置标签的内外补丁是0.

2.块属性标签float后,又有横行的margin情况下,在IE6显示margin比设置的大

问题症状:常见症状是IE6中后面的一块被顶到下一行,float布局中最常见的浏览器兼容性问题

解决方案:在float的标签样式控制中加入display:inline,将其转化为行内属性。 

横向布局的时候我们通常都是用div float实现的,横向的间距设置如果用margin实现,这就是一个必然会碰到的兼容性问题。

3.设置较小高度标签(一般小于10px),zai IE6,IE7,遨游中高度超出自己设置高度

问题症状:IE6,7和遨游里这个标签的高度不受控制,超出自己设置的高度

解决方案:给超出高度的标签设置overflow:hidden;或者设置行高line-height小于你设置的高度

这种情况一般出现在我们设置小圆角背景的标签里。出现这个问题的原因是IE8之前的浏览器都给一个最小标签默认的行高。即使你的标签是空的,这个标签的高度还是会达到默认的行高。

4.行内属性标签,设置display:block后采用float布局,又有横行的margin的情况,IE6间距Bug

问题症状:IE6里间距比超过设置的间距

解决方案:在display:block;后面加入display:inline,display:table;

行内属性标签,为了设置宽高,我们需要设置display:block;(除了Input标签比较特殊)。在用float布局并有横向的Margin后,在IE6下,他就具有了快属性float后的横向margin的Bug。不过因为它本身就是行内属性标签,所以我们再加上display:inline的话宽高就不可设了。这时候我们还要在display:inline后面加上display:table。

5.图片默认有间距

问题症状:几个Img标签放在一起的时候,有些浏览器会有默认的间距,加了问题1中的通配符也不起作用。

解决方案:使用float属性为Img布局

因为img标签是行内属性标签,所以只要不超出容器宽度,Img标签都会排在一行里,但部分浏览器Img标签之间会有这个间距。去掉这个间距使用float是正道。(虽然使用负margin也能解决,但是使用负margin本身就是容易引起浏览器兼容问题的用法,所以禁用)

6.标签最低高度设置min-height不兼容

问题症状:因为Min-height本身就是一个不兼容的CSS属性,所以设置Min-height是不能很好地被各个浏览器兼容

解决方案:如果我们要设置一个标签的最小高度200px,需要进行的设置为{min-height:200px;height:auto !important;height:200px;overflow:visible;}

在B/S系统前端开发时,有很多情况下我们有这种需求。

当内容小于一个值(如300px)时。容器的高度为300px;当内容高度大于这个值时,容器高度被撑高,而不是出现滚动条。这时候我们就会面临这个兼容性问题。

 7.透明度的兼容CSS设置

.transparent { 
opacity: 0.7; 
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)";
filter: alpha(opacity=70); 
-moz-opacity: 0.7; 
-khtml-opacity: 0.7;

8. FLOAT闭合(clearing float)

网页在某些浏览器上显示错位很多时候都是因为使用了float浮动而没有真正闭合,这也是div无法自适应高度的一个原因。如果父div没有设float而其子div却设了float的话,父div无法包住整个子DIV,这种情况一般出现在一个父DIV下包含多个子DIV。解决办法:

1) 给父DIV也设上float

2) 在所有子DIV后新加一个空DIV(目前Ext是这么做的),比如:

.parent{width:100px;}
.son1{float:left;width:20px;}
.son2{float:left;width:80px;}
.clear{clear:both;margin:0;parding0;height:0px;font-size:0px;}
<div class="parent">
   <div class="son1"></div>
   <div class="son2"></div>
   <div class="clear"></div>
</div>

3)  万能 float 闭合

将以下代码加入Global CSS 中,给需要闭合的div加上 class=”clearfix” 即可,屡试不爽。

<style>
/* Clear Fix */
.clearfix:after {
content:".";
display:block;
height:0;
clear:both;
visibility:hidden;
}
.clearfix {
display:inline-block;
}
/* Hide from IE Mac \*/
.clearfix {display:block;}
/* End hide from IE Mac */
/* end of clearfix */
</style>

:after(伪对象),设置在对象后发生的内容,通常和content配合使用,IE不支持此伪对象,非Ie 浏览器支持,所以并不影响到IE/WIN浏览器。这种的最麻烦。

 4) overflow:auto

只要在父DIV的CSS中加上overflow:auto就搞定。举例:

.parent{width:100px;overflow:auto}
.son1{float:left;width:20px;}
.son2{float:left;width:80px;}
<div class="parent">
   <div class="son1"></div>
   <div class="son2"></div>
</div>
 

原理是,外围元素之所以不能很好的延伸,问题出在了overflow上,因为overflow不可见(见W3C的解释)。现在只要将给外围元素添 加一个“overflow:auto”,就可以解决问题,结果是除了IE,真的可以解决。下来就要解决IE的问题了,再加上“_height:1%”,这个问题就完全解决了。我试了一下,其实不加"_height:1%“在IE下也行,留着吧。

 9.截字省略号

.hh {
-o-text-overflow:ellipsis;
text-overflow:ellipsis;
white-space:nowrap;
overflow:hidden;
}

这个是在越出长度后会自行的截掉多出部分的文字,并以省略号结尾。技术是好技术,很多人都喜欢乱用,但注意Firefox并不支持。

<meta http-equiv="x-ua-compatible" content="ie=7" />

页面加上这句就可以让页面兼容IE7了

供参考! 给大家提醒一个漂浮需要注意的问题 注意设置DIV宽和高 注意设置overflow:hidden; 注意闭合针对火狐 父div样式display:inline-block;

10.  cursor:hand和cursor:pointer

firefox不支持hand,但ie支持pointer
解决方法:统一使用pointer

 

11.css中的width和padding

在IE7和FF中width宽度不包括padding,在Ie6中包括padding。

12、文字阴影(CSS3)

.text { text-shadow: 1px 1px 1px #666; filter: Shadow(Color=#666666, Direction=135, Strength=5); }

13、Box阴影(CSS3)

.box { box-shadow: 5px 5px 5px #666; -moz-box-shadow: 5px 5px 5px #666; -webkit-box-shadow: 5px 5px 5px #666; }

14.CSS hack

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。因为优先级相同且想冲突的属性设置后一个会覆盖掉前一个,所以书写的次序是很重要的。

(1).title{ height:200px;
*height:200px;
_height:200px; }
(2).title{ height:200px;
*height:200px !important;
*height:200px; }
(3).title{ height:200px; }
*html.title{ height:200px;}
*+html.title{ height:200px;}

15、div嵌套时 y轴上 padding和 marign的问题

FF里 y 轴上 子div 到 父div 的距离为 父padding + 子marign
IE里 y 轴上 子div 到 父div 的距离为 父padding 和 子marign 里大的一个
FF里 y 轴上 父padding=0 且 border=0 时,子div 到 父div 的距离为0,子marign 作用到 父div 外面


16、padding,marign,height,width的傻瓜式解决技巧

注意是技巧,不是方法:
写好标准头
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
高尽量用padding,慎用margin,height尽量补上100%,父级height有定值子级height不用100%,子级全为浮动时底部补个空clear:both的div宽尽量用margin,慎用padding,width算准实际要的减去padding


17、著名的 Meyer Reset(重置)

html, body, div, span, applet, object, iframe,h1, h2, h3, h4, h5, h6,p, blockquote, pre,a, abbr, acronym, address, big, cite, code,del, dfn, em, font, img, ins, kbd, q, s, samp,small, strike, strong, sub, sup, tt, var,dl, dt, dd, ol, ul, li,fieldset, form, label, legend,table, caption, tbody, tfoot, thead, tr, th, td

margin: 0; 
padding: 0; 
border: 0; 
outline: 0; 
font-weight: inherit; 
font-style: inherit; 
font-size: 100%; 
font-family: inherit; 
vertical-align: baseline; 

:focus { 
outline: 0; 

body { 
line-height: 1; 
color: black; 
background: white; 

ol, ul { 
list-style: none; 

table { 
border-collapse: separate; 
border-spacing: 0; 

caption, th, td { 
text-align: left; 
font-weight: normal; 

blockquote:before, blockquote:after, 
q:before, q:after { 
content: ""; 

blockquote, q { 
quotes: "" ""; 


18、为什么web标准中无法设置IE浏览器滚动条颜色了?

原来样式设置:
<style type="text/css">
body{scrollbar-face-color:#f6f6f6; scrollbar-highlight-color:#fff; scrollbar-shadow-color:#eeeeee; scrollbar-3dlight-color:#eeeeee; scrollbar-arrow-color:#000; scrollbar-track-color:#fff; scrollbar-darkshadow-color:#fff; }
</style>
解决办法是将body换成html。

 
 

 

以上是关于浏览器兼容性问题的主要内容,如果未能解决你的问题,请参考以下文章

十条jQuery代码片段助力Web开发效率提升

几个非常实用的JQuery代码片段

30秒就能看懂的JavaScript 代码片段

片段如何处理触摸?

android 兼容性包 - 片段...未附加到 Activity

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js