关于浏览器兼容问题及hack写法

浏览器的兼容问题

1.浏览器内核:

Mozilla Firefox ( Gecko )

Internet Explorer ( Trident )

Opera ( Presto )

Safari ( WebKit )

Google Chrome ( WebKit )

2.css hack

解决浏览器兼容的主要方法是css hack

由于不同的浏览器对CSS的支持及解析结果不一样,还由于CSS中的优先级的关系。我们就可以根据这个来针对不同的浏览器来写不同的CSS。


IE6


IE7


IE8


Firefox


Opera


Safari


!important


Y


Y


Y


Y


Y


_


Y


*


Y


Y


*+


Y


\9


Y


Y


Y


\0


Y


nth-of-type(1)


Y


Y

如何解决浏览器的兼容性

在head标签中加入meta 类型<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />,这样就解决了ie7、ie8兼容问题。现在剩下ie6、ie7、Firefox、Chrome(Safari与Chrome使用同一内核)、Opera这几种浏览器的兼容性问题,我们需要使用CSS Hack来解决该问题。代码如下所示:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />

<title>浏览器兼容性问题</title>

<style type="text/css">

.t1

{

color:#000000; /* 所有浏览器都支持 此处填写Firefox的css*/

*color:#0000FF; /* ie6 id7 支持 此处填写ie7的css*/

_color:#66CCCC; /* ie6支持  此处填写ie6的css*/

}

@media all and (-webkit-min-device-pixel-ratio:10000), not all and (-webkit-min-device-pixel-ratio:0)

{ .t1{color:#9900FF}} /* oprea支持  此处填写oprea的css*/

@media screen and (-webkit-min-device-pixel-ratio:0)

{

.t1{color:#336600}/* Chrome、Safari支持  此处填写Chrome的css*/

}

</style>

</head>

<body>

<div class="t1">ff、ie8、ie7、ie6、oprea、Safari兼容性css 书写模式<br>

.t1{

color:#000000; /* 所有浏览器都支持 此处填写Firefox的css**/<br>

*color:#0000FF; /* ie6 id7 支持 此处填写ie7的css*/<br>

_color:#66CCCC; /* ie6支持  此处填写ie6的css*/<br>

}<br>

/* oprea支持此处填写oprea的css*/<br>

@media all and (-webkit-min-device-pixel-ratio:10000), not all and (-webkit-min-device-pixel-ratio:0)<br>

{ .t1{color:#CC66FF}}<br>

/* Chrome、Safari支持 此处填写Chrome的css*/<br>

@media screen and (-webkit-min-device-pixel-ratio:0)

{

.t1{color:#336600}}

}

</div>

</div>

</body>

</html>

1. 默认的内外边距不同

问题:

各个浏览器默认的内外边距不同

解决:

*{margin:0;padding:0;}

2. 水平居中的问题

问题:

设置 text-align: center

ie6-7文本居中,嵌套的块元素也会居中

ff /opera /safari /ie8文本会居中,嵌套块不会居中

解决:

块元素设置

1、margin-left:auto;margin-right:auto

2、margin:0 auto;

3、<div align=”center”></div>

3. 垂直居中的问题

问题:

在浏览器中 想要垂直居中,设置vertical-align:middle; 不起作用。例如:ie6下文本与文本输入框对不齐,需设置vertical-align:middle1,但是文本框的内容不会垂直居中

解决:

给容器设置一个与其高度相同的行高

line-height:与容器的height一样

4. 关于高度问题

问题:

如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。

如果设定了高度,内容过多时,ie6下会自动增加高度、其他浏览器会超出边框

解决:

1.设置overflow:hidden;

2.高度自增height:auto!important;height:100px;

5. IE6 默认的div高度

问题:

ie6默认div高度为一个字体显示的高度,所在ie6下div的高度大于等于一个字的高度,因此在ie6下定义高度为1px的容器,显示的是一个字体的高度

解决:

为这个容器设置下列属性之一

1、设置overflow:hidden;

2、设置line-height:1px;

3、设置zoom:0.08

6. IE6 最小高度(宽度)的问题

问题:

ie6不支持min-height、min-width属性,默认height是最小高度,width是最小宽度。

解决:

    使用ie6不支持但其余浏览器支持的属性!important。

设置属性min-height:200px; height:auto !important; height:200px;

7. td高度的问题

问题:

table中td的宽度都不包含border的宽度,但是oprea和ff中td的高度包含了border的高度

解决:

设置line-height和height一样。在ie中如果td中的没有内容,那么border将不会显示

8. div嵌套p时,出现空白行

问题:

div中显示<p>文本</p>,ff、oprea、Chrome:top和bottom都会出现空白行,但是在ie下不会出现空白行。

解决:

设置p的margin:0px,再设置div的padding-top和padding-bottom

9. IE6-7图片下面有空隙的问题

问题:

块元素中含有图片时,ie6-7中会出现图片下有空隙

解决:

1、在源代码中让</div>和<img>在同一行

2、将图片转换为块级对象display:block;

3、设置图片的垂直对齐方式  vertical-align:top/middle/bottom

4、改变父对象的属性,如果父对象的宽、高固定,图片大小随父对象而定,那么可以对父元素设置: overflow:hidden; 

5、设置图片的浮动属性  float:left;

10. IE6双倍边距的问题

问题:

ie6中设置浮动,同时又设置margin时,会出现双倍边距的问题

float:left;width:100px;margin:0 100px; 

解决:

       设置display:inline;

10. IE6双倍边距的问题

问题:

ie6中设置浮动,同时又设置margin时,会出现双倍边距的问题

float:left;width:100px;margin:0 100px; 

解决:

       设置display:inline;

12. IE6两个层之间3px的问题

问题:

       左边层采用浮动,右边没有采用浮动,这时在ie6中两层之间就会产生3像素的间距

解决:

1、右边层也采用浮动  float

2、左边层添加属性  margin-right:-3px;

13. IE6 子元素绝对定位的问题

问题:

       父级元素使用padding后,子元素使用绝对定位,不能精确定位

解决:

       在子元素中设置  _left:-20px; _top:-1px;

 

14. 显示手型cursor:hand

问题:

       ie6/7/8、opera       都支持  但是safari 、 ff 不支持

解决:

写成 cursor:pointer;  (所有浏览器都能识别)   

15. IE6-7 line-height失效的问题

问题:

       在ie中img与文字放一起时, line-height不起作用 

解决:

都设置成float

16. td自动换行的问题

问题:

Table宽度固定,td自动换行

解决:

设置Table的table-layout:fixed,td的word-wrap:break-word

18. 透明png图片会带背景色

问题:

在ie6下透明的png图片会带一个背景色

解决:

background-image: url(icon_home.png);/* 其他浏览器 */

background-repeat: no-repeat;

_filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=‘icon_home.png‘); /* IE6 */

_background-image: none; /* IE6 */

23. ul或li浮动后,显示在div外

问题:

div中的ul或li设置float以后,都不在div中

解决:

必须在ul标签后加<div style="clear:both"></div>来闭合外层div

32. li中的内容以省略号显示

问题:

li中内容超过长度时,想以省略号显示, 此方法适用于ie6-7-8、opera、safari浏览器

ff浏览器不支持

解决:

li{width:200px; white-space:nowrap;text-overflow:ellipsis;

-o-text-overflow:ellipsis; overflow: hidden; }

 

35. 除去滚动条的问题

问题:

       隐藏滚动条

解决:

1、只有ie6-7支持<body scroll="no">

2、除ie6-7不支持 body{overflow:hidden}

3、所有浏览器 html{overflow:hidden}

41. ff、chrome绝对定位无效

问题:

在IE给td设置position:relative,然后给它包含的一个容器使用position:absolute进行定位是有效的,但在FF和Chrome下却不可以。

解决:

设置td的display:block。

42. IE6 绝对定位的问题

问题:

<div style="position:relative;border:1px solid orange;text-align:center;">

<div style="position:absolute;top:0;left:0;

background:#CCC;">dovapour</div>

<a href="#" title="vapour的blog">内容</a>

</div>

解决:

left的定位错误问题

1、给父层设置zoom:1触发layout。

2、给父层设置宽度width

bottom的定位错误问题

1、给父层设置zoom:1触发layout。

2、给父层设置高度height

3. 子容器宽度大于父容器宽度时,内容超出

问题:

子DIV的宽度和父DIV的宽度都已经定义,在IE6中如果其子DIV的宽度大于父DIV的宽度,父DIV的宽度将会被扩展,在其他浏览器中父DIV的宽度将不会扩展,子DIV将超出父DIV

解决:

设置overflow:hidden,子DIV将不会超出父DIV。

12、设置滚动条颜色 只对ie系列有效 在html中 而不是设置body

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

IE不支持float:inherit  overflow:hidden有2个用法,一个是隐藏溢出,另一个是清除浮动。

<div>, <p>, <h1>, <form>, <ul> 和 <li>是块元素的例子

<span>, <a>, <label>, <input>, <img>, <strong> 和<em>是inline元素

<body oncontextmenu="return false" ondragstart="return false"  tstart="return false"  scroll="auto">

这行代码放在body中,去掉了页面鼠标右键快捷菜单,达到防止图片另存为的目的。

时间: 2024-10-14 03:32:07

关于浏览器兼容问题及hack写法的相关文章

主流浏览器的内核以及Hack写法

要搞清楚浏览器内核是什么,首先应该先搞清楚浏览器的构成.简单来说浏览器可以分为两部分,shell+内核.其中shell的种类相对比较多,内核则比较少.Shell是指浏览器的外壳:例如菜单,工具栏等.主要是提供给用户界面操作,参数设置等等.它是调用内核来实现各种功能的.内核才是浏览器的核心.内核是基于标记语言显示内容的程序或模块.也有一些浏览器并不区分外壳和内核.从Mozilla将Gecko独立出来后,才有了外壳和内核的明确划分.目前主流的浏览器有IE6.IE8.Mozilla. FireFox.

浏览器兼容的css hack

<style> div{ background:green; /* for firefox */ *background:red; /* for IE6 */ } </style> <div>aasdasdasd </div>

浏览器兼容 各浏览器的Hack写法 [出处:W3CPLUS]

Hack是针对不同的浏览器去写不同的CSS样式,从而让各浏览器能达到一致的渲染效果,那么针对不同的浏览器写不同的CSS CODE的过程,就叫CSS HACK,同时也叫写CSS Hack.然后将Hack放在浏览器特定的CSS文件中,让其符合条件的浏览器解析这些代码,就如前面所说的条件样式,我们将CSS Hack代码放入条件样式文件中,符合条件的浏览器就解析,不符合的将不解析,从面达到您所需要的页面渲染效果.总的一句话来说使用CSS Hack将会使用你的CSS代码部分失去作用,然后借助条件样式,使用

各浏览器的Hack写法

虽然和大家在一起学习各浏览器的Hack的写法,但我还是要说"Hack对于一位专业的前端攻程师来说并不是一样很好的东西,我力求处理浏览器兼容,尽量不使用Hack写法来处理,除非实在没有办法的情况下,再加以使用."下面我们先来简单的了解一下什么是CSS Hack. Hack是针对不同的浏览器去写不同的CSS样式,从而让各浏览器能达到一致的渲染效果,那么针对不同的浏览器写不同的CSS CODE的过程,就叫CSS HACK,同时也叫写CSS Hack.然后将Hack放在浏览器特定的CSS文件中

各种浏览器的Hack写法(chrome firefox ie等)

Hack是针对不同的浏览器去写不同的CSS样式,从而让各浏览器能达到一致的渲染效果,那么针对不同的浏览器写不同的CSS CODE的过程,就叫CSS HACK,同时也叫写CSS Hack.然后将Hack放在浏览器特定的CSS文件中,让其符合条件的浏览器解析这些代码,就如前面所说的条件样式,我们将CSS Hack代码放入条件样式文件中,符合条件的浏览器就解析,不符合的将不解析,从面达到您所需要的页面渲染效果.总的一句话来说使用CSS Hack将会使用你的CSS代码部分失去作用,然后借助条件样式,使用

css 浏览器兼容解决方法大全

1.Firefox @-moz-document url-prefix() { .selector { property: value; } } 上面是仅仅被Firefox浏览器识别的写法,具体如: @-moz-document url-prefix() { .demo { color:lime; } } 支持Firefox的还有几种写法: /* 支持所有firefox版本 */ #selector[id=selector] { property: value; } 或者: @-moz-docu

CSS Hack (各个浏览器兼容的问题)

写css样式的时候,恐怕最头疼的就是各个浏览器下的兼容性问题,即css hack,明明感觉应该是对的,但是就是出不来效果,我根据平时所接触的,总结一下关于兼容 性的技巧,希望可以对大家有所帮助…… CSS Hack的原理是什么 由于不同的浏览器对CSS的支持及解析结果不一样,还由于CSS中的优先级的关系.我们就可以根据这个来针对不同的浏览器来写不同的CSS. CSS Hack大致有3种表现形式,CSS类内部Hack.选择器Hack以及HTML头部引用(if IE)Hack,CSS Hack主要针

IE浏览器跟火狐浏览器兼容写法3

HACK设置 仅IE7识别 *+html {…} 当面临需要只针对IE7做样式的时候就可以采用这个HACK. IE6及IE6以下识别 * html {…} 这个地方要特别注意很多地主都写了是IE6的HACK其实IE5.x同样可以识别这个HACK.其它浏览器不识别. html/**/ >body select {……}网页教学网 这句与上一句的作用相同. 仅IE6不识别 select { display /*IE6不识别*/:none;} 这里主要是通过CSS注释分开一个属性与值,流释在冒号前.

CSS对各个浏览器兼容技巧---HACK技巧

*   ie6和ie7都可以识别_   只有ie6可以识别\0  只有ie8可以识别:root 只有ie9可以识别 关于CSS对各个浏览器兼容已经是老生常谈的问题了, 网络上的教程遍地都是.以下内容没有太多新颖, 纯属个人总结, 希望能对初学者有一定的帮助. 一.CSS HACK HACK概念: 不同的浏览器,比如Internet Explorer 6,Internet Explorer 7,Mozilla Firefox等,对CSS的解析认识不一样,因此会导致生成的页面效果不一样,得不到我们所