IE浏览器单独写CSS样式的几种方法


Posted in HTML / CSS onOctober 14, 2014

因为万恶的 IE 存在各种的不标准,因此,在进行页面开发时不免要为 IE 单独写一些 CSS 。熟悉的方法有 IE hacks 和条件注释 CSS(Conditional Stylesheets),下面,不妨讨论一下这两种方法的优缺点。

IE hacks

举个例子,一个元素在其他浏览中的左边距是 30px ,而在 IE6 中则设置为 20px ,可以如下编写:

复制代码
代码如下:

.demo {margin-left: 30px; _margin-left: 20px; }

对我个人而言,喜欢条件注释 CSS 是胜于 IE hacks ,光是 IE hacks 里面带有“hacks”这个单词已经让人很不舒服,总觉得这是偏方,而且是很偏的解决方案。但是,IE hacks 也有它的优点——

1.CSS hacks 内嵌在普通的 CSS 里面,不会产生更多 HTTP 请求。
2.CSS hacks 内嵌在普通的 CSS 里面,编写时比较方便。

当然,它的缺点也很明显——

1.它是不标准的产物。
2.内嵌在其他 CSS 中,不便维护。尤其是当 hacks 的数量比较多的时候维护简直是个恶梦。
3.内嵌在其他 CSS 中,即使在非 IE 浏览器中也会被加载,浪费资源。

条件注释 CSS

同样是上面的例子,如果使用条件注释 CSS ,可以如下编写:

HTML:

复制代码
代码如下:

<!--[if IE 6 ]>
<link rel="stylesheet" type="text/css" media="all" href="./ie6.css" />
<![endif]-->

ie6.css

复制代码
代码如下:

.demo {margin-left: 20px; }

这里说明一下:条件注释是一种 IE 专有的、对常规(X)HTML 注释的 Miscrosoft 扩展。从 W3C 标准来说,它也是不标准的产物,但它是微软官方推出的针对 IE 进行开发的方式,并且条件注释对于其他所有浏览器作为常规注释出现,因此对其他浏览器无害。

条件注释 CSS 的好处是在独立的 CSS 文件中编写,能准确控制在特定的 IE 中加载,不会造成资源浪费,并且便于维护。缺点就是会产生多余的 HTTP 请求,尤其是当你需要兼容的 IE 版本很多的时候,你就需要产生多个 HTTP 请求,这对于本来通道数目就少的低版本 IE 来说无疑会影响页面加载速度。

显然,以上两种方法都不是很好的方法,因此,接下来介绍一种相对来说更好的解决方案。

条件注释 html 标签

这种方案也是利用条件注释,但并不是对 CSS 使用条件注释,而是对 html 标签使用条件注释,引入不同的 class ,从而区分不同的 IE 以及其他浏览器。例如:

复制代码
代码如下:

<!DOCTYPE html>
<!--[if IE 6 ]> <html class="ie6 lte_ie6 lte_ie7 lte_ie8" lang="zh-CN"> <![endif]-->
<!--[if lte IE 6 ]> <html class="lte_ie6 lte_ie7 lte_ie8" lang="zh-CN"> <![endif]-->
<!--[if lte IE 7 ]> <html class="lte_ie7 lte_ie8" lang="zh-CN"> <![endif]-->
<!--[if lte IE 8 ]> <html class="lte_ie8" lang="zh-CN"> <![endif]-->
<!--[if (gte IE 9)|!(IE)]><!--><html lang="zh-CN"><!--<![endif]-->

然后把针对特定 IE 的 CSS 加上相应的 class 并写在普通 CSS 文件里即可。例如上面的例子则可以在 CSS 文件里编写:

复制代码
代码如下:

.ie6 .demo {margin-left: 20px; }

这种方法吸收了条件注释表达式的好处同时又不会产生多余的 HTTP 请求,只是由于这些针对特定 IE 的 CSS 与普通的 CSS 放在一起,即不是相应的 IE 也会被加载,因此如果 CSS 数目比较多的话就会像使用 hacks 那样,造成浪费,开发者需要根据具体情况选择方法。
HTML / CSS 相关文章推荐
利用CSS3的定位页面元素
Aug 29 HTML / CSS
纯css3实现的动画按钮的实例教程
Nov 17 HTML / CSS
浅谈CSS3 动画卡顿解决方案
Jan 02 HTML / CSS
Canvas 文本转粒子效果的实现代码
Feb 14 HTML / CSS
html5使用canvas画三角形
Dec 15 HTML / CSS
HTML5的Video标签有部分MP4无法播放的问题解析(多图)
Aug 18 HTML / CSS
canvas实现按住鼠标移动绘制出轨迹的示例代码
Feb 05 HTML / CSS
canvas环形倒计时组件的示例代码
Jun 14 HTML / CSS
canvas 基础之图像处理的使用
Apr 10 HTML / CSS
HTML5 SEO优化的一些建议
Aug 27 HTML / CSS
关于CSS浮动与取消浮动的问题
Jun 28 HTML / CSS
CSS中float高度塌陷问题的四种解决方案
Apr 18 HTML / CSS
CSS3 重置iphone浏览器按钮input,select等表单元素的默认样式
Oct 11 #HTML / CSS
css3 图片圆形显示 如何CSS将正方形图片显示为圆形图片布局
Oct 10 #HTML / CSS
css3弹性盒模型(Flexbox)详细介绍
Oct 08 #HTML / CSS
一款纯css3实现的动画加载导航
Oct 08 #HTML / CSS
css3 transform属性详解
Sep 30 #HTML / CSS
让IE支持CSS3的不完全兼容方案
Sep 19 #HTML / CSS
一款css实现的鼠标经过按钮的特效
Sep 11 #HTML / CSS
You might like
回首过去10年中最搞笑的10部动漫,哪一部让你节操尽碎?
2020/03/03 日漫
德劲1102收音机的打理维修案例
2021/03/02 无线电
跟我学小偷程序之成功偷取首页(第三天)
2006/10/09 PHP
PHP中的超全局变量
2006/10/09 PHP
php小型企业库存管理系统的设计与实现代码
2011/05/16 PHP
php模拟socket一次连接,多次发送数据的实现代码
2011/07/26 PHP
基于MySQL体系结构的分析
2013/05/02 PHP
php第一次无法获取cookie问题处理
2014/12/15 PHP
php设计模式之适配器模式实例分析【星际争霸游戏案例】
2020/04/07 PHP
jquery.ui.draggable中文文档
2009/11/24 Javascript
iframe子页面获取父页面元素的方法
2013/11/05 Javascript
IE6已终止操作问题的2种情况及解决
2014/04/23 Javascript
JS截取与分割字符串常用技巧总结
2015/11/10 Javascript
JS实现星星评分功能实例代码(两种方法)
2016/06/09 Javascript
JavaScript实现输入框与清空按钮联动效果
2016/09/09 Javascript
IONIC自定义subheader的最佳解决方案
2016/09/22 Javascript
Javascript动画效果(2)
2016/10/11 Javascript
利用Node.JS实现邮件发送功能
2016/10/21 Javascript
JavaScript组成、引入、输出、运算符基础知识讲解
2016/12/08 Javascript
拖动时防止选中
2017/02/03 Javascript
Vuejs仿网易云音乐实现听歌及搜索功能
2017/03/30 Javascript
详解从新建vue项目到引入组件Element的方法
2017/08/29 Javascript
浅谈React + Webpack 构建打包优化
2018/01/23 Javascript
用Vue写一个分页器的示例代码
2018/04/22 Javascript
小程序使用分包的示例代码
2020/03/23 Javascript
jQuery 实现扁平式小清新导航
2020/07/07 jQuery
python WindowsError的错误代码详解
2017/07/23 Python
opencv实现静态手势识别 opencv实现剪刀石头布游戏
2019/01/22 Python
Python enumerate内置库用法解析
2020/02/24 Python
Python logging模块handlers用法详解
2020/08/14 Python
软件测试工程师面试问题精选
2016/10/28 面试题
上班打牌检讨书
2014/02/07 职场文书
一年级学生期末评语
2014/04/21 职场文书
小学校长开学致辞
2015/07/29 职场文书
MySQL 全文索引使用指南
2021/05/25 MySQL
Python Pandas解析读写 CSV 文件
2022/04/11 Python