CSS 忍者:安全的 CSS hacks 秘籍
你如何搞定 IE 这只难以驯服的怪兽?使用 CSS Hacks 或者条件注释么?恐怕没有什么解决方案是完美的。每个设计师或者前端码农都会有自己打败 IE 行之有效的方法。所有这些技术都各有利弊,让我们一起来看看。
通过条件判断引入样式表
使我们能很容易在 IE 浏览器中通过条件注释语句加载指定样式表,而其他非 IE 内核浏览器则自动忽略这段蹩脚的 HTML 注释。下面是一个例子:
<!--[if IE 8]><link rel="stylesheet" href="ie8.css"><![endif]--> <!--[if IE 7]><link rel="stylesheet" href="ie7.css"><![endif]--> <!--[if IE 6]><link rel="stylesheet" href="ie6.css"><![endif]-->
这段代码会导致 IE8、IE7、IE6 各自加载对应的样式文件。这事实上是非常牛逼的,条件注释给按浏览器加载各自不同的样式表提供了可能,但同时需要维护多个样式文件。
CSS hacks
这事实上是个龌龊的做法,能解决问题又不符合规范,看着也很头大。大部分人看着它只能束手无策而又逼不得已。之前的《CSS Hacks for IE,IE 也可以很完美》已经谈过 IE 的 CSS hacks 了。现在可以来简单回顾一下常用的几个方法:
_selector{property:value;} //IE6 *selector{property:value;} //IE6 & IE7 selector{property:value\9;} //IE6 & IE7 & IE8
这个一般人都知道,就不多说了。但面临的一个现实问题是,\9
这个 hack 不只是针对 IE8 以及更老版本奏效,IE9 最终的发行版依旧会受到这个 hack 的影响。而 IE9 本身在 CSS 上的各种缺陷又是被修复的。如果将来 IE10、IE11 来了,那又怎么办?显然 \9
并不是一个严谨的安全的方案。
另外,采用不同的 X-UA-Compatible
模式也会影响不同版本的 IE 渲染差异。建议设置默认渲染模式如下:
<meta http-equiv="X-UA-Compatible" content="IE=Edge">//标准 IE 模式
那咋整呢?咋整咋整咋整?没事,下面还有更绝的。
通过条件判断插入指定类
既然可以用条件判断,那么直接为不同 IE 版本输出单独用于设定样式的钩子类好了。直接上代码:
<!--[if !IE]><html><![endif]--> // 非 IE 浏览器的情况,不添加任何作用类 <!--[if IE 6]><html><![endif]--> <!--[if IE 7]><html><![endif]--> <!--[if IE 8]><html><![endif]-->
如果要是 IE9、IE10 再想出现什么神奇的行为艺术的话,继续添加指定作用类就行咯。并且你的样式表也会变得异常干净、整洁、美观:
.selector { color: black; } .ie8 .selector { color: green; } /* IE8 */ .ie7 .selector { color: blue; } /* IE7 */ .ie6 .selector { color: red; } /* IE6 */
当然,标准模式的 X-UA-Compatible
声明还是必须的,以防页面被强制按照低版本的 IE 来渲染。
关于条件注释的参考资料:http://msdn.microsoft.com/en-us/library/ms537512.aspx
建议继续学习:
- 各浏览器的默认CSS (阅读:3714)
- CSS的未来:明智的布局工具终于到来 (阅读:3150)
- 使用CSS框架的优点和缺点 (阅读:2651)
- 12个很少被人知道的CSS事实 (阅读:2665)
- 移动网站开发――CSS (阅读:2275)
- Github 的 CSS 风格指南 (阅读:1989)
- CSS 设计理念 (阅读:1918)
- 前端编码规范(4)—— CSS 和 Sass (SCSS) 规范 (阅读:1766)
- 再谈怎样更好的写css (阅读:1206)
- 初谈怎样更好的去规划CSS (阅读:929)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:simondai 来源: 流金岁月
- 标签: CSS
- 发布时间:2011-06-20 13:36:51
- [68] IOS安全–浅谈关于IOS加固的几种方法
- [66] Twitter/微博客的学习摘要
- [64] 如何拿下简短的域名
- [61] android 开发入门
- [60] find命令的一点注意事项
- [59] Go Reflect 性能
- [57] 流程管理与用户研究
- [56] Oracle MTS模式下 进程地址与会话信
- [56] 图书馆的世界纪录
- [55] 读书笔记-壹百度:百度十年千倍的29条法则