热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于IE6的一些总结

开篇之前,循例简单说说IE6的一些背景吧。IE6是指微软浏览器系列中的第六个版本,它是在2001年的时候伴随着XP系统的问世而同时推出的一款浏览器。因为XP普及的原因,这款浏览器一度问鼎全球

  开篇之前,循例简单说说IE6的一些背景吧。

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


 

  1、关于IE6的市场份额

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

    说明:以上数据来源于百度统计平台,时间为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,语法格式为这里放代码 。它只有在IE浏览器中才能被识别,在其他浏览器中均理解为注释,忽略其中的内容。条件中可以使用”!“、”&“、”lt“、”|“、”gte"、“lte”等运算符,我用表格整理如下。

符号

含义

示例

非运算符

 IE外都可识别 

lt

Less than小于

gt

greater than大于

lte

less thanequal小于等于

gte

greater thanequal大于等于

|

或运算符

&

与运算符

    说明:以上代码均经过IE系列浏览器测试,结果无误。除了以上用法之外,我们常常还会利用条件注释引入标签来针对性地加载不同的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与其他浏览,其他浏览器的样式常常至于前面

        *号常用于区分IE7IE8

        +号常用于区分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页面的同一文件中,目前还没找到原因。以下还有另外一种很实用的方法。

        使用插件:DD_belatedPNG.js

1 
7

        下载地址:http://www.dillerdesign.com/experiment/DD_belatedPNG/

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

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

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

  


推荐阅读
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • css div中文字位置_超赞的 CSS 阴影技巧与细节
    本文的题目是CSS阴影技巧与细节。CSS阴影,却不一定是box-shadow与filter:drop-shadow,为啥?因为使用其他属性 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 使用圣杯布局模式实现网站首页的内容布局
    本文介绍了使用圣杯布局模式实现网站首页的内容布局的方法,包括HTML部分代码和实例。同时还提供了公司新闻、最新产品、关于我们、联系我们等页面的布局示例。商品展示区包括了车里子和农家生态土鸡蛋等产品的价格信息。 ... [详细]
  • Jquery 跨域问题
    为什么80%的码农都做不了架构师?JQuery1.2后getJSON方法支持跨域读取json数据,原理是利用一个叫做jsonp的概念。当然 ... [详细]
  • Python脚本编写创建输出数据库并添加模型和场数据的方法
    本文介绍了使用Python脚本编写创建输出数据库并添加模型数据和场数据的方法。首先导入相应模块,然后创建输出数据库并添加材料属性、截面、部件实例、分析步和帧、节点和单元等对象。接着向输出数据库中添加场数据和历程数据,本例中只添加了节点位移。最后保存数据库文件并关闭文件。文章还提供了部分代码和Abaqus操作步骤。另外,作者还建立了关于Abaqus的学习交流群,欢迎加入并提问。 ... [详细]
  • 第8章 使用外部和内部链接
    8.1使用web地址LearnAboutafricanelephants. ... [详细]
  • 由于同源策略的限制,满足同源的脚本才可以获取资源。虽然这样有助于保障网络安全,但另一方面也限制了资源的使用。那么如何实现跨域呢,以下是实现跨域的一些方法。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了css回到顶部按钮相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 移动传感器扫描覆盖摘要:关于传感器网络中的地址覆盖问题,已经做过很多尝试。他们通常归为两类,全覆盖和栅栏覆盖,统称为静态覆盖 ... [详细]
  • Apple iPad:过渡设备还是平板电脑?
    I’vebeenagonizingoverwhethertopostaniPadarticle.Applecertainlydon’tneedmorepublicityandthe ... [详细]
author-avatar
明月思含含
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有