兼容性问题.docx
- 文档编号:28716233
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:17
- 大小:25.71KB
兼容性问题.docx
《兼容性问题.docx》由会员分享,可在线阅读,更多相关《兼容性问题.docx(17页珍藏版)》请在冰豆网上搜索。
兼容性问题
在网站设计的时候,应该注意css样式兼容不同浏览器问题,特别是对完全使用DIVCSS设计的网,就应该更注意IE6IE7FF对CSS样式的兼容,不然,你的网乱可能出去不想出现的效果!
所有浏览器通用
height:
100px;
IE6专用
_height:
100px;
IE6专用
*height:
100px;
IE7专用
*+height:
100px;
IE7、FF共用
height:
100px!
important;
一、CSSHACK
1,!
important
随着IE7对!
important的支持,!
important方法现在只针对IE6的HACK.(注意写法.记得该声明位置需要提前.)
以下为引用的内容:
#wrapper
{
width:
100px!
important;/*IE7+FF*/
width:
80px;/*IE6*/
}
2,IE6/IE7对FireFox
以下为引用的内容:
*+html与*html是IE特有的标签,firefox暂不支持.而*+html又为IE7特有标签.
#wrapper
{
#wrapper{width:
120px;}/*FireFox*/
*html#wrapper{width:
80px;}/*ie6fixed*/
*+html#wrapper{width:
60px;}/*ie7fixed,注意顺序*/
}
注意:
*+html对IE7的HACK必须保证HTML顶部有如下声明:
DOCTYPEHTMLPUBLIC“-//W3C//DTDHTML4.01Transitional//EN” ”http:
//www.w3.org/TR/html4/loose.dtd”>
二、万能float闭合
关于clearfloat的原理可参见[HowToClearFloatsWithoutStructuralMarkup]
将以下代码加入GlobalCSS中,给需要闭合的div加上class=”clearfix”即可,屡试不爽.
以下为引用的内容:
/*ClearFix*/.clearfix:
after
{
content:
”.”;
display:
block;
height:
0;
clear:
both;
visibility:
hidden;
}
.clearfix
{
display:
inline-block;
}
/*HidefromIEMac*/
.clearfix{display:
block;}
/*EndhidefromIEMac*/
/*endofclearfix*/
三、其他兼容技巧
1,FF下给div设置padding后会导致width和height增加,但IE不会.(可用!
important解决)如width:
115px!
important;width:
120px;padding:
5px;
必须注意的是,!
important;一定要在前面。
2,居中问题.
1).垂直居中.将line-height设置为当前div相同的高度,再通过vertical-align:
middle.(注意内容不要换行.)
2).水平居中.margin:
0auto;(当然不是万能)
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.
兼容代码:
兼容最推荐的模式。
/*FF*/
.submitbutton{
float:
left;
width:
40px;
height:
57px;
margin-top:
24px;
margin-right:
12px;
}
/*IE6*/
*html.submitbutton{
margin-top:
21px;
}
/*IE7*/
*+html.submitbutton{
margin-top:
21px;
}
什么是浏览器兼容:
当我们使用不同的浏览器(FirefoxIE7IE6)访问同一个网站,或者页面的时候,会出现一些不兼容的问题,有的显示出来正常,有的显示出来不正常,我们在编写CSS的时候会很恼火,刚修复了这个浏览器的问题,结果另外一个浏览器却出了新问题。
而兼容就是一种办法,能让你在一个CSS里面独立的写支持不同浏览器的样式。
这下就和谐了。
呵呵!
最近微软发布的IE7浏览器的兼容性确实给一些网页制作人员添加了一个沉重的负担,虽然IE7已经走向标准化,但还是有许多和FF不同的地方,所以需要用到IE7的兼容。
有一点逻辑思想的人都会知道可以用IE和FF的兼容结合起来使用,下面介绍三个兼容,例如:
(适合新手,呵呵,高手就在这里路过吧。
)
程序代码
第一个兼容,IEFF所有浏览器公用(其实也不算是兼容)
height:
100px;
第二个兼容IE6专用
_height:
100px;
第三个兼容IE6IE7公用
*height:
100px;
介绍完了这三个兼容了,下面我们再来看看如何在一个样式里分别给一个属性定义IE6IE7FF专用的兼容,看下面的代码,顺序不能错哦:
程序代码
height:
100px;
*height:
120px;
_height:
150px;
下面我简单解释一下各浏览器怎样理解这三个属性:
在FF下,第2、3个属性FF不认识,所以它读的是height:
100px;
在IE7下,第三个属性IE7不认识,所以它读第1、2个属性,又因为第二个属性覆盖了第一个属性,所以IE7最终读出的是第2个属性*height:
120px;
在IE6下,三个属性IE6都认识,所以三个属性都可以读取,又因为第三个属性覆盖掉前2个属性,所以IE6最终读取的是第三个属性。
1针对firefoxie6ie7的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。
2css布局中的居中问题
主要的样式定义如下:
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;//forie6.0-w\idth:
500px;//forff+ie6.0}
#box{width:
600px!
important//forffwidth:
600px;//forff+ie6.0width/**/:
500px;//forie6.0-}
4浮动ie产生的双倍距离
#box{float:
left;width:
100px;margin:
000100px;//这种情况之下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上也能用,可以把一个
然后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;}
8DIV浮动IE文本产生3象素的bug
左边对象浮动,右边采用外补丁的左边距来定位,右边对象内的文本会离左边有3px的间距.
#box{float:
left;width:
800px;}#left{float:
left;width:
50%;}#right{width:
50%;}*html#left{margin-right:
-3px;//这句是关键}
HTML代码
9属性选择器(这个不能算是兼容,是隐藏css的一个bug)
p[id]{}div[id]{}
这个对于IE6.0和IE6.0以下的版本都隐藏,FF和OPera作用
属性选择器和子选择器还是有区别的,子选择器的范围从形式来说缩小了,属性选择器的范围比较大,如p[id]中,所有p标签中有id的都是同样式的.
10IE捉迷藏的问题
当div应用复杂的时候每个栏中又有一些链接,DIV等这个时候容易发生捉迷藏的问题。
有些内容显示不出来,当鼠标选择这个区域是发现内容确实在页面。
解决办法:
对#layout使用line-height属性或者给#layout使用固定高和宽。
页面结构尽量简单。
11高度不适应
高度不适应是当内层对象的高度发生变化时外层高度不能自动进行调节,特别是当内层对象使用
margin或paddign时。
例:
p对象中的内容
CSS:
#box{background-color:
#eee;}
#boxp{margin-top:
20px;margin-bottom:
20px;text-align:
center;}
解决方法:
在P对象上下各加2个空的div对象CSS代码:
.1{height:
0px;overflow:
hidden;}或者为DIV加上border属性。
屏蔽IE浏览器(也就是IE下不显示)
*:
lang(zh)select{font:
12px!
important;}/*FF,OP可见*/
select:
empty{font:
12px!
important;}/*safari可见*/
这里select是选择符,根据情况更换。
第二句是MAC上safari浏览器独有的。
仅IE7识别
*+html{…}
当面临需要只针对IE7做样式的时候就可以采用这个兼容。
IE6及IE6以下识别
*html{…}
这个地方要特别注意很多地主都写了是IE6的兼容其实IE5.x同样可以识别这个兼容。
其它浏览器不识别。
html/**/>bodyselect{……}
这句与上一句的作用相同。
仅IE6不识别
select{display/*IE6不识别*/:
none;}
这里主要是通过CSS注释分开一个属性与值,流释在冒号前。
仅IE6与IE5不识别
select/**/{display/*IE6,IE5不识别*/:
none;}
这里与上面一句不同的是在选择符与花括号之间多了一个CSS注释。
仅IE5不识别
select/*IE5不识别*/{display:
none;}
这一句是在上一句中去掉了属性区的注释。
只有IE5不识别
盒模型解决方法
selct{width:
IE5.x宽度;voice-family:
""}"";voice-family:
inherit;width:
正确宽度;}
盒模型的清除方法不是通过!
important来处理的。
这点要明确。
清除浮动
select:
after{content:
".";display:
block;height:
0;clear:
both;visibility:
hidden;}
在Firefox中,当子级都为浮动时,那么父级的高度就无法完全的包住整个子级,那么这时用这个清除浮动的兼容来对父级做一次定义,那么就可以解决这个问题。
截字省略号
select{-o-text-overflow:
ellipsis;text-overflow:
ellipsis;white-space:
nowrapoverflow:
hidden;}
这个是在越出长度后会自行的截掉多出部分的文字,并以省略号结尾,很好的一个技术。
只是目前Firefox并不支持。
只有Opera识别
@mediaalland(min-width:
0px){select{……}}
针对Opera浏览器做单独的设定。
以上都是写CSS中的一些兼容,建议遵循正确的标签嵌套(divulli嵌套结构关系),这样可以减少你使用兼容的频率,不要进入理解误区,并不是一个页面就需要很多的兼容来保持多浏览器兼容),很多情况下也许一个兼容都不用也可以让浏览器工作得非常好,这些都是用来解决局部的兼容性问题,如果希望把兼容性的内容也分离出来,不妨试一下下面的几种过滤器。
这些过滤器有的是写在CSS中通过过滤器导入特别的样式,也有的是写在HTML中的通过条件来链接或是导入需要的补丁样式。
IE5.x的过滤器,只有IE5.x可见
@mediatty{
i{content:
"";/*""*/}}@import’ie5win.css’;/*";}
}/**/
IE5/MAC的过滤器,一般用不着
/**//*/
@import"ie5mac.css";
/**/
下面是IE的条件注释,个人觉得用条件注释调用相应兼容是比较完美的多浏览器兼容的解决办法。
把需要兼容的地方单独放到一个文件里面,当浏览器版本符合的时候就可以调用那个被兼容的样式,这样不仅使用起来非常方便,而且对于制作这个CSS本身来讲,可以更严格的观察到是否有必要使用兼容,很多情况下,当我本人写CSS如果把全部代码包括兼容都写到一个CSS文件的时候的时候会很随意,想怎么兼容就怎么兼容,而你独立出来写的时候,你就会不自觉的考虑是否有必要兼容,是先兼容CSS?
还是先把主CSS里面的东西调整到尽可能的不需要兼容?
当你仅用很少的兼容就让很多浏览器很乖很听话的时候,你是不是很有成就感呢?
你知道怎么选择了吧~~呵呵
IE的if条件兼容自己可以灵活使用参看这篇IE条件注释
OnlyIE
所有的IE可识别
只有IE5.0可以识别
OnlyIE5.0+
IE5.0包换IE5.5都可以识别
仅IE6可识别
OnlyIE7/-
IE6以及IE6以下的IE5.x都可识别
OnlyIE7/-
仅IE7可识别
Css当中有许多的东西不按照某些规律来的话,会让你很心烦,虽然你可以通过很多的兼容,很多的!
important来控制它,但是你会发现长此以往你会很不甘心,看看许多优秀的网站,他们的CSS让IE6,Ie7,Firefox,甚至Safari,Opera运行起来完美无缺是不是很羡慕?
而他们看似复杂的模版下面使用的兼容少得可怜。
其实你要知道IE和Firefox并不不是那么的不和谐,我们找到一定的方法,是完全可以让他们和谐共处的。
不要你认为发现了兼容的办法,你就掌握了一切,我们并不是兼容的奴隶。
divulli的嵌套顺序
今天只讲一个规则。
就是
- 的三角关系。
我的经验就是
在最外面,里面是- ,然后再是
- ,当然
- 里面又可以嵌套什么的,但是并不建议你嵌套很多东西。
当你符合这样的规则的时候,那些倒霉的,不听话的间隙就不会在里面出现了,当你仅仅是
里面放- ,而不用
- 的时候,你会发现你的间隙十分难控制,一般情况下,IE6和IE7会凭空多一些间距。
- 标记的最前方显示圆点或者数字等目录类型的标记,因为IE和Firefox显示出来默认效果有些不一样。
因此这样不需要做任何手脚,你的IE6、和IE7、Firefox显示出来的东西(外距,间距,高度,宽度)就几乎没什么区别了,也许细心的你会在某一个时刻发现:
两个象素的差别,但那已经很完美了,不需要你通过调整大片的CSS来控制它们的显示了,你愿意,你可以仅仅兼容一两个地方,而且通常这种兼容可以适应各种地方,不需要你重复在不同的地方调试不同的兼容方式–减轻你的烦。
你可以ul.class1,ul.class2,ul.class3{xxx:
xxxx}的方式方便的整理出你要兼容的地方,而统一兼容。
尝试一下吧,再也不要乱嵌套了,虽然在Div+CSS的方式下你几乎可以想怎么嵌套就怎么嵌套,但是按照上面的规律你将轻松很多,从而事半功倍!
六、CSS兼容要点分析IEvsFF
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可以同时在IEFF中显示游标手指状,hand仅IE可以
FF:
链接加边框和背景色,需设置display:
block,同时设置float:
left保证不换行。
参照menubar,给a和menubar设置高度是为了避免底边显示错位,若不设height,可以在menubar中插入一个空格XHTML+CSS兼容性解决方案小集
使用XHTML+CSS构架好处不少,但也确实存在一些问题,不论是因为使用不熟练还是思路不清晰,我就先把一些我遇到的问题写在下面,省的大家四处找^^
1、在mozillafirefox和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:
300
但很多情况你来到下一行,间隙就没了,但是前面的内容又空了很大一块,出现这种情况虽然你可以改变IE的Margin,然后调整Firefox下面的Padding,以便使得两者显示起来得效果很相似,但是你得CSS将变得臭长无比,你不得不多考虑更多可能出现这种问题补救措施,虽然你知道千篇一律来兼容它们,但是你会烦得要命。
具体嵌套写法
遵循上面得嵌套方式,
然后在CSS里面告诉ul{Margin:0px;Padding:
0px;list-style:
none;},其中list-style:
none是不让
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 兼容性问题
冰豆网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。关于本文 - ,而不用