CSS完美兼容IE6IE7IE8IE9IE10的通⽤⽅法
关于 CSS对各个浏览器兼容已经是⽼⽣常谈的问题了, ⽹络上的教程遍地都是.以下内容没有太多新颖, 纯属个⼈总结, 希望能对初学者有⼀定的帮助. ⼀、 CSS HACK 以下两种⽅法⼏乎能解决现今所有HACK. 1, !important 随着IE7对!important的⽀持, !important ⽅法现在只针对…
⼀、CSS HACK
以下两种⽅法⼏乎能解决现今所有HACK.
1, !important
随着IE7对!important的⽀持, !important ⽅法现在只针对IE6的HACK.(注意写法.记得该声明位置需要提前.)
以下为引⽤的内容:
<style>
#wrapper
{
width: 100px!important; /* IE7+FF */
width: 80px; /* IE6 */
}
< /style>
2, IE6/IE77对FireFox
以下为引⽤的内容:
*+html 与 *html 是IE特有的标签, firefox 暂不⽀持.⽽*+html ⼜为 IE7特有标签.
< style>
#wrapper
{
#wrapper { width: 120px; } /* FireFox */
*html #wrapper { width: 80px;} /* ie6 fixed */
*+html #wrapper { width: 60px;} /* ie7 fixed, 注意顺序 */
}
< /style>
注意:
*+html 对IE7的HACK 必须保证HTML顶部有如下声明:
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” ”/TR/html4/loose.dtd”>⼆、万能 float 闭合
关于 clear float 的原理可参见 [How To Clear Floats Without Structural Markup]
将以下代码加⼊Global CSS 中,给需要闭合的div加上 即可,屡试不爽.
以下为引⽤的内容:
<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>
三、其他兼容技巧
1, FF下给 div 设置 padding 后会导致 width 和 height 增加, 但IE不会.(可⽤!important解决)
2, 居中问题.
1).垂直居中.将 line-height 设置为 当前 div 相同的⾼度, 再通过 vertical-align: middle.( 注意内容不要换⾏.)
2).⽔平居中. margin: 0 auto;(当然不是万能)
3, 若需给 a 标签内内容加上 样式, 需要设置 display: block;(常见于导航标签)
4, FF 和 IE 对 BOX 理解的差异导致相差 2px 的还有设为 float的div在ie下 margin加倍等问题.
5, ul 标签在 FF 下⾯默认有 list-style 和 padding . 最好事先声明, 以避免不必要的⿇烦. (常见于导航标签和内容列表)
6, 作为外部 wrapper 的 div 不要定死⾼度, 最好还加上 overflow: hidden.以达到⾼度⾃适应.
7, 关于⼿形光标. cursor: pointer. ⽽hand 只适⽤于 IE.
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。
2 css布局中的居中问题
css布局左边固定右边自适应主要的样式定义如下:
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; 就可以了。
3 盒模型不同解释
#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-}
4 浮动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;
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;}
6 页⾯的最⼩宽度
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的判断来实现最⼩宽度。
7 清除浮动
.hackbox{ display:table; //将对象作为块元素级的表格显⽰}或者.hackbox{ clear:both;}
或者加⼊:after(伪对象),设置在对象后发⽣的内容,通常和content配合使⽤,IE不⽀持此伪对象,⾮Ie 浏览器⽀持,
所 以并不影响到IE/WIN浏览器。这种的最⿇烦的……#box:after{ content: “.”; display: block; height: 0; clear: both; visibility: hidden;}
8 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>
9 属性选择器(这个不能算是兼容,是隐藏css的⼀个bug)
p[id]{}div[id]{}
这个对于IE6.0和IE6.0以下的版本都隐藏,FF和OPera作⽤
属性选择器和⼦选择器还是有区别的,⼦选择器的范围从形式来说缩⼩了,属性选择器的范围⽐较⼤,如p[id]中,所有p标签中有id的都是同样式的.
10 IE捉迷藏的问题
当div应⽤复杂的时候每个栏中⼜有⼀些链接,DIV等这个时候容易发⽣捉迷藏的问题。
有些内容显⽰不出来,当⿏标选择这个区域是发现内容确实在页⾯。
解决办法:对#layout使⽤line-height属性 或者给#layout使⽤固定⾼和宽。页⾯结构尽量简单。
11 ⾼度不适应
⾼度不适应是当内层对象的⾼度发⽣变化时外层⾼度不能⾃动进⾏调节,特别是当内层对象使⽤
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属性。
六、CSS兼容要点分析IE vs FF
CSS 兼容要点:
DOCTYPE 影响 CSS 处理
FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不⾏
FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) ⽅可居中
FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要⽤ !important 多设⼀个 height 和 width
FF: ⽀持 !important, IE 则忽略, 可⽤ !important 为 FF 特别设置样式
div 的垂直居中问题: vertical-align:middle; 将⾏距增加到和整个DIV⼀样⾼ line-height:200px; 然后插⼊⽂字,就垂直居中了。缺点是要控制内容不要换⾏
cursor: pointer 可以同时在 IE FF 中显⽰游标⼿指状, hand 仅 IE 可以
FF: 链接加边框和背景⾊,需设置 display: block, 同时设置 float: left 保证不换⾏。参照 menubar, 给 a 和 menubar 设置⾼度是为了避免底边显⽰错位, 若不设 height, 可以在 menubar 中插⼊⼀个空格XHTML+CSS兼容性解决⽅案⼩集
使⽤XHTML+CSS构架好处不少,但也确实存在⼀些问题,不论是因为使⽤不熟练还是思路不清晰,我就先把⼀些我遇到的问题写在下⾯,省的⼤家四处^^
1、在mozilla firefox和IE中的BOX模型解释不⼀致导致相差2px解决⽅法:
div{margin:30px!important;margin:28px;}
注意这两个margin的顺序⼀定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样:
div{maring:30px;margin:28px}
重复定义的话按照最后⼀个来执⾏,所以不可以只写margin:XXpx!important;
2、IE5 和IE6的BOX解释不⼀致IE5下div{width:300px;margin:0 10px 0 10px;}div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,⽽在IE6和其他浏览器上宽度则 是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改
div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}
关于这个/**/是什么我也不太明⽩,只知道IE5和firefox都⽀持但IE6不⽀持,如果有⼈理解的话,请告诉我⼀声,谢了!:)
3、ul标签在Mozilla中默认是有padding值的,⽽在IE中只有margin有值所以先定义
ul{margin:0;padding:0;}
就能解决⼤部分问题
4、关于脚本,在xhtml1.1中不⽀持language属性,只需要把代码改为
< type=”text/java”>
就可以了
七、10个你未必知道的CSS技巧
1、CSS字体属性简写规则
⼀般⽤CSS设定字体属性是这样做的:
以下为引⽤的内容:
font-weight:bold;
font-style:italic;
font-varient:small-caps;
font-size:1em;
line-height:1.5em;
font-family:verdana,sans-serif;
但也可以把它们全部写到⼀⾏上去:
font: bold italic small-caps 1em/1.5em verdana,sans-serif;
真不错!只有⼀点要提醒的:这种简写⽅法只有在同时指定font-size和font-family属性时才起作⽤。⽽且,如果你没有设定font-weight, font-style, 以及 font-varient ,他们会使⽤缺省值,这点要记上。
2、同时使⽤两个类
⼀般只能给⼀个元素设定⼀个类(Class),但这并不意味着不能⽤两个。事实上,你可以这样:
<p>…</p>
同时给P元素两个类,中间⽤空格格开,这样所有text和side两个类的属性都会加到P元素上来。如果它们两个类中的属性有冲突的话,后设置的起作⽤,即在CSS⽂件中放在后⾯的类的属性起作⽤。
补充:对于⼀个ID,不能这样写<p id=”text side”>…</p>也不能这样写
3、CSS border的缺省值
通常可以设定边界的颜⾊,宽度和风格,如:
border: 3px solid #000
这位把边界显⽰成3像素宽,⿊⾊,实线。但实际上这⾥只需要指定风格即可。
如果只指定了风格,其他属性就会使⽤缺省值。⼀般地,Border的宽度缺省是medium,⼀般等于3到4个像素;缺省的颜⾊是其中⽂字的颜⾊。如果这个值正好合适的话,就不⽤设那么多了。
4、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 这个命令来关掉⼀些装饰图⽚,再关掉⼀些导航按钮。要想了解更多,可以看“打印差异”这⼀篇。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。