关于IE6的一些总结

  开篇之前,先简单说说IE6的一些背景。

  IE6是微软浏览器系列中的第六个版本,它是在2001年的时候伴随着XP系统的问世而同时推出的一款浏览器。因为XP普及的原因,这款浏览器一度问鼎全球浏览器市场份额宝座,最高的时候甚至超过了90%!它风光过,可是也留下了非常惹人麻烦的手尾,尤其是对开发人员来说。近年来互联网发展迅猛,网络或者说网站对我们来说显得越来越重要。随之而来的是,网页制作就变得越来越重要了,所以从前的网页制作演变成了现在的前端开发。因为web应用越来越多,也越来越复杂,所以标准和规范就非常重要。正因此,IE6慢慢就成为了web开发人员的毒瘤。它的各种渲染问题各种bug,说出来都是前端人员的痛。学习前端开发有好一段时间了,今天我就根据自己的认识,对在开发过程中IE6常见的问题作一些简单的总结吧。



  1、关于IE6的市场份额

    从下图中我们可以看到,直至最近三个月,IE6的市场份额仍有约5%。虽然这个数字近来来一直在下降,但是我个人觉得这个数字现在认识是相当高的,试想假如淘宝京东之类的网站今天放弃了IE6,对于日IP达数千万级别的它们来说,可能意味着每天有上百万的人无法正常访问!这是何等的恐怖!尽管我非常不乐意继续与IE6纠缠,但是一心想进比较好的公司,所以我最近都经常接触这个老家伙。当然,现在的很多公司或者项目都只要求兼容到IE8了,早已摒弃了IE67。当然,现在研究有没有用,那得看个人的发展取向。不过在不久的将来,一定没用。 

    说明:以上数据来源于百度统计平台,时间为2015年6月9日。浏览器市场份额-百度统计:http://tongji.baidu.com/data/browser/

  2、IE6盒模型问题

     标准模式(strict mode)和怪异模式(quirks mode)。对于这两种模式,简单地说就是在W3C制订规范之前,每个浏览器都有自己的渲染方式。直到有了W3C标准以后,各个浏览器开始统一对网页解析方式,这就是所谓的标准模式。但是,有了新标准可不能抛弃以往的一些网页设计,于是为了向后兼容,一个浏览器里面存在多种模式。而后者是一种以更老的浏览器的方式去解析网页代码的模式,则称为怪异模式。而IE(包括6,7,8等)就是这样一个怪异的浏览器,它在怪异模式下会带来了盒模型的差异。

       怪异模式的触发:

        经过测试,在以下情况下都会触发IE的怪异模式:

          1,没有写DOCTYPE;

          2,写了DOCTYPE,但是DOCTYPE前面有其他内容,如加了<!--注释-->,文本内容等(不包括换行和空格)。

       盒模型的差异:

        测试代码:        

      #small{
		width: 100px;
		height: 100px;
		border:1px solid #000;
		background: green;
		margin: 100px;
		padding: 100px;
	    }

        在标准模式下,盒子的大小=width/height+padding+border+margin

        

        在怪异模式下,盒子的大小=内容宽/高+padding+border+margin

        

       我在有写入和没有写入DOCTYPE的情况下,分别测试了以上的样式。很明显第二个图中的宽高都比图一的小,那是由于我在DIV中没有放入任何内容,即内容的宽为0。所以

      图一容器的宽=padding+border+width=2X100px+2X1px+100px=302px;

      图二容器的宽=padding+border+内容宽=2X100px+2X1px+0px=202px;

  

  3、IE6双倍边距bug:

    解释:IE6双倍边距bug指的是IE6会在特定的条件下,会把水平横向的边距(即margin-left和margin-right)的值变成两倍。

    触发条件: 

       1、使用IE6浏览器;

        2、元素必须是块元素(如div,ul,ol,h1-h6,table,p,form等);

      3、元素是浮动的(left/right);

      4、元素具有横向边距(如margin-left/margin-right)。

    说明: 该bug只产生于父子容器的之间的margin,即该margin是相对于父容器的边距,兄弟元素之间不产生双倍边距。另外,如果行内元素以块元素方式呈现,那么该元素也会触发此bug。

    解决方案:使该元素变成以行内元素方式呈现,即设display:inline。 

 1 <style>
 2     #wrap div{
 3         width: 100px;
 4         height: 100px;
 5         float: left;
 6         margin-left: 50px;
 7     }
 8     #div1{
 9         background: green;
10     }
11     #div2{
12         background: red;
13
14     }
15     #wrap{
16         width: 400px;
17         height: 300px;
18         border:1px solid #000;
19         margin-left:400px;
20     }
21 </style>
22 <body>
23         <div id="wrap">
24             <div id="div1"></div>
25             <div id="div2"></div>
26         </div>
27 </body>

 

  4、IE6下的haslayout属性

    解释: haslayout也是IE(6,7)所独有的一个东西,IE6中产生的问题常与之相关,所以说IE6真是一个诡异的浏览器。将它直接翻译过来就是“拥有布局”,一旦拥有布局,元素的本身或者子元素就会以此为根据计算大小和位置等值。它的值可以判断为true或false,但它不能直接设定,只能触发生成。很多元素都会有默布局,但是微软为了“性能和简洁”,部分元素没有“布局”。因此常常导致显示异常,所以我们需要人为的触发它。

    触发条件:

      1、设定宽高;(常用于父元素)

       2、设定浮动(注意清浮动);

       3、设定zoom值,常为1。(这种方法比较可靠,不增加布局复杂度)

    开发示例:

      下图分别为IE6下显示异常,其他浏览器(包括IE7,8及谷歌浏览器)均显示正常的情况下,分别给显示异常的元素加上以上三个样式前后的结果。

      添加前:

IE6:其他:

      分别设定上图所选元素的样式为zoom:1width:453px(按实际情况设定)或float:left后的结果,均为以下效果:

IE6:其他:

   5、针对IE6的CSS hack

      解释:"hack"一词在英语中有”坎“的意思,而在互联网安全里面常有黑客的意思。而在前端开发中,有”修改“的意思。意思就前端开发人员根据不同的浏览器以及不同的版本而分别书写特定的CSS样式,简称为CSS hack。它主要分为两种方式,条件注释添加属性前缀。

      1、条件注释法:

        这种方法是针对IE的CSS hack,语法格式为<!--[条件]-->这里放代码<![end if]--> 。它只有在IE浏览器中才能被识别,在其他浏览器中均理解为注释,忽略其中的内容。条件中可以使用”!“、”&“、”lt“、”|“、”gte"、“lte”等运算符,我用表格整理如下。


符号


含义


示例



非运算符


<!--[if !IE]><!--> 除IE外都可识别 <!--<![endif]-->

<!--[if !(IE 6)]>除IE6外可以识别<![endif]-->


lt


Less than小于


<!--[ if lt IE 8]>IE8以下版本<![endif]-->


gt


greater than大于


<!--[ if gt IE 8]>IE8以上版本<![endif]-->


lte


less than或equal小于等于


<!--[ if lte IE 8]>IE8及IE8以下版本<![endif]-->


gte


greater than或equal大于等于


<!--[ if gte IE 8]>IE8及IE8以上版本<![endif]-->


|


或运算符


<!--[ if IE 8 |IE 7]>IE7或IE8版本<![endif]-->


&


与运算符


<!--[ if gt IE 6&!IE 8]>除IE8外IE6以上版本<![endif]-->

    说明:以上代码均经过IE系列浏览器测试,结果无误。除了以上用法之外,我们常常还会利用条件注释引入<script>标签来针对性地加载不同的js文件或者外部引入CSS文件,以适应不同的浏览器和需求。另外还要说明的是,IE浏览器从IE10以后就已经摒弃条件注释了,所以在IE10及以上的浏览器中不需要通过条件注释hack了,这里有一篇与这个相关的译文:http://article.yeeyan.org/view/19973/293006

    2、属性前缀法

      属性前缀法是指根据不同浏览器的识别能力,分别在CSS样式属性前加上特定的符号前缀(例如‘_‘,‘+,‘*‘,‘!important‘等),以使页面达到在不同浏览器显示不同样式的一种方法。其关键点是要熟记特定浏览器和特定版本的标识符,有序合理地使用。


符号


IE 6


IE 7


IE 8


FF


_



×


×


×


+




×


×


*




×


×


!important


×




      关键点:       

        _号常用于区分IE6与其他浏览,其他浏览器的样式常常至于前面

        *号常用于区分IE7与IE8

        +号常用于区分IE7,8和其他浏览器

      说明:!important的IE6中的优先级会降低,所以在做IE 6的CSS hack的时候会在其他浏览器的样式后加上!important,并置于IE 6样式的前面。一般原则是,作用范围广的样式放置前面并加上!important,加下划线前缀的样式(例如_background等)放置在后面,在IE6下会把前面的样式覆盖,以达到IE6样式hack的目的。以上只是本人的一些常用小总结,经验尚浅难以一足,所以推荐一篇比较全的针对IE的CSS hack文章。地址:http://www.cnblogs.com/lhb25/archive/2010/01/26/1656801.html

  6、IE6其他问题

     1、IE6不支持png图片的半透明,

        解决方法:_filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true,sizingMethod=noscale,src=‘XXX.png‘);

             _background:none; 

        说明:这种方法不适用于有大量图片的网页,因为它要求将图片XXX.png置于html页面的同一文件中,目前还没找到原因。

     2、使用滤镜改变背景透明度,filter:alpha(opacity=50);

     3、IE6不支持固定定位,即position不能设定fixed;

     4、IE6中伪类只适用于用于锚点a标签,其他标签都不支持伪类,如最常用的hover等。

  

原文地址:http://www.cnblogs.com/chengguanhui/p/4564437.html

时间: 2024-11-05 16:09:49

关于IE6的一些总结的相关文章

IE6 浏览器常见兼容问题 共23个

1.<!DOCTYPE HTML>文档类型的声明. 产生条件:IE6浏览器,当我们没有书写这个文档声明的时候,会触发IE6浏览器的怪异解析现象: 解决办法:书写文档声明. 2.不同浏览器当中,很多的标签的默认样式不同,如默认的外部丁内补丁. 产生条件:不同浏览器: 解决办法:利用CSS reset文件进行样式的清除,然后再根据需要进行设置. 3.横向双倍外边距 产生条件:在IE6中块元素浮动后,会出现横向双倍margin现象. 解决办法: 在float标签的样式控制中加入display:inl

ie6下 gif动画不动

ie6下 gif动画不动 如果有onclick事件:在IE6中,点击a标签,onclick事件会先执行,其次是href下的动作,href执行后,默认会执行跳转动作(尽管href属性不一定是一个地址),于是页面中的加载就停止了,gif图片就停止播放了.这个应该是IE6底层机制的bug.解决办法:就是在onclick事件后加上return false,这时href就不会被执行.古怪的问题也就搞定了. 如果没有onclick事件,在浏览器里单独浏览图片仍然不动,很有可能是浏览器的设置问题:工具--in

meta 标签代码解决IE兼容问题,IE6,IE7,IE8,IE9,IE10(包括360的兼容模式)

最近做了一个项目,客户反映,在360下布局错位,远程调试了一下,发现客户使用的是360的兼容模式,然而我在自己的电脑上测试的时候是正常的(兼容模式也正常):简单研究了一下360的兼容模式,在360的兼容模式下按F12得到下图的调试信息: 经过测试,发现是红框处的设置的ie版本太低导致的,主要是文档模式更改文档模式为相对较高的版本即可解决, 这里,我添加了如下代码 <meta http-equiv="X-UA-Compatible" content="IE=edge,ch

ie6, ie7兼容性问题以及处理办法

1.IE6中绝对定位位置错误问题描述:在ie6中,如果参照物没有触发haslayout ,那么绝对定位的容器的left和bottom就会有问题.解决办法:在相对定位的父容器上加入 zoom:1 来触发ie的haslayout即可解决.小技巧:通常我们在设置一个容器为position:relative的时候 ,都会加上zoom:1来解决很多ie下的问题. 2.IE6中绝对定位1像素偏差问题描述:在 IE6 下定位元素的父级宽高都为奇数时,那么在 IE6 下定位元素的 right和bottom都有1

IE6 bug总结

IE6bug总结: 1.双边距bug产生原因 margin的方向与浮动的方向相同 解决方法: 浮动的元素身上加 display:inline; ------------------------------------------------------------ 2.最小高度bug产生原因 IE6 下一个div有宽度,高度最小不是0而是字体大小 解决方法: 给 div height:0; 并且 overflow:hidden; 或者font-size:0; 并且 line-height:0;

ie6的常见兼容性问题

(一):选择器的兼容问题 1.对于一般的选择器如id选择器.类选择器.标签选择器,IE6和其他浏览器一样都兼容: 2.子代选择器(E>F),序选择器(E:first-child.E:last-child).兄弟选择器(E+p)这些选择器IE6都不兼容{主要是css2中的选择器,css3中的先不谈} (二):双倍margin问题 1.何为双倍的margin? 解释:就是说当我们连续浮动元素时,如果浮动元素的浮动方向和我们设置的margin方向相同时,浮动元素的第一个元素就会具有双倍的margin值

前端之旅HTML与CSS篇之IE6常见BUG

1.IE6怪异解析之padding与border算入宽高原因:未加文档声明造成非盒模型解析解决方法:加入文档声明<!doctype html> 2.IE6在块元素.左右浮动.设定marin时造成margin双倍(双边距)解决方法:display:inline 3.以下三种其实是同一种bug,其实也不算是个bug,举个例子:父标签高度20,子标签11,垂直居中,20-11=9,9要分给文字的上面与下面,怎么分?IE6就会与其它的不同,所以,尽量避免.1)字体大小为奇数之边框高度少1px解决方法:

table拖动(兼容Firefox 3.5/IE6),固定表格宽度

效果:可鼠标拖动td,动态修改它们的宽度 html: <html> <head> <title>table拖动(兼容Firefox 3.5/IE6),固定表格宽度</title> <meta content="charset=utf-8"> <link rel="stylesheet" href="css/22.css" /> </head> <body&g

关于 IE6、 IE7兼容性总结(转)

其实浏览器的不兼容,我们往往是各个浏览器对于一些标准的定义不一致导致的,因此,我们可以进行一些初始化,很多问题都很轻松解决. 下面是14条特殊情况仅供参考: 1. 文字本身的大小不兼容.同样是font-size:14px的宋体文字,在不同浏览器下占的空间是不一样的,ie下实际占高16px,下留白3px,ff 下实际占高17px,上留白1px,下留白3px,opera下就更不一样了.解决方案:给文字设定 line-height .确保所有文字都有默认的 line-height 值.这点很重要,在高

关于IE6的一些常见的CSS BUG处理

CSS BUG:样式在各浏览器中解析不一致的情况,或者说CSS样式在浏览器中不能正确显示的问题称为CSS BUG: CSS Hack:css hack是指一种兼容css 在不同浏览器中正确显示的技巧方法,因他们都属于个人对css代码的非官方的修改,或非官方的补丁. 使用Hack的一些副作用:降低了css代码的可读性,增加了代码的负担 今天跟大家分享下关于IE6一些常见的BUG处理: (1)图片间隙: a)div中的图片间隙(该BUG出现在IE6及更低版本中) 描述:在div中插入图片时,图片会将