关于css兼容性问题及解决方法总结(二)

发布时间:2020-08-13编辑:脚本学堂
由于不同的浏览器功能都不尽相同,因此就会出现很多关于css兼容性问题,下面给大家把这些问题及解决方法一一总结出来,供大家参考。

13为什么无法定义1px左右高度的容器
IE6下的这个问题是因为默认的行高造成的,解决方法,例如:overflow:hidden   zoom:0.08   line-height:1px

14、 div居中问题
div设置 margin-left, margin-right 为 auto 时已经居中,IE 不行,IE需要设定body居中,首先在父级元素定义text-algin: center;这个目的是让在父级元素内的内容居中。

15、超链接访问过后hover样式就不出现的问题
被点击访问过的超链接样式不在具有hover和active了,解决方法:改变CSS属性的排列顺序: L-V-H-A。如下:

复制代码 代码示例:
<style type="text/css">
<!--
a:link {}
a:visited {}
a:hover {}
a:active {}
-->
</style>

16、什么是menubar
17、游标手指cursor
cursor: pointer 同时在 IE FF 中显示游标手指状, hand 仅 IE 可以,最好用pointer。

18、UL、form等的padding与margin
ul标签在FF中默认是有padding值的,而在IE中只有margin默认有值, form在IE中,将会自动margin一些边距,而在FF中margin则是0,所以先将 ul,form{margin:0;padding:0;}定义
固定,就能解决大部分问题。

19、BOX模型解释不一致问题
在FF和IE中的BOX模型解释不一致导致相差2px解决技巧:如下:
div{margin:30px!important;margin:28px;}
注意这两个margin的顺序一定不能写反, important这个属性IE不能识别,别的浏览器能识别。所以在IE下其实解释成这样:
div{maring:30px;margin:28px}
重复定义的话按照最后一个来执行,不可以这么写:

margin:xx px!important;#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-}

20、属性选择器(这个不能算是兼容,是隐藏css的一个bug)
p[id]{}div[id]{}
这个对于IE6.0和IE6.0以下的版本都隐藏,FF和OPera作用.属性选择器和子选择器还是有区别的,子选择器的范围从形式来说缩小了,属性选择器的范围比较大,如p[id]中,所有p标签中有
id的都是同样式的.

21、最狠的手段 - !important
确实无法解决一些细节问题,用这个技巧.FF对于”!important”会自动优先解析,然而IE会忽略.如下:

.tabd1{
url( /res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/
url( /res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}

值得注意的是,一定要将xxxx !important 这句放置在另一句之上。

22、为什么FF下文本无法撑开容器的高度
标准浏览器中固定高度值的容器不会被撑开,既想固定高度,又想能被撑开怎样设置呢?办法:去掉height设置min- height:200px; 这里为了照顾不认识min-height的IE6 可以这样定义:

复制代码 代码示例:
{
height:auto!important;
height:200px;
min-height:200px;
}

23、FireFox下如何使连续长字段自动换行
IE中直接使用 word-wrap:break-word 就可以了, FF中我们使用JS插入的技巧来解决:

复制代码 代码示例:

<style type="text/css">
<!--
div {
width:300px;
word-wrap:break-word;
border:1px solid red;
}
-->
</style>

<div id="ff">aaaaaaaaaaaaaaaaaaaaaaaaaaaa</div>
<scrīpt type="text/javascrīpt">
/* <![CDATA[ */
function toBreakWord(el, intLen){
var ōbj=document.getElementById(el);
var strContent=obj.innerHTML;
var strTemp="";
while(strContent.length>intLen){
strTemp+=strContent.substr(0,intLen)+"
";
strContent=strContent.substr(intLen,strContent.length);
}
strTemp+="
"+strContent;
obj.innerHTML=strTemp;
}
if(document.getElementById && !document.all) toBreakWord("ff", 37);
/* ]]> */
</scrīpt>

24、为什么IE6下容器的宽度和FF解释不同呢?

复制代码 代码示例:
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http.//www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<style type="text/css">
<!--
div {
cursor:pointer;
width:200px;
height:200px;
border:10px solid red
}
-->
</style>
<div ōnclick="alert(this.offsetWidth)">让FireFox与IE兼容</div>

差别在于容器的整体宽度有没有将边框(border)的宽度算在其内,这里IE6解释为200PX ,而FF则解释为220PX,什么原因?容器顶部的xml去掉就可以,顶部的申明触发了IE的qurks
mode 。这样属于CSS HACK。如下:

#example { color: #333; } /* Moz */
* html #example { color: #666; } /* IE6 */
*+html #example { color: #999; } /* IE7 */

第2种,是使用IE专用的条件注释
以下为引用内容:

<!--其他浏览器 -->
<link rel="stylesheet" type="text/css" href="css.css" />
<!--[if IE 7]>
<!-- 适合于IE7 -->
<link rel="stylesheet" type="text/css" href="ie7.css" />
<![endif]-->
<!--[if lte IE 6]>
<!-- 适合于IE6及一下 -->
<link rel="stylesheet" type="text/css" href="ie.css" />
<![endif]-->

第3种,css filter的办法,以下为经典从国外网站翻译过来的。.
新建一个css样式如下:
以下为引用内容:

#item {
width: 200px;
height: 200px;
red;< /span>
}

新建一个div,并使用前面定义的css的样式:
以下为引用内容:

<div id="item">some text here</div>

在body表现这里加入lang属性,中文为zh:
以下为引用内容:

复制代码 代码示例:
<body lang="en">

现在对div元素再定义一个样式:
以下为引用内容:
&div class="codetext">*:lang(en) #item{
background:green !important;
}

 

这样做是为了用!important覆盖原来的css样式,由于:lang选择器ie7.0并不支持,所以对这句话不会有任何作用,于是也达到了 ie6.0下同样的效果,但是很不幸地的是,safari同样不支
持此属性,所以需要加入以下css样式:
以下为引用内容:

#item:empty {
background: green !important
}

:empty选择器为css3的规范,尽管safari并不支持此规范,还会选择此元素,不管是否此元素存在,绿色在除ie各版本以外的浏览器上。对IE6和FF的兼容可以考虑以前的!important 建议
用第一种,简洁,兼容性比较好

25、IE,FF的默认值问题
为什么要专门为IE和FF写不同的CSS,为什么IE这么多问题。.其实对于css的标准支持方面,关键在于IE和FF的默认值不一样而已,知道此技巧,要写出兼容FF和 IE的css就简单了,或
许对于简单的css,你完全可以不用”!important”这个东西了。

大家知道浏览器在显示网页的时候,会根据网页的css样式表决定如何显示,对于那些没有描述的属性,浏览器将采用内置默认的方式来进行显示。
如文字,在css中没指定颜色,那么浏览器将采用黑色或者系统颜色来显示,div或者其他元素的背景,css中没被指定,浏览器则将其设置为白色或者透明,等等其他未定义的样式均如
此。所以FF和IE显示不一的根本原因在于它们的默认显示不一样,而这个默认样式该如何显示我们知道在w3中有没有对应的标准来进行规定。