!important和(空格)/**/:的组合技巧及其他
先温习一下对于IE的box-model的破解
IE box-model这个臭名昭著的bug存在于IE6/Win以前的每一只版本,这个虫子直到tantak发布了流传最为广泛的那个hack才开始被驯服。
IE5.X/win对box-model的解析是一样的,他们认为width包括了边框(border)和补白(padding),幸运的是这个情况在IE6中有了好转。
但是IE6在向后兼容的同时也包容了以前的错误,IE6其实有两个核心,在旧的页面前他仍旧表现出对错误的宽容,只有在文档中严格地加上文档类型(DOCTYPE)声明,IE6才能够接受正确的box-model。
所以,tantak的hack必须和正确的DOCTYPE同时包含在文档中才能够正常工作
代码如下 | 复制代码 |
div.content { width:400px; //这个是错误的width,所有浏览器都读到了 voice-family: ""}""; //IE5.X/win忽略了""}""后的内容 voice-family:inherit; width:300px; //包括IE6/win在内的部分浏览器读到这句,新的数值(300px)覆盖掉了旧的 } html>body .content { //html>body是CSS2的写法 width:300px; //支持CSS2该写法的浏览器有幸读到了这一句 } |
现在回到主题,我们经常看到!important和(空格)/**/:组合在一起使用,这个写法有什么奥妙呢?
看刚才那个写法,我这里可以提供另一种写法也能达到这样的效果
代码如下 | 复制代码 |
div.content { width:300px !important; //这个是正确的width,大部分支持!important标记的浏览器使用这里的数值 width(空格)/**/:400px; //IE6/win不解析这句,所以IE6/win仍然认为width的值是300px;而IE5.X/win读到这句,新的数值(400px)覆盖掉了旧的,因为!important标记对他们不起作用 } html>body .content { //html>body是CSS2的写法 width:300px; //支持CSS2该写法的浏览器有幸读到了这一句 } |
同样,这个方法仍必须依靠正确的文档类型声明才能够正常工作,原因在前面已经说过。
文档类型声明就像一个开关,打开向后兼容的未来,而错误使用的话,就是一个Pandora box。
我的博物馆故事 官方安卓版v1.61.2
我的博物馆故事是一款以消除为主题的经营养成类手游,在这里玩家
专业模拟飞行10 手机版v12.2.4
专业模拟飞行10安卓版是一款飞行休闲手游,顶尖的物理飞行引擎
动物起义战斗模拟器二琳同款 最新版v4.1.1
动物起义战斗模拟器是一个非常有趣的模拟类游戏,玩家可以召唤各
迷你世界七周年 安卓手机版v1.43.0
迷你世界7周年是一款由《迷你世界》官方推出的庆祝特别版本,在
劫后公司无限资源版 v1.0.5.1
劫后公司内置菜单版是游戏的破解版本,在该版本中为玩家提供了内