`

【多浏览器的兼容问题】IE6.0、IE7.0 、FireFox 在样式中的不同写法

    博客分类:
  • ajax
阅读更多

原文出处:http://www.xianzheng.net.cn/post/ie6-ie7-firefox-css-02.html
        参考文章:http://www.iteye.com/topic/602506

        或许你一直在抱怨为什么要专门为 IE 和 FF 写不同的 css,为什么 IE 这样让人头疼,然后一边写 css,一边咒骂那个可恶的MSIE。其实对于 css 的标准支持方面,IE并没有我们想象的那么可恶,关键在于 IE 和 FF 的默认值不一样而已,掌握了这个技巧,你会发现写出兼容 FF 和 IE 的 css 并不是那么困难,或许对于简单的 css,你完全可以不用 "!important" 这个东西了。

        我们都知道,浏览器在显示网页的时候,都会根据网页的 css 样式表来决定如何显示,但是我们在样式表中未必会将所有的元素都进行了具体的描述,当然也没有必要那么做,所以对于那些没有描述的属性,浏览器将采用内置 默认的方式来进行显示,譬如文字,如果你没有在 css 中指定颜色,那么浏览器将采用黑色或者系统颜色来显示,div 或者其他元素的背景,如果在css中没有被指定,浏览器则将其设置为白色或者透明,等等其他未定义的样式均如此。所以有很多东西出现 FF 和 IE 显示不一样的根本原因在于它们的默认显示不一样,而这个默认样式该如何显示我知道在w3中有没有对应的标准来进行规定,因此对于这点也就别去怪罪IE了。 所以解决办法就出来了,那就是对于不统一的默认显示方式,在 css 中给指定具体数值就可以了,下面我将就我知道的默认标签来进行说明。

        ● 列表标签 UL LI
        这个是朋友抱怨得最多的标签,说每次遇到这个标签的时候 IE 和 FF 总是显示不一致。行,既然如此,你何不在样式表中将这个标签的属性给定义了,如:

ul {
  padding: 0;
  margin: 0;
}
 
ul {
  padding: 0;
  margin: 0;
}


        然后再看看,是不是一致了?对于 ul 标签,IE 会自动缩进几个像素,而 FF 则不是这样,所以这就是根本原因。当然,我上面的定义肯定显示不太美观,这个时候你可以手动进行调节,譬如调节成:

ul {
  padding: 0;
  margin: 0 0 0 10px;
  list-style-position: inside;
}
 
ul {
  padding: 0;
  margin: 0 0 0 10px;
  list-style-position: inside;
}

        所以今后对于这个标签,只要你发现 IE 和 FF 不一致,就去看看对应的 css 有哪些属性,然后进行夸张的描述,用 IE 和 FireFox 查看之,如果一致则有效。FORM 标签,这个标签在 IE 中,将会自动 margin 一些边距,而在 FF 中 margin 则是 0,因此,如果想显示一致,所以最好在 css 中指定 margin 和 padding,针对上面两个问题,我的 css 中一般首先都使用这样的样式:

ul, form {
  margin: 0;
  padding: 0;
}
 
ul, form {
  margin: 0;
  padding: 0;
}


给定义死了,所以后面就不会为这个头疼了。

        ● 排版
        对于排版,我们用得最多的 css 描述可能就是 float:left。有的时候我们需要在 n 栏的 float div 后面做一个统一的背景,譬如:

<div id="page">
  <div id="left"></div>
  <div id="center"></div>
  <div id="right"></div>
</div>
 

比如我们要将 page 的背景设置成蓝色,以达到所有三栏的背景颜色是蓝色的目的,但是我们会发现随着 left center right 的向下拉长,而 page 居然保持高度不变,问题来了,原因在于 page 不是 float 属性,而我们的 page 由于要居中,不能设置成 float,所以我们应该这样解决:

<div id="page">
  <div id="bg" style="float: left; width:100%">
    <div id="left"></div>
    <div id="center"></div>
    <div id="right"></div>
  </div>
</div>
 
<div id="page">
  <div id="bg" style="float: left; width:100%">
    <div id="left"></div>
    <div id="center"></div>
    <div id="right"></div>
  </div>
</div>


再嵌入一个 float left 而宽度是 100% 的 DIV 解决之。

        ● !important
        随着 IE7 对 !important 的支持, !important 方法现在只针对 IE6 的 HACK。(注意写法,记得该声明位置需要提前。)

<style>
  #wrapper {
    width: 100px!important; /* IE7 + FF */
    width: 80px; /* IE6 */
  }
</style>
 
<style>
  #wrapper {
    width: 100px!important; /* IE7 + FF */
    width: 80px; /* IE6 */
  }
</style>

        ● IE6/IE7 对 FireFox
        *+html 与 *html 是 IE 特有的标签, firefox 暂不支持,而 *+html 又为 IE7 特有标签。

<style>
  #wrapper { width: 120px; } /* FireFox */
  *html #wrapper { width: 80px;} /* ie6 fixed */
  *+html #wrapper { width: 60px;} /* ie7 fixed, 注意顺序 */
</style>
 
<style>
  #wrapper { width: 120px; } /* FireFox */
  *html #wrapper { width: 80px;} /* ie6 fixed */
  *+html #wrapper { width: 60px;} /* ie7 fixed, 注意顺序 */
</style>


        注意: *+html 对 IE7 的 HACK 必须保证 HTML 顶部有如下声明:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">



        ● 万能 float 闭合(非常重要!)
        将以下代码加入 Global CSS 中,给需要闭合的 div 加上 class="clearfix" 即可,屡试不爽。

<style>
  /* Clear Fix */
  .clearfix:after {
    content: ".";
    display: block;
    height: 0;
    clear: both;
    visibility: hidden;
  }
  .clearfix {
    display: inline-block;
  }

  /* Hide from IE Mac */
  .clearfix {
    display: block;
  }
</style>
 
<style>
  /* Clear Fix */
  .clearfix:after {
    content: ".";
    display: block;
    height: 0;
    clear: both;
    visibility: hidden;
  }
  .clearfix {
    display: inline-block;
  }

  /* Hide from IE Mac */
  .clearfix {
    display: block;
  }
</style>

        ● 其他兼容技巧(再次啰嗦)
        ① FF 下给 div 设置 padding 后会导致 width 和 height 增加, 但IE不会(可用 !important 解决)。
        ② css 布局中的居中问题,主要的样式定义如下:

body {
  text-align: center;
}
#center {
  margin-right: auto;
  margin-left: auto;
}
body {
  text-align: center;
}
#center {
  margin-right: auto;
  margin-left: auto;
}


说明:首先在父级元素定义 text-align: center; 这个的意思就是在父级元素内的内容居中。对于 IE 这样设定就已经可以了。但在 FF 中不能居中。解决办法就是在子元素定义时候设定时再加上 margin-right: auto; margin-left: auto; 需要说明的是,如果你想用这个方法使整个页面要居中,建议不要套在一个 DIV 里,你可以依次拆出多个div,只要在每个拆出的 div 里定义 margin-right: auto; margin-left: auto; 就可以了。
        ③ 若需给 a 标签内内容加上样式, 需要设置 display: block;(常见于导航标签)
        ④ FF 和 IE 对 BOX 理解的差异导致相差 2px。还有,设为 float 的 div 在 ie下 margin 加倍等问题。
        ⑤ ul 标签在 FF 下面默认有 list-style 和 padding。最好事先声明, 以避免不必要的麻烦。(常见于导航标签和内容列表)
        ⑥ 作为外部 wrapper 的 div 不要定死高度, 最好还加上 overflow: hidden,以达到高度自适应。
        ⑦ 关于手形光标,cursor: pointer。而 hand 只适用于 IE。




        ● 浮动 IE 产生的双倍距离

#box {
  float:left; width:100px; margin: 0 0 0 100px; // 这种情况之下 IE 会产生 200px 的距离
  display: inline; // 使浮动忽略
}
#box {
  float:left; width:100px; margin: 0 0 0 100px; // 这种情况之下 IE 会产生 200px 的距离
  display: inline; // 使浮动忽略
}


这里细说一下 block, inline 两个元素。block 元素的特点是: 总是在新行上开始,高度、宽度、行高、边距都可以控制(块元素);inline 元素的特点是: 和其他元素在同一行上,高度、宽度、行高、边距不可控制(内嵌元素)。


        ● IE 中宽度和高度的问题
        IE 不认得 min- 这个定义,但实际上它把正常的 width 和 height 当作有 min 的情况来使用。这样问题就大了,如果只用宽度和高度,正常的浏览器里这两个值就不会变,如果只用 min-width 和 min-height 的话,IE 下面等于根本就没有设置宽度和高度。比如要设置背景图片,这个宽度是比较重要的。要解决这个问题,可以这样:

#box { width: 80px; height: 35px; }
html>body #box { width: auto; height: auto; min-width: 80px; min-height: 35px; }
 



        ● 页面的最小宽度
        min-width 是个非常方便的 CSS 命令,它可以指定元素最小也不能小于某个宽度,这样就能保证排版一直正确。但 IE 不认得这个,而它实际上把 width 当做最小宽度。为了让这一命令在 IE 上也能用,可以把一个 <div> 放到 <body> 标签下,然后为 div 指定一个类:

// 第一个 min-width 是正常的;但第 2 行的 width 使用了 javascript,这只有 IE 才认得,
// 这也会使你的 HTML 文档显得不太正规。它实际上通过 javascript 的判断来实现最小宽度。
#container {
  min-width: 600px;
  width:expression(document.body.clientWidth < 600? "600px": "auto" );
}
 
// 第一个 min-width 是正常的;但第 2 行的 width 使用了 javascript,这只有 IE 才认得,
// 这也会使你的 HTML 文档显得不太正规。它实际上通过 javascript 的判断来实现最小宽度。
#container {
  min-width: 600px;
  width:expression(document.body.clientWidth < 600? "600px": "auto" );
}




        ● 清除浮动

.hackbox {
  display: table; // 将对象作为块元素级的表格显示
}
或者
.hackbox {
  clear: both;
}
 

 

或者加入 :after(伪对象),设置在对象后发生的内容,通常和 content 配合使用,IE 不支持此伪对象,非 IE 浏览器支持,所以并不影响到 IE/WIN 浏览器。这种的最麻烦的。


#box:after {
  content: ".";
  display: block;
  height: 0;
  clear: both;
  visibility: hidden;
}

 

#box:after {
  content: ".";
  display: block;
  height: 0;
  clear: both;
  visibility: hidden;
}

 


        ● DIV 浮动 IE 文本产生 3 像素的 bug
        左边对象浮动,右边采用外补丁的左边距来定位,右边对象内的文本会离左边有 3px 的间距。

#box{ float: left; width: 800px; }
#left { float: left; width: 50%; }
#right { width:50%; }
*html #left { margin-right: -3px; } // 这句是关键

<div id="box">
  <div id="left"></div>
  <div id="right"></div>
</div>
 
#box{ float: left; width: 800px; }
#left { float: left; width: 50%; }
#right { width:50%; }
*html #left { margin-right: -3px; } // 这句是关键

<div id="box">
  <div id="left"></div>
  <div id="right"></div>
</div>




        ● IE 捉迷藏的问题
        当 div 应用复杂的时候每个栏中又有一些链接,DIV 等这个时候容易发生捉迷藏的问题。有些内容显示不出来,当鼠标选择这个区域是发现内容确实在页面。解决办法:对 #layout 使用 line-height 属性或者给 #layout 使用固定高和宽。页面结构尽量简单。


        ● 高度不适应
        高度不适应是当内层对象的高度发生变化时外层高度不能自动进行调节,特别是当内层对象使用 margin 或 paddign 时。

#box { background-color: #eee; }
#box p { margin-top: 20px; margin-bottom: 20px; text-align: center; }

<div id="box">
  <p>p对象中的内容</p>
</div>
 
#box { background-color: #eee; }
#box p { margin-top: 20px; margin-bottom: 20px; text-align: center; }

<div id="box">
  <p>p对象中的内容</p>
</div>


解决方法:在 p 对象上下各加 2 个空的 div 对象。CSS 代码:.1 { height: 0px; overflow: hidden; } 或者为 DIV 加上 border 属性。

分享到:
评论

相关推荐

    WorkerError(解决方案).md

    项目中常见的问题,记录一下解决方案

    2024-2025第一学期一上U1~3.pdf

    2024-2025第一学期一上U1~3.pdf

    Redis详解与常见问题解决方案中文最新版本

    redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sortedset --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。感兴趣的朋友可以过来看看

    ASP+ACCESS航班在线定票系统设计(源代码+论文)(源代码+论文+说明文档).zip

    【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。

    全国月尺度平均气温-Tm-1961-2022-025x025

    全国月尺度平均气温数据集(1961-2022, 0.25° × 0.25°)是一个高分辨率的网格化平均气温数据集,覆盖了中国大陆及周边地区。 该数据集通过科学方法整合气象观测和再分析数据,为气候研究、生态模型、农业生产、以及水资源管理等领域提供了重要支持。 数据下载后可显示详细信息。

    yolo算法-筷子数据集-588张图像带标签-.zip

    yolo系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值

    shell脚本编程实践,分享给有需要的人,仅供参考

    模拟退火算法shell脚本编程实践,分享给有需要的人,仅供参考。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。

    基于PCIe接口的高性能视频编辑系统.docx

    基于PCIe接口的高性能视频编辑系统

    python爬虫入门,分享给有需要的人,仅供参考

    python爬虫入门,分享给有需要的人,仅供参考。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。

    在线音乐网站的设计与实现

    在线音乐网站的设计与实现

    电工与电子技术课程标准.doc

    电工与电子技术课程标准.doc

    1-全国各地级市人口、城镇居民人均可支配收入、进出口总额、社会消费品零售总额2015-2021年-社科数据.zip

    根据搜索结果,以下是一条关于社科数据的内容介绍:本数据集涵盖了2015至2021年间全国各地级市的关键经济指标,包括人口数量、城镇居民人均可支配收入、进出口总额以及社会消费品零售总额。这些数据为研究区域经济发展提供了宝贵的信息资源,来源于各省市统计年鉴及国家统计局的官方数据,确保了数据的权威性和准确性。数据内容全面,缺失值较少,适合用于宏观经济分析、政策评估以及学术研究等多个领域。通过这些数据,研究者可以深入了解中国各地区在不同年份的经济表现和发展趋势。

    SessionStorageError(解决方案).md

    项目中常见的问题,记录一下解决方案

    yolo算法-大卡车数据集-96张图像带标签--卡车.zip

    yolo系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值

    6.html

    6

    [net毕业设计]asp.net教师教学评价分析系统(源代码+论文).zip

    【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。

    IP破解(5):DWC-ddrctl-lpddr54(LPDDR4/4X/5控制器)

    S家LPDDR5/4/4X 控制器,针对功耗、延迟、带宽和面积进行了优化,支持 JEDEC 标准 LPDDR5、LPDDR4 和 LPDDR4X SDRAM。控制器通过 DFI 5.0 接口连接到 S家LPDDR5/4/4X PHY 或其他 LPDDR5/4/4X PHY,以创建一个完整的内存接口解决方案。S LPDDR5/4/4X 控制器包括软件配置寄存器,可通过 AMBA 3.0 APB 接口访问。 // Key Used : DWC-DDRCTL (IP access) // Key Used : DWC-LPDDR54-CONTROLLER (Add-on feature access: DWC LPDDR5/4/4X Controller) 注意:压缩包只有IP使用文档,完整IP及无加密SV代码压缩包有获取方式。

    java桌面小程序,主要为游戏.zip学习资源

    java桌面小程序,主要为游戏.zip学习资源VM

    1-全国各省、市、县农业保险绿色保险收入支出赔付率统计数据2002-2020年-社科数据.zip

    全国各省、市、县农业保险绿色保险收入支出赔付率统计数据集涵盖了2002至2020年间的详细数据。该数据集包含全国31个省、自治区、直辖市的农业保险收入、支出、保险总支出、农业保险规模占比以及农业保险赔付率等关键指标。此外,数据还涉及341个地级市的农业保险收入和支出年度数据,时间跨度从2002年到2020年。特别值得一提的是,数据中还包括了县级政府农业保险补贴数据,覆盖了产粮大县726个和非产粮大县755个,时间范围为2016至2018年。这些数据均来源于历年中国保险年鉴,并经过手工整理,提供了农业保险规模占比与农业保险赔付率等重要指标。此数据集为研究中国农业保险市场的发展、政策效果评估以及风险管理提供了宝贵的实证资料。

    中医诊所系统,WPF.zip

    中医诊所系统,WPF.zip

Global site tag (gtag.js) - Google Analytics