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

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

1、<!DOCTYPE 类型 顶级元素(默认html,可省略) 访问权限 "注册//组织//类型 标签定义//语言” URL(引用对象的位置) >详解
1)Strict DTD 为避免表现层的混乱,建议使用此类型。此类型须与层叠样式表(CSS)配合使用:

复制代码 代码示例:
<!DOCTYPE html PUBLIC “-//W3C/DTD HTML 4.0.1 //EN”
         “http://www.w3.org/TR/html4/strict.dtd”>
<!DOCTYPE html PUBLIC “-//W3C/DTD XHTML 1.0  Strict //EN”
         “http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”>

2)Transitional DTD 可包含 W3C 所期望移入样式表的呈现属性和元素(即在html标签中包含了样式标签)。在不支持层叠样式表(CSS)的浏览器中使用html 呈现样式,建议及这种
类型:

复制代码 代码示例:
<!DOCTYPE html PUBLIC “-//W3C/DTD HTML 4.0.1 Transitional //EN”
         “http://www.w3.org/TR/html4/loose.dtd”>
<!DOCTYPE html PUBLIC “-//W3C/DTD XHTML 1.0  Transitional //EN”
         “http://www.w3.org/TR/xhtml1/DTD/xhtml1- transitional.dtd”>

3)Frameset DTD用于带有框架的文档。除 frameset 元素取代了 body 元素之外,Frameset DTD 等同于 Transitional DTD

复制代码 代码示例:
<!DOCTYPE html PUBLIC “-//W3C/DTD HTML 4.0.1 Frameset//EN”
         “http://www.w3.org/TR/html4/frameset.dtd”>
<!DOCTYPE html PUBLIC “-//W3C/DTD XHTML 1.0  Frameset//EN”
         “http://www.w3.org/TR/xhtml1/DTD/xhtml1- frameset.dtd”>

2、浮动后产生的IE双倍距离(margin加倍)问题
设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。解决方法:在这个div里面加上display:inline;举例说明

复制代码 代码示例:
#imfloat{
float:left;
margin:5px;/*IE下理解为10px*/
display:inline;/*IE下理解为5px*/
}

Display的三个主要属性:display:none;//不显示
display:block;//转为块状元素可以对内联元素进行块状元素操作
display:inline; //转为内联元素 不换行显示

3、页面的最小宽度和高度问题
其他浏览器用min-width、min-height指定元素最小宽度和高度
ie把正常的width和height当做最小宽度和高度来使。
问题:
如果只用宽度和高度,其他的浏览器里这两个值就不会变,如果只用min-width和min-height的话,IE下面根本等于没有设置宽度和高度。
解决方法:
其他浏览器height和width要设置为auto,min-height和min-width设为固定值,ie浏览器height和width设为固定值
1)、使用!important

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

2)、#box{ width: 80px; height: 35px;}

复制代码 代码示例:
html>body #box{ width: auto; height: auto; min-width: 80px; min-height: 35px;}

3)、可以把一个<div> 放到 <body> 标签下,然后为div指定一个类,然后CSS这样设计:
#container{ min-width: 600px; width:expression(document.body.clientWidth < 600? "600px": "auto" );}
第一个min-width是正常的;但第2行的width使用了javascript,这只有IE才认得,这也会让你的HTML文档不太正规。它实际上通过Javascript的判断来实现最小宽度。
以下引用内容:

复制代码 代码示例:
#container{ min-width: 600px; width:expression(document.body.clientWidth < 600? "600px": "auto" );}

第一个min-width是正常的;但第2行的width使用了Javascript,这只有IE才认得,这也会让你的HTML文档不太正规。它实际上通过Javascript的判断来实现最小宽度。

4、一个层相对于浏览器居中
我们使用百分比绝对定位,与外补丁负值的技巧,负值的大小为其自身宽度高度除以二。以下引用内容:

复制代码 代码示例:
<style type="text/css">
<!--
div {
position:absolute;
top:50%;
left:50%;
margin:-100px 0 0 -100px;
width:200px;
height:200px;
border:1px solid red;
}
-->
</style>

5、单行垂直居中
vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:height; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行

复制代码 代码示例:
#topArea {
      height:22px;
      line-height:22px;
      vertical-align:middle;//垂直居中
}

6、ie63像素bug
_margin-right:-3px;//_XXXXX只有IE6起作用

7、IE捉迷藏问题
当div应用复杂的时候每个栏中又有一些链接,DIV等,这个时候容易发生捉迷藏的问题。
有些内容显示不出来,当鼠标选择这个区域(拖动选择)是发现内容确实在页面。
解决办法:对#layout使用line-height属性 或者给#layout使用固定高和宽。

8、清除浮动
在浮动层后加一个同辈div class=”clearfloat”,设置样式

复制代码 代码示例:
Div .clearfloat{clear:both;height:0;font-size:1px;line-height:0;

例如:<#div id=”floatA” ><#div id=”floatB” ><#div id=”NOTfloatC” >这里的NOTfloatC是希望往下排。(其中floatA、floatB的属性已经设置为float:left;)

上面代码在IE中可以,FF却不行。原因是NOTfloatC并非float标签,必须将float标签闭合。在 <#div class=”floatB”> <#div class=”NOTfloatC”>之间加上 <#div class=”clear”>这个div一定要注意位置,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。并且将clear这种样式定义为为如下即可:

.clear{ clear:both;}

作为外部 wrapper 的 div 不要定固定高度,为使高度能自动适应,要在wrapper里面加上overflow:hidden; 当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE
的layout私有属性(万恶的IE啊!)用zoom:1;这样就达到了兼容。

例如某一个wrapper如下定义:下面是引用内容:

.colwrapper{ overflow:hidden; zoom:1; margin:5px auto;}

排版用得最多的css描述可能就是float:left.有的时候我们需要在n栏的float div后面做一个统一的背景,如:

复制代码 代码示例:
以下为引用内容:
<div id=”page”>
<div id=”left”></div>
<div id=”center”></div>
<div id=”right”></div>
</div>

如我们要将page的背景设置成蓝色,以达到所有三栏的背景颜色是蓝色的目的,会发现随着left center right的向下拉长,而page保持高度不变,问题出现的原因在于page不是float属
性,而我们的page由于要居中,不能设置成 float,解决方法如下:

复制代码 代码示例:
<div id=”page”>
<div id=”bg” style=”float:left;width:100%”>
<div id=”left”></div>
<div id=”center”></div>
<div id=”right”></div>
</div>
</div>

再嵌入一个float left而宽度是100%的DIV解决之
万能float 闭合(非常重要!)
关于 clear float 的原理可参见 [How To Clear Floats Without Structural Markup],将以下代码加入Global CSS 中,给需要闭合的div加上 class="clearfix" 即可,
以下为引用内容:

/* 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 */

或者这样设置:.hackbox{ display:table; //将对象作为块元素级的表格显示}

复制代码 代码示例:
.clearfloat {
    clear:both;
    height:0;
    font-size: 1px;
    line-height: 0px;
}
9、解决内层高度发生变化 外层高度不能调节问题
高度不适应当内层对象的高度发生变化时外层高度不能自动进行调节,特别是当内层对象使用margin 或padding 时。
例:如下
复制代码 代码示例:
#box {background-color:#eee; }
#box p {margin-top: 20px;margin-bottom: 20px; text-align:center; }
<div id="box">
<p>p对象中的内容</p>
</div>

解决方法:在P对象上下各加1空的div对象CSS代码:.1{height:0px;overflow:hidden;}或者为DIV加上border属性。

10、IE6下为什么图片下有空隙产生
解决这个BUG的技巧也有很多,可以是改变html的排版,或者设置img 为display:block 或者设置vertical-align 属性为vertical-align:top
bottom  middle  text-bottom 都可以解决
.
11、LI中内容超过长度后以省略号显示的技巧
此技巧适用与IE与OP浏览器,如下:

复制代码 代码示例:
<style type="text/css">
<!--
li {
width:200px;
white-space:nowrap;
text-overflow:ellipsis;
-o-text-overflow:ellipsis;
overflow: hidden;
}
-->
</style>

12为什么web标准中IE无法设置滚动条颜色了
解决方法:是将body换成html。如下:

复制代码 代码示例:
<!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">
<!--
html {
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>
相关文章:关于CSS兼容IE6、IE7、FF的技巧总结