今天发现一个问题:在FireFox里,</br>换行失效,将其改为<br/>就显示成功!!!
div+css 在IE、FF下兼容性总结
1.DOCTYPE 影响 CSS 处理。
2.FF居中: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行。
3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中。
详解:
body {TEXT-ALIGN: center;}
#center { MARGIN-RIGHT: auto; MARGIN-LEFT: auto; }
说明:
首先在父级元素定义TEXT-ALIGN: center;这个的意思就是在父级元素内的内容居中;对于IE这样设定就已经可以了。
但在mozilla中不能居中。解决办法就是在子元素定义时候设定时再加上 “MARGIN-RIGHT: auto;MARGIN-LEFT: auto; ”
需要说明的是,如果你想用这个方法使整个页面要居中,建议不要套在一个DIV里,你可以依次拆出多个div,
只要在每个拆出的div里定义MARGIN-RIGHT: auto;MARGIN-LEFT: auto; 就可以了。
4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用hack方法多设一个 height 和 width。
5.FF、IE7.0: 支持 !important, IE6.0 则忽略。
6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行。
7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以。
8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。
9.在FF和IE中的BOX模型解释不一致导致相差2px解决方法:div{margin:30px;*margin:28px; _margin:28px;}。
10.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义ul{margin:0;padding:0;}。
11、float的div一定要闭合。
例如:floatA、floatB的属性已经设置为float:left;
<#div id="floatA" >
<#div id="floatB" >
<#div id="NOTfloatC" >
这里的NOTfloatC并不希望继续平移,而是希望往下排。
这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。
在<#div class="floatB">
<#div class="NOTfloatC">
之间加上<#div class="clear">
这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。
并且将clear这种样式定义为为如下即可:.clear{clear:both;}
此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;
当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性,用zoom:1;可以做到,这样就达到了兼容。
例如某一个wrapper如下定义:.colwrapper{
overflow:hidden;
zoom:1;
margin:5px auto;}
12、margin加倍的问题。
设置为float的div在ie下设置的margin会加倍。这是一个ie6.0都存在的bug。解决方案是在这个div里面加上display:inline;
例如:
<#div id="imfloat">
相应的css为
#IamFloat{
float:left;
margin:5px;/*IE6.0下理解为10px*/
display:inline;/*IE6.0下再理解为5px*/}
13、关于容器的包涵关系
很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。
14、关于高度的问题
如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。
15、CSS用于文档打印
许多网站上都有一个针对打印的版本,但实际上这并不需要,因为可以用CSS来设定打印风格。
也就是说,可以为页面指定两个CSS文件,一个用于屏幕显示,一个用于打印:
<link type="text/css" rel="stylesheet" href="/blog/stylesheet.css" media="screen" />
<link type="text/css" rel="stylesheet" href="printstyle.css" media="print" />
第1行就是显示,第2行是打印,注意其中的media属性。
但应该在打印CSS中写什么东西呢?你可以按设计普通CSS的方法来设定它。设计的同时就可以把这个CSS设成显示CSS来检查它的效果。也许你会使用 display: none 这个命令来关掉一些装饰图片,再关掉一些导航按钮。
16、若需给 a 标签内内容加上样式,需要设置 display: block;(常见于导航标签)。
17、overflow:hidden控制firefox下div两列背景溢出。
实例解释:
<div class="w">
<div class="d1">左侧</div><div class="d2">右侧</div>
</div>
样式定义:
.w {width:400px;}
.d1 {height:50px;float:left;}
.d2 {height:50px;background:#F9EDFA;border:2px dotted #A63DAD;}
效果1:
如果将d2定义为:
.d2 {height:50px;background:#F9EDFA;border:2px dotted #A63DAD;overflow:hidden}
效果2:
18、作为外部 wrapper 的 div 不要定死高度, 最好还加上 overflow: hidden.以达到高度自适应。
19、导航栏按钮问题。
实例解释:
比如这个条件:
margin:3px 3px 0px 3px;
display:block;
通过测试,IE6和IE7浏览器,表现得就有区别。IE6表现得就很松散,似乎不止3px的左右距离而变成了双倍距离,即6px;
将display:block;这个条件变成了display:inline;后,IE6正常了,不再出现那么大的距离,而且比较准确;但IE7又不正常了,似乎右边的距离变小(几乎没有),左边的距离正常。
之后加进了一些条件,将css里的条件改成这样:
*margin:3px 8px 0px 3px !important; /***适合IE7.0***/
*margin:3px 3px 0px 3px; /****适合IE6.0***/
margin:3px 8px 0px 3px; /*****适合FF*****/
*display:block !important; /***适合IE7.0***/
*display:inline; /***适合IE6.0***/
display:block; /*****适合FF*****/
为什么这样做呢?原因如下:
IE7.0 兼容任何条件,既能识别*号,也能识别 !important ;
IE6.0 能识别*号,但不能识别 !important ;
FF(火狐)能识别 !important ,但不能识别*号。
那这样一来,如果对方用的FF,那就只能识别margin:3px 8px 0px 3px; 而不能识别上面的两个条件了。
如果对方用的IE6.0 ,那第一个条件不能满足,只能优先识别第二个条件:*margin:3px 3px 0px 3px;
如果对方用的IE7.0,那首先第一个条件就满足了,优先考虑: *margin:3px 8px 0px 3px !important;
20、自适应高度实例解析
以前写css是在ie6下高度自适应这个问题我们都不用想了直接设置height:auto;或不设置就可以了,但是在fox和现在ie7,8下就会出现问题了,下面我们就来写一段div 高度自适应写法台。
先看看css布置代码。
<div class="pageCotent">
<div class="pageLeft"><div>
<div class="pageRight"></div>
</div>
上面的代码是要pageLeft,与pageRight分为左右,并且还要自适应高度。
.pageRight{
width:320px;
height:auto;
float:right;
height:600px;
text-align:center;
}
.pageLeft{
width:650px;
height:auto;
float:left;
height:600px;
border-right:1px solid #cee8cd;
padding-right:8px;
clear:both;
position:relative;overflow:auto;height:auto;
}
红色这句很重要,这样就会左右分开并且还会自动根据内容div高度而自适应了。
21、1 针对firefox ie6 ie7的css样式
现在大部分都是用!important来hack,对于ie6和firefox测试可以正常显示,但是ie7对!important可以正确解释,会导致页面没按要求显示!找到一个针对IE7不错的hack方式就是使用“*+html”,现在用IE7浏览一下,应该没有问题了现在写一个CSS可以这样:
#1 { color: #333; } /* Moz */
* html #1 { color: #666; } /* IE6 */
*+html #1 { color: #999; } /* IE7 */
那么在firefox下字体颜色显示为#333,IE6下字体颜色显示为#666,IE7下字体颜色显示为#999。
22、盒模型不同解释.
#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-(ie6.0以下版本)
}
23、浮动ie产生的双倍距离
#box{ float:left; width:100px; margin:0 0 0 100px; //这种情况之下IE会产生200px的距离
display:inline; //使浮动忽略}
这里细说一下block,inline两个元素,Block元素的特点是:总是在新行上开始,高度,宽度,行高,边距都可以控制(块元素);Inline元素的特点是:和其他元素在同一行上,…不可控制(内嵌元素)。
#box{ display:block; //可以为内嵌元素模拟为块元素
display:inline; //实现同一行排列的的效果
diplay:table;
24、IE与宽度和高度的问题
IE不认得min-这个定义,但实际上它把正常的width和height当作有min的情况来使。这样问题就大了,如果只用宽度和高度,正常的浏览器里这两个值就不会变,如果只用min-width和min-height的话,IE下面根本等于没有设置宽度和高度。比如要设置背景图片,这个宽度是比较重要的。要解决这个问题,可以这样:
#box{ width: 80px; height: 35px;}
html>body #box{ width: auto; height: auto; min-width: 80px; min-height: 35px;}
25、页面的最小宽度
min-width是个非常方便的CSS命令,它可以指定元素最小也不能小于某个宽度,这样就能保证排版一直正确。但IE不认得这个,而它实际上把 width当做最小宽度来使。为了让这一命令在IE上也能用,可以把一个<div> 放到 <body> 标签下,然后为div指定一个类:
然后CSS这样设计:
#container{
min-width: 600px;
width:expression(document.body.clientWidth < 600? “600px”: “auto” );
}
第一个min-width是正常的;但第2行的width使用了Javascript,这只有IE才认得,这也会让你的HTML文档不太正规。它实际上通过Javascript的判断来实现最小宽度。
26、清除浮动
.hackbox{
display:table;
//将对象作为块元素级的表格显示
}
或者
.hackbox{
clear:both;
}
或者加入:after(伪对象),设置在对象后发生的内容,通常和content配合使用,IE不支持此伪对象,非Ie 浏览器支持,所以并不影响到IE/WIN浏览器。
#box:after{
content: “.”;
display: block;
height: 0;
clear: both;
visibility: hidden;
}
27、DIV浮动IE文本产生3象素的bug
左边对象浮动,右边采用外补丁的左边距来定位,右边对象内的文本会离左边有3px的间距。
#box{
float:left;
width:800px;}
#left{
float:left;
width:50%;}
#right{
width:50%;
}
*html #left{
margin-right:-3px;
//这句是关键
}
HTML代码
<DIV id=box>
<DIV id=left></DIV>
<DIV id=right></DIV>
</DIV>
28、属性选择器
p[id]{}div[id]{}
p[id]{}div[id]{}
这个对于IE6.0和IE6.0以下的版本都隐藏,FF和OPera作用。
属性选择器和子选择器还是有区别的,子选择器的范围从形式来说缩小了,属性选择器的范围比较大,如p[id]中,所有p标签中有id的都是同样式的.
29、IE捉迷藏的问题
当div应用复杂的时候每个栏中又有一些链接,DIV等这个时候容易发生捉迷藏的问题。
有些内容显示不出来,当鼠标选择这个区域是发现内容确实在页面。
解决办法:对#layout使用line-height属性 或者给#layout使用固定高和宽。页面结构尽量简单。
29、高度不适应
高度不适应是当内层对象的高度发生变化时外层高度不能自动进行调节,特别是当内层对象使用margin 或paddign 时。例:
<div id=”box”>
<p>p对象中的内容</p>
</div>
CSS:
#box {background-color:#eee; }
#box p {margin-top: 20px;margin-bottom: 20px; text-align:center; }
解决方法:在P对象上下各加2个空的div对象CSS代码:.1{height:0px;overflow:hidden;}或者为DIV加上border属性。