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 box-sizing属性
Apr 17 HTML / CSS
纯CSS3实现地球自转实现代码(图文教程附送源码)
Dec 26 HTML / CSS
纯CSS实现菜单、导航栏的3D翻转动画效果
Apr 23 HTML / CSS
利用HTML5+css3+jquery+weui实现仿微信聊天界面功能
Jan 08 HTML / CSS
HTML5 Canvas draw方法制作动画效果示例
Jul 11 HTML / CSS
HTML5里的placeholder属性使用实例和美化显示效果的方法
Apr 23 HTML / CSS
html5在移动端的屏幕适应问题示例探讨
Jun 15 HTML / CSS
详解如何用HTML5 Canvas API控制图片的缩放变换
Mar 22 HTML / CSS
基于HTML5的WebGL经典3D虚拟机房漫游动画
Nov 15 HTML / CSS
html5小程序飞入购物车(抛物线绘制运动轨迹点)
Oct 19 HTML / CSS
html5实现点击弹出图片功能
Jul 16 HTML / CSS
css中:last-child不生效的解决方法
Aug 05 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
symfony2.4的twig中date用法分析
2016/03/18 PHP
PHP strip_tags保留多个HTML标签的方法
2016/05/22 PHP
让回调函数 showResponse 也带上参数的代码
2007/08/13 Javascript
JavaScript isArray()函数判断对象类型的种种方法
2010/10/11 Javascript
jquery结合CSS使用validate实现漂亮的验证
2015/01/29 Javascript
浅谈javascript中return语句
2015/07/15 Javascript
javascript中SetInterval与setTimeout的定时器用法
2015/08/24 Javascript
jquery实现简单的全选和反选功能
2016/01/02 Javascript
jQuery Mobile页面返回不需要重新get
2016/04/26 Javascript
使用bootstrap3开发响应式网站
2016/05/12 Javascript
JavaScript知识点总结(十一)之js中的Object类详解
2016/05/31 Javascript
使用ajaxfileupload.js实现上传文件功能
2016/08/13 Javascript
jQuery表单对象属性过滤选择器实例详解
2016/09/13 Javascript
HTML5 JS压缩图片并获取图片BASE64编码上传
2020/11/16 Javascript
vue2.0使用Sortable.js实现的拖拽功能示例
2017/02/21 Javascript
深入理解基于vue-cli的vuex配置
2017/07/24 Javascript
实例详解BootStrap的动态模态框及静态模态框
2018/08/13 Javascript
JS实现的RC4加密算法示例
2018/08/16 Javascript
react 应用多入口配置及实践总结
2018/10/17 Javascript
[01:59]游戏“zheng”当时试玩会
2019/08/21 DOTA
比较详细Python正则表达式操作指南(re使用)
2008/09/06 Python
使用Python脚本将文字转换为图片的实例分享
2015/08/29 Python
python七夕浪漫表白源码
2019/04/05 Python
python ChainMap 合并字典的实现步骤
2019/06/11 Python
Django后端发送小程序微信模板消息示例(服务通知)
2019/12/17 Python
python GUI库图形界面开发之PyQt5窗口布局控件QStackedWidget详细使用方法
2020/02/27 Python
Pycharm如何运行.py文件的方法步骤
2020/03/03 Python
弄清Pytorch显存的分配机制
2020/12/10 Python
干部考核评语
2014/04/29 职场文书
中秋客户感谢信
2015/01/22 职场文书
2015年社区文体活动总结
2015/03/25 职场文书
走进科学观后感
2015/06/18 职场文书
2015年市场营销工作总结
2015/07/23 职场文书
烈士陵园扫墓感想
2015/08/07 职场文书
Python图片检索之以图搜图
2021/05/31 Python
springboot中rabbitmq实现消息可靠性机制详解
2021/09/25 Java/Android