css兼容性问题整理

 1<!DOCTYPE 类型 顶级元素(默认html,可省略) 访问权限 "注册//组织//类型 标签定义//语言” URL(引用对象的位置) >详解

1Strict 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”>

3Frameset 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加倍)问题

设置为floatdivie下设置的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-widthmin-height指定元素最小宽度和高度

ie把正常的widthheight当做最小宽度和高度来使。

产生的问题:

如果只用宽度和高度,其他的浏览器里这两个值就不会变,如果只用min-widthmin-height的话,IE下面根本等于没有设置宽度和高度。

解决方法:

因此,其他浏览器heightwidth要设置为automin-heightmin-width设为固定值,ie浏览器heightwidth设为固定值

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;//垂直居中

}

6ie63像素bug

_margin-right:-3px;//_XXXXX只有IE6起作用

7IE捉迷藏问题

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并不希望继续平移,而是希望往下排。(其中floatAfloatB的属性已经设置为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; 当包含floatbox的时候,高度自动适应在IE下无效,这时候应该触发IElayout私有属性(万恶的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属性。

10IE6下为什么图片下有空隙产生

解决这个BUG的技巧也有很多,可以是改变html的排版,或者设置img display:block 或者设置vertical-align 属性为vertical-align:top  

bottom  middle  text-bottom 都可以解决.

11LI中内容超过长度后以省略号显示的技巧

此技巧适用与IEOP浏览器

以下为引用内容:
<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,兼容性)