浏览器兼容

  • 如何调试 IE 浏览器
    1 安装高版本IE浏览器,如安装的是IE9,则可以直接调试IE9、IE8、IE7
    2 IE6需要安装windowsXP虚拟机。
    3 IE7以上版本可用自浏览器自带的开发者工具进行调试,IE6可设置border或outline属性调试块元素及盒模型。
  • 什么是CSS hack?在 CSS 和 HTML里如何写 hack?在 CSS 中 ie6、ie7的 hack 方式?
    • 由于不同厂商的流览器或某浏览器的不同版本(如IE6-IE11,Firefox/Safari/Opera/Chrome等),对CSS的支持、解析不一样,导致在不同浏览器的环境中呈现出不一致的页面展现效果。这时,我们为了获得统一的页面效果,就需要针对不同的浏览器或不同版本写特定的CSS样式,我们把这个针对不同的浏览器/不同版本写相应的CSS code的过程,叫做CSS hack!
    • CSS和HTML写hack的方法:
      1 属性前缀法(即类内部Hack):例如 IE6能识别-, _, *,IE7能识别星号*,但不能识别_,_,IE6~IE10都认识\9,但firefox前述三个都不能认识
p {
  -width: 100px;
  _width: 100px;
}/*兼容IE6*/
p {
  *width: 100px;
}/*兼容IE6 7,可使用的符号有 ! $ & * ( ) = % + @ , . / ` [ ] # ~ ? : < > |  */
说明:在标准模式中
“-″减号是IE6专有的hack
“\9″ IE6/IE7/IE8/IE9/IE10都生效
“\0″ IE8/IE9/IE10都生效,是IE8/9/10的hack
“\9\0″ 只对IE9/IE10生效,是IE9/10的hack

2 选择器前缀法(即选择器Hack):例如 IE6能识别html .class{},IE7能识别+html .class{}或者*:first-child+html .class{}

应用星号HTML hack
#content {
  width: 80px;
  padding: 10px;
}
   * html #content {
  width: 100px;
  w\idth: 80px;  
} /*兼容IE6或更低版本的浏览器*/
应用子选择器hack
html > body {
  background-image: url(bg.png);
}/*使用子选择器hack对windows上的IE5和IE6隐藏background-image属性,这个选择器对IE7以下是无效的。*/

3 IE条件注释法(即HTML条件注释Hack):针对所有IE(注:IE10+已经不再支持条件注释): ,针对IE6及以下版本: 。这类Hack不仅对CSS生效,对写在判断语句里面的所有代码都会生效

只在IE下生效
    <!--[if IE]>
    这段文字只在IE浏览器显示
    <![endif]-->
    
    只在IE6下生效
    <!--[if IE 6]>
    这段文字只在IE6浏览器显示
    <![endif]-->
    
    只在IE6以上版本生效
    <!--[if gte IE 6]>
    这段文字只在IE6以上(包括)版本IE浏览器显示
    <![endif]-->
    
    只在IE8上不生效
    <!--[if ! IE 8]>
    这段文字在非IE8浏览器显示
    <![endif]-->
    
    非IE浏览器生效
    <!--[if !IE]>
    这段文字只在非IE浏览器显示
    <![endif]-->
符号 说明
lte: 就是Less than or equal to的简写,也就是小于或等于的意思。
lt : 就是Less than的简写,也就是小于的意思。
gte: 就是Greater than or equal to的简写,也就是大于或等于的意思。
gt : 就是Greater than的简写,也就是大于的意思。
! : 就是不等于的意思,跟javascript里的不等于判断符相同
  • 在IE6和IE7下的css hack
  • HTML hack
<!--[IF IE 6]>
This a Internet Explore 6 browser.
<![ENDIF]-->
<!--[IF IE 7]>
his a Internet Explore 7 browser.
<![ENDIF]-->

IE6 CSS hack:

div.ct{ 
display:inline-block; 
_display:inline;
}
*div.ct{ 
display:inline;
}

IE7 CSS hack:

div.ct{ 
display:inline-block; 
*display:inline;
}
  • 列举几种 浏览器兼容问题
    1 不同浏览器之间默认的padding与margin有较大差异,常在CSS里用* {padding:0;margin:0;}解决。
    2 双外边距浮动bug
    • 在IE6和更低版本的浏览器中,这个window bug使任何浮动元素上的外边距加倍。

p {
float: left;
margin-left: 100px;
}

![高版本浏览器中](http://upload-images.jianshu.io/upload_images/2155778-d3179b2a2b9aae62.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![IE6中](http://upload-images.jianshu.io/upload_images/2155778-08292a0d4111f015.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  *  解决方法是给元素设置display: inline;属性(行内元素设置display:block;并且设置浮动时用同样方法解决)

  3  设置较小高度标签(一般小于10px),在IE6,IE7中高度超出自己设置高度
![高级浏览器与IE6在小于10px高度时的区别](http://upload-images.jianshu.io/upload_images/2155778-011acb4be792cdfb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 
  *  解决方法:设置overflow:hidden

  4 几个img标签放在一起的时候,有些浏览器会有默认的间距,加了问题一中提到的通配符也不起作用。
  *  解决方法:设置浮动,设置负margin属性。

  5  标签最低高度设置min-height不兼容

p {
width: 200px;
min-height: 200px;
background: yellow;
}

![min-height属性在IE6下不兼容](http://upload-images.jianshu.io/upload_images/2155778-4acd5636c46b77a5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  *  解决方法:在css里写入*height:200px;这样就在IE6 7版本下写死这个高度。

  6  各个浏览器透明度的css兼容写法

filter:alpha(opacity=50); /IE,透明度50%/
-moz-opacity:0.5; /Firefox,透明度50%/
opacity:0.5;/其他浏览器,透明度50%/





* 针对兼容、多浏览器覆盖有什么看法?**渐进增强**和**优雅降级**是什么意思?
  *  要针对项目本身进行调研,查看目标人群使用的浏览器情况。一般情况对于使用人群小于5%的就可以忽略了,兼容和覆盖全部浏览器这本身就是不现实的,而且涉及到时间和成本的问题,还有一些暂时无法解决的兼容性bug等,这些都需要综合考虑。

  *  渐进增强 :针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。

  *  优雅降级 :一开始就构建完整的功能,然后再针对低版本浏览器进行兼容。
* reset.css和normalize.css分别是做什么的?为什么推荐使用 nomalize.css?
  * reset.css表示浏览器样式重置。HTML标签在浏览器中都有默认的样式,例如p标签有上下边距,strong标签有字体加粗样式等。不同浏览器的默认样式之间存在差别,例如ul默认带有缩进样式,在IE下,它的缩进是由margin实现的,而在Firefox下却是由padding实现的。开发时浏览器的默认样式可能会给我们带来多浏览器兼容性问题,影响开发效率。现在很流行的解决方法是一开始就将浏览器的默认样式全部覆盖掉,这就是CSS reset。

  *  [Normalize.css](https://github.com/necolas/normalize.css),它是一个定制的 reset.css 文件,可以让所有元素在所有的现代浏览器上渲染一致。相比其它的 reset.css,Normalize.css 保留有用的默认样式,不像其它 reset.css 那么彻底,移除了每个默认样式,然后又得费神把需要的样式再加回来。Normalize.css 定义绝大多数元素的默认样式,并且还提高了一些元素的可用性,并且代码都有详细的注释。
  *  Normalize.css支持的浏览器有
>Google Chrome (latest)
Mozilla Firefox (latest)
Mozilla Firefox 4
Opera (latest)
Apple Safari 6+
Internet Explorer 8+
  *  Normalize.css 使用非常简单,无需下载,只要在网页的头部加入以下代码即可:

<link rel="stylesheet" href="http://cdn.staticfile.org/normalize/3.0.1/normalize.min.css" type="text/css" />

* IE盒模型和标准盒模型有什么区别? 怎样使 IE678使用标准盒模型?box-sizing:border-box有什么作用
  *  IE盒模型:IE早期版本在混杂模式中(不声明!DOCTYPE HTML)使用自己的非标准盒模型。在这些版本中width属性不是内容的宽度,而是内容+内边距+边框的总和宽度。
  *  标准盒模型:标准盒模型就是W3C盒模型,width只为内容的宽度。
  *  在页面头部添加<!DOCTYPE html>可以使IE使用标准盒模型。
  *  为页面所有元素添加样式 box-sizing: border-box; ,使元素的内边距和边框不再会增加它的宽度。
  *  下图可以看出div1设置了padding和border值但是宽高与div2一可以看出box-sizing: border-box;的效果。![box-sizeing: border-box](http://upload-images.jianshu.io/upload_images/2155778-9b37e4d27c4398dc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

*  在 ie 6, 7, 8中展示 **盒模型**、**inline-block**、**max-width**的区别
  *  盒模型的区别:![IE6未声明!DOCTYPE HTML和chrome的区别](http://upload-images.jianshu.io/upload_images/2155778-337610292bab2462.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![IE7未声明!DOCTYPE HTML](http://upload-images.jianshu.io/upload_images/2155778-36fd40e2d0648f8f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![IE8未声明!DOCTYPE HTML](http://upload-images.jianshu.io/upload_images/2155778-65988a8d2844ebac.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)



  * inline-block属性在IE6 IE7 下无效
  *  max-width属性在IE6下无效

div {
width: 100px;
height: 100px;
background-color: yellow;
border: 1px solid red;
max-width: 50px;
display: inline-block;
}

![IE6下的inline-block,max-width](http://upload-images.jianshu.io/upload_images/2155778-9078fcb956085bd1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![IE7下的inline-block,max-width](http://upload-images.jianshu.io/upload_images/2155778-517a1782ce75aa4c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![IE8下的inline-block,max-width](http://upload-images.jianshu.io/upload_images/2155778-d3c0facf490a48c0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

*  参考
[http://www.teaching-materials.org/csstools/](http://www.teaching-materials.org/csstools/)
[知乎:怎样可以很好地保证网页的浏览器兼容性](https://www.zhihu.com/question/19736007)
[让我们谈一谈 Normalize.css](http://jerryzou.com/posts/aboutNormalizeCss/)
[知乎: Normalize.css 与传统的 CSS Reset 有哪些区别](https://www.zhihu.com/question/20094066)
[常见浏览器兼容于解决方式](http://blog.csdn.net/chuyuqing/article/details/37561313/)
[定义浏览器默认样式](http://blog.wpjam.com/m/normalize-css/)
`本博客版权归 本人和饥人谷所有,转载需说明来源`
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容

  • 一、如何调试 IE 浏览器? 在IE7以上的版本中可以通过按快捷键F12调出开发人员调试框,如下图IE7以上调试工...
    dengpan阅读 545评论 0 2
  • 一、如何调试 IE 浏览器 IE7以上版本自带的开发者工具,IE6可以用border的方法;例:IE11的开发者工...
    __Qiao阅读 1,125评论 2 17
  • 一、问答部分 1. 如何调试 IE 浏览器 IE7及以上版本有调试台,可以按F12启动。Paste_Image.p...
    _hello__world_阅读 459评论 0 1
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,737评论 1 92
  • 有你在,真好,不然做任何事情都毫无意义!美好的东西我总是想第一时间与你分享,想和你一起看最美的风景。 相遇总是美好...
    奇天插画原画阅读 363评论 0 1