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 @font-face属性使用指南
Dec 12 HTML / CSS
详解CSS3选择器:nth-child和:nth-of-type之间的差异
Sep 18 HTML / CSS
CSS3实现文字描边的2种方法(小结)
Feb 14 HTML / CSS
html5+css3之制作header实例与更新
Dec 21 HTML / CSS
HTML5 Canvas绘制文本及图片的基础教程
Mar 14 HTML / CSS
Html5新增标签与样式及让元素水平垂直居中
Jul 11 HTML / CSS
详解如何用canvas画一个微笑的表情
Mar 14 HTML / CSS
基于Modernizr 让网站进行优雅降级的分析
Apr 21 HTML / CSS
canvas因为图片资源不在同一域名下而导致的跨域污染画布的解决办法
Jan 18 HTML / CSS
用canvas做一个DVD待机动画的实现代码
Apr 12 HTML / CSS
将SVG图引入到HTML页面的实现
Sep 20 HTML / CSS
HTML5 HTMLCollection和NodeList的区别详解
Apr 29 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常用代码
2006/11/23 PHP
snoopy 强大的PHP采集类使用实例代码
2010/12/09 PHP
PHP操作Memcache实例介绍
2013/06/14 PHP
在Yii框架中使用PHP模板引擎Twig的例子
2014/06/13 PHP
CI框架自动加载session出现报错的解决办法
2014/06/17 PHP
基于PHP实现解密或加密Cloudflar邮箱保护
2020/06/24 PHP
一个很简单的jquery+xml+ajax的无刷新树结构(无css,后台是c#)
2010/06/02 Javascript
jquery 模板的应用示例
2013/11/12 Javascript
NodeJS学习笔记之MongoDB模块
2015/01/13 NodeJs
jquery插件EasyUI中form表单提交实例分享
2016/01/11 Javascript
详细总结Javascript中的焦点管理
2016/09/17 Javascript
js微信支付实现代码
2016/12/22 Javascript
20170918 前端开发周报之JS前端开发必看
2017/09/18 Javascript
Vue项目中使用Vux的安装过程
2018/05/01 Javascript
详解jQuery中的easyui
2018/09/02 jQuery
在JS循环中使用async/await的方法
2018/10/12 Javascript
微信小程序页面间值传递的两种方法
2018/11/26 Javascript
使用form-create动态生成vue自定义组件和嵌套表单组件
2019/01/18 Javascript
js form表单input框限制20个字符,10个汉字代码实例
2019/04/12 Javascript
对于防止按钮重复点击的尝试详解
2019/04/22 Javascript
vue中的mescroll搜索运用及各种填坑处理
2019/10/30 Javascript
浅谈Tensorflow由于版本问题出现的几种错误及解决方法
2018/06/13 Python
在python tkinter界面中添加按钮的实例
2020/03/04 Python
Python如何合并多个字典或映射
2020/07/24 Python
python 还原梯度下降算法实现一维线性回归
2020/10/22 Python
Python爬虫中Selenium实现文件上传
2020/12/04 Python
Java基础面试题
2014/07/19 面试题
Java语言程序设计测试题改错题部分
2014/07/22 面试题
项目经理岗位职责
2013/11/11 职场文书
鸿星尔克广告词
2014/03/21 职场文书
春秋淹城导游词
2015/02/11 职场文书
匿名信格式范文
2015/05/27 职场文书
帝企鹅日记观后感
2015/06/10 职场文书
张丽莉观后感
2015/06/16 职场文书
MySQL创建管理HASH分区
2022/04/13 MySQL
Android开发手册Chip监听及ChipGroup监听
2022/06/10 Java/Android