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教程(6):创建网站多列
Apr 02 HTML / CSS
css3进行截取替代js的substring
Sep 02 HTML / CSS
css3实现可滑动跳转的分页插件示例
May 08 HTML / CSS
css3实现可拖动的魔方3d效果
May 07 HTML / CSS
HTML5等待加载动画效果
Jul 27 HTML / CSS
10个最常见的HTML5面试题 附答案
Jun 06 HTML / CSS
html5 div布局与table布局详解
Nov 16 HTML / CSS
localstorage和sessionstorage使用记录(推荐)
May 23 HTML / CSS
canvas进阶之如何画出平滑的曲线
Oct 15 HTML / CSS
CSS基础详解
Oct 16 HTML / CSS
使用CSS连接数据库的方式
Feb 28 HTML / CSS
html用代码制作虚线框怎么做? dw制作虚线圆圈的技巧
Dec 24 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
去除php注释和去除空格函数分享
2014/03/13 PHP
php实时倒计时功能实现方法详解
2017/02/27 PHP
javaScript函数中执行C#代码中的函数方法总结
2013/08/07 Javascript
js中的如何定位固定层的位置
2014/06/15 Javascript
分享五个有用的jquery小技巧
2015/10/08 Javascript
详解JavaScript对象和数组
2015/12/03 Javascript
通过隐藏iframe实现无刷新上传文件操作
2016/03/16 Javascript
AngularJS 指令的交互详解及实例代码
2016/09/14 Javascript
nodeJS(express4.x)+vue(vue-cli)构建前后端分离实例(带跨域)
2017/07/05 NodeJs
vue实现消息的无缝滚动效果的示例代码
2017/12/05 Javascript
JS中数组实现代码(倒序遍历数组,数组连接字符串)
2019/12/29 Javascript
vue-resource 拦截器interceptors使用详解
2021/01/18 Vue.js
[47:38]Optic vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
[01:18:45]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第三场2月1日
2021/03/11 DOTA
python append、extend与insert的区别
2016/10/13 Python
浅谈python中的数字类型与处理工具
2017/08/02 Python
Python 处理数据的实例详解
2017/08/10 Python
pyqt5 使用label控件实时显示时间的实例
2019/06/14 Python
python面试题之列表声明实例分析
2019/07/08 Python
Python模块future用法原理详解
2020/01/20 Python
CSS3 Media Queries(响应式布局可以让你定制不同的分辨率和设备)
2013/06/06 HTML / CSS
canvas使用注意点总结
2013/07/19 HTML / CSS
西班牙汉普顿小姐:购买帆布鞋和太阳镜
2016/10/23 全球购物
美国工业用品采购网站:Zoro.com
2020/10/27 全球购物
西安众合通用.net笔试题
2013/03/18 面试题
C#中类(class)与结构(struct)的异同
2013/11/03 面试题
入党自我鉴定范文
2013/10/04 职场文书
低碳环保口号
2014/06/12 职场文书
2014工程部年度工作总结
2014/12/17 职场文书
先进党组织事迹材料
2014/12/26 职场文书
前台岗位职责
2015/02/13 职场文书
超市督导岗位职责
2015/04/10 职场文书
温馨祝福晨语:美丽的一天从我的问候开始
2019/11/28 职场文书
MySQL REVOKE实现删除用户权限
2021/06/18 MySQL
oracle重置序列从0开始递增1
2022/02/28 Oracle
Centos7 Shell编程之正则表达式、文本处理工具详解
2022/08/05 Servers