饥人谷-任务十三

一、如何调试 IE 浏览器

  • IE7以上可以用控制台来调试,按F12即可
  • 没有控制台的,通过设置border: 1px solid red; outline: 1px solid red来快速帮组定位问题所在。
  • 可以通过IETEST,但是很多时候并不能实际体现出IE浏览器真正的兼容性。
  • 虚拟机,安装带有不同版本IE的系统

二、什么是CSS hack?在 CSS 和 HTML里如何写 hack?在 CSS 中 ie6、ie7的 hack 方式?

  • CSS样式表在各大浏览器中的表现不是完全一样的,因为各个浏览器及浏览器各个版本(如IE6-IE11,chrome,opera,firefox,safari),对于CSS的解析支持不一样,这就导致了在不同浏览器或者不同版本中,CSS的显示效果不一样,这时我们为了获得一致的CSS效果,就利用一些BUG或者特定样式去达到一样的效果,这个coding过程,我们称之为CSS hack。
  • CSS Hack大致有3种表现形式:
    (1)CSS属性前缀法:
    由于IE发展较早,早期版本对于CSS的解析有部分没加严格限制,成为了历史遗留问题,利用这些BUG可以对某些CSS属性写CSS hack以达到效果。
.container{ 
     _color: red;/*IE6识别*/ 
     *color: red;/*IE6,IE7识别*/ 
     color: red\9;/*IE6-IE10识别*/ 
     color: red\0;/*IE8-IE10识别*/ 
     color: red\9\0;/*IE9,IE10识别*/ 
}```
常用的就是* 和 _还有-
(2)选择器前缀法
(即选择器hack)选择器前缀法是针对一些页面表现不一致或者需要特殊对待的浏览器,在CSS选择器前加上一些只有某些特定浏览器才能识别的前缀进行hack。

html{}/只对IE6生效/
+html{}/只对IE7生效
/

(3)IE条件注释法(即HTML头部引用if IE)Hack,实际项目中CSS Hack大部分是针对IE浏览器不同版本之间的表现差异而引入的。
(即HTML条件注释hack):(注:IE10+已经不再支持条件注释)这类hack不仅对CSS生效,对写在判断语句里面的所有代码都会生效。
 - 只在IE下生效
    ```
<!--[if IE]>
 这段文字只在IE浏览器显示 
<![endif]>
  • 只在IE6下生效
    ```
 - 只在IE6以上版本生效
       ```
<!--[if gte IE 6]> 
这段文字只在IE6以上(包括)版本IE浏览器显示
<![endif]-->
  • 只在IE6以下版本生效
    ```
 - 只在IE8上不生效
       ```
<!--[if ! IE 8]> 
这段文字在非IE8浏览器显示
<![endif]-->
  • 非IE浏览器生效
    ```
- 在 CSS 中 ie6、ie7的 hack 方式
(1)IE6
   - 属性前缀法
    ```
    .box{ 
        _color: red;/*for IE6*/
       }```
   - 选择器前缀法
    ```
    *body{}
  /*for IE6*/
       }```
   - 条件注释法
    ```
    <!--[if IE 6]>
    <body class="ie6">
    <![endif]-->

(2)IE7

  • 选择器前缀法
    *+body{}/*for IE7*/
  • 条件注释法
<!--[if IE 7]>
<body class="ie7">
<![endif]-->```
  
(3)IE6~IE7
- 属性前缀法
.box{
*color: red;
/*for IE6~7*/

}```

  • 选择器前缀法
  @media screen\9{...}
}```
- 条件注释法

}```
CSS hack现在用的越来越少,能不用尽量不用,可以用最少的hack去实现多浏览器兼容的页面。所以不需要花很大精力去记,有这个概念,遇到了知道怎么查怎么解决就行。例如星号是做ie67的hack,下划线是ie6的hack。

三、列举几种 浏览器兼容问题

  • IE6/7实现display:inline-block
    有两种方法,第一种,先声明该元素display:inline-block,触发其layout,再在第二条样式上再声明为display:inline,如:

.test{display:inline-block; /其他样式.../}
.test{display:inline;}```
第二种方法(推荐),利用IE6/7的Css专有前缀来触发layout(感觉怎么有点像js的setTimeout):

.test{display:inline-block; *zoom: 1; *display: inline;}```

- **IE6双倍浮动行距**
在IE6下,当一个div在另一个div向左浮动,并且带有margin-left的样式,那么这时它的左边距是样式定义的双倍,同理如果是向右浮动和margin-right,效果是一样的。不过在此后浮动的div的边距反倒是没问题的,只是第一个有此问题。
这时,解决的方法是:简单给该div加个```_display:inline;```样式即可

- li里元素都浮动li在ie67下方会产生4px间隙问题
解决方法:添加```*vertical-align:top```
- **CSS透明问题** 
IE8及以下版本不支持```opacity```属性,可使用```filter:alpha(opacity=50)```替代
解决方法:
```-ms-filter:”progid:DXImageTransform.Microsoft.Alpha(Opacity=50)”```

- 标签设置min-height不兼容解决办法
如果我们要设置一个标签的最小高度200px,需要进行的设置为:

{
min-height:200px;
height:auto!important;
height:200px;
overflow:visible;
}```

  • 双外边距浮动bug
    这也是很常见的bug,网上给出数据出现频率90%,是IE6和更低版本额双外边距浮动bug。在设置好浮动后,元素的外边距加倍
    解决方法:在这个div里面加上display:inline;

四、针对兼容、多浏览器覆盖有什么看法?渐进增强优雅降级是什么意思?

  • 针对兼容、多浏览器覆盖有什么看法?CSS作为一种语言,设计成有很强的向前兼容性,无论是浏览器覆盖还是兼容都是解决bug的很好的方式,但是不应该过分信赖于hack和过滤器,因为并非掌握hack越多,自己的水平就越高。各个浏览器,各个版本,以及各个网页html千差万别,动一发则牵全身,所以要明智且受控制地应用hack和过滤器。之所以这么说,是因为如果CSS文件短小且简单,并且只需要应用很少个hack的话,那么放在主CSS文件中加以注释说明可能是安全的;但是之前说过,hack往往过于复杂,使代码很难阅读,所以最好将他们放在他们自己的样式表中,不但容易阅读,而且便于维护。但是这样就增加了工作量,所以建议还是少用hack和过滤器,能不兼容的地方就不兼容,考虑业务需求的情况下合理使用兼容。而至于多浏览器覆盖,我认为这个是可以合理考虑的,而且经常用也未尝不可,毕竟各大浏览器用户所占份额均不小 ,这点不容忽视。
  • 渐进增强:针对低版本浏览器进行构建页面,保证最基本的功能,然后在针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。
  • 优雅降级:一开始就针对高版本浏览器进行页面构建,然后再针对低版本浏览器进行兼容。区别:优雅降级是从复杂的现状开始,并试图减少用户体验的供给,而渐进增强则是从一个非常基础的,能够起作用的版本开始,并不断扩充,以适应未来环境的需要。降级(功能衰减)意味着往回看;而渐进增强则意味着朝前看,同时保证其根基处于安全地带。

五、reset.css和normalize.css分别是做什么的?为什么推荐使用 nomalize.css?

  • Normalize 相对「平和」,注重通用的方案,重置掉该重置的样式,保留有用的 user agent 样式,同时进行一些 bug 的修复,这点是 reset 所缺乏的。
  • Reset 相对「暴力」,不管你有没有用,统统重置成一样的效果,且影响的范围很大,讲求跨浏览器的一致性。
  • 推荐使用normalize.css的原因:
    • Normalize.css 保护了有价值的默认值;reset通过为几乎所有的元素施加默认样式,强行使得元素有相同的视觉效果。相比之下,Normalize.css保持了许多默认的浏览器样式。这就意味着你不用再为所有公共的排版元素重新设置样式。当一个元素在不同的浏览器中有不同的默认值时,Normalize.css会力求让这些样式保持一致并尽可能与现代标准相符合。
    • Normalize.css 修复了浏览器的bug;它修复了常见的桌面端和移动端浏览器的bug。这往往超出了Reset所能做到的范畴。关于这一点,Normalize.css修复的问题包含了HTML5元素的显示设置、预格式化文字的font-size问题、在IE9中SVG的溢出、许多出现在各浏览器和操作系统中的与表单相关的bug。
    • Normalize.css 不会让调试工具变的杂乱;使用Reset最让人困扰的地方莫过于在浏览器调试工具中大段大段的继承链。在Normalize.css中就不会有这样的问题,因为在我们的准则中对多选择器的使用时非常谨慎的,我们仅会有目的地对目标元素设置样式。
    • Normalize.css 是模块化的;这个项目已经被拆分为多个相关却又独立的部分,这使得你能够很容易也很清楚地知道哪些元素被设置了特定的值。因此这能让你自己选择性地移除掉某些永远不会用到部分(比如表单的一般化)。
    • Normalize.css 拥有详细的文档;Normalize.css的代码基于详细而全面的跨浏览器研究与测试。这个文件中拥有详细的代码说明并在Github Wiki中有进一步的说明。这意味着你可以找到每一行代码具体完成了什么工作、为什么要写这句代码、浏览器之间的差异,并且你可以更容易地进行自己的测试。

六、IE盒模型和标准盒模型有什么区别? 怎样使 IE678使用标准盒模型?box-sizing:border-box有什么作用

  • IE盒模型和标准盒模型的区别
    IE盒模型:宽度(width)=边框(border)+内边距(padding)+内容宽度(content
    标准盒模型:宽度(width)=内容宽度(content
  • 怎样使IE678使用标准盒模型
    IE不添加doctype时(怪异模式)使用的是IE盒模型,要想使IE678使用标准盒模型,给IE678添加doctype即可。
  • box-sizing: border-box;是CSS3新增属性,设置此属性之后,相当于以怪异模式解析。
描述
content-box 这是由 CSS2.1 规定的宽度高度行为。宽度和高度分别应用到元素的内容框。在宽度和高度之外绘制元素的内边距和边框
border-box 为元素设定的宽度和高度决定了元素的边框盒。就是说,为元素指定的任何内边距和边框都将在已设定的宽度和高度内进行绘制。通过从已设定的宽度和高度分别减去边框和内边距才能得到内容的宽度和高度。
inherit 规定应从父元素继承 box-sizing 属性的值。

box-sizing: border-box;计算方法为width/height=content+padding+border,表示指定的宽度和高度包含边框、内边距和内容区域。 即IE盒模型算法。

七、操作题

1、安装VB

VB安装

2、

  • 盒模型
    这是有!doctype声明的:
<!doctype html>
<html>
<head>    
<meta charset="UTF-8">    
<title>IE8</title>    
<style>       
 .box{ 
width: 100px;            
height: 100px;            
margin: 10px;           
 padding: 10px;            
background: red;           
border: 2px solid #000000;       
 }    
</style>
</head>
<body>
<div class="box">    
have !doctype</div>
<div class="box">    
have !doctype</div>
</body>
</html>
IE6盒模型有!doctype声明标准盒模型
IE7盒模型有!doctype声明标准盒模型
IE8盒模型有!doctype声明标准盒模型

这是没有!doctype声明的:

<html>
<head>    
<meta charset="UTF-8">    
<title>IE8</title>    
<style>       
 .box{ 
width: 100px;            
height: 100px;            
margin: 10px;           
 padding: 10px;            
background: red;           
border: 2px solid #000000;       
 }    
</style>
</head>
<body>
<div class="box">    
without !doctype</div>
<div class="box">    
without !doctype</div>
</body>
</html>
IE6盒模型没!doctype声明IE盒模型
IE7盒模型没!doctype声明IE盒模型
IE8盒模型没!doctype声明IE盒模型
  • inline-block
<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
    <title>IE8</title>
    <style>
        .box{
            width: 100px;
            height: 100px;
            background: red;
            border: 1px solid #000000;
            display: inline-block;
        }
    </style>
</head>

<body>
<div class="box">
  inline-block
</div>
<div class="box">
  inline-block
</div>
  <div class="box">
  inline-block
</div>
</body>
</html>
IE6下不兼容
IE7下不兼容
IE8下兼容
  • max-width
<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
    <title>IE8</title>
    <style>
        .box{
            max-width: 100px;
            height: 100px;
            border: 1px solid #000000;
        }
    </style>
</head>

<body>
<div class="box">
    svsdvvvvvvv
    vvfdsvsdfv
    sdvfsdfv
    sdfvsfvs
    fvsdsd</div>

</body>

</html>
IE6下的max-width不兼容
IE7下的max-width兼容
IE8下的max-width兼容
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,047评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,807评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,501评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,839评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,951评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,117评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,188评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,929评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,372评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,679评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,837评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,536评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,168评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,886评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,129评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,665评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,739评论 2 351

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,744评论 1 92
  • 一、如何调试 IE 浏览器? 在IE7以上的版本中可以通过按快捷键F12调出开发人员调试框,如下图IE7以上调试工...
    dengpan阅读 545评论 0 2
  • 一、问答部分 1. 如何调试 IE 浏览器 IE7及以上版本有调试台,可以按F12启动。Paste_Image.p...
    _hello__world_阅读 461评论 0 1
  • 一、如何调试 IE 浏览器 IE7以上版本自带的开发者工具,IE6可以用border的方法;例:IE11的开发者工...
    __Qiao阅读 1,125评论 2 17
  • 一、如何调试 IE 浏览器? IE调试的一般方法(css): 使用高版本IE控制台(对于IE7以上)IE11的开发...
    婷楼沐熙阅读 549评论 0 6