css hack

1、什么是CSS hack?

CSS hack是通过在CSS样式中加入一些特殊的符号,让不同的浏览器识别不同的符号(什么样的浏览器识别什么样的符号是有标准的,CSS hack就是让你记住这个标准),以达到应用不同的CSS样式的目的,比如.kwstu{width:300px;_width:200px;},一般浏览器会先给元素使用width:300px;的样式,紧接着后面还有个_width:200px;由于下划线_width只有IE6可以识别,所以此样式在IE6中实际设置对象的宽度为200px,后面的把前面的给覆盖了,而其他浏览器不识别_width不会执行_width:200px;这句样式,所以在其他浏览器中设置对象的宽度就是300px;

以下是引自百度文库的定义

简单地讲,css hack指各版本及各品牌浏览器之间对CSS解释后出现网页内容的误差(比如我们常说错位)的处理。由于各浏览器的内核不同,所以会造成一些误差就像JS一样,一个JS网页特效,在微软IE6、IE7、IE8浏览器有效果,但可能在火狐(Mozilla Firefox)谷歌浏览器无效,这样就叫做JS hack ,所以我们对于CSS来说他们来解决各浏览器对CSS解释不同所采取的区别不同浏览器制作不同的CSS样式的设置来解决这些问题就叫作CSS Hack。
注意:我们通常主要考虑的浏览器有IE6、IE7、IE8、谷歌浏览器(chrome)、火狐(Mozilla Firefox)即可,至于我们常用的傲游、QQ的TT浏览器是用你计算机中装的系统自带浏览器的内核,所以只需要兼容以上浏览器即可兼容TT\傲游浏览器。

2、CSS hack解决问题

CSS hack用来解决有些css属性在不同浏览器中显示的效果不一样的问题,如margin属性在ie6中显示的距离会比其他浏览器中显示的距离宽2倍,也就是说margin-left:20px;在ie6中距左侧对象的实际显示距离是40px,而在非ie6中显示的距左侧对象的距离是设置的值20px;所以要想设置一个对象距离左侧对象的距离在所有浏览器中都显示是20px的宽度的样式应为:.kwstu{margin-left:20px;_margin-left:20px;}。

3、浏览器识别字符标准对应表

从上图可以分析出以下几种情况:
1.大部分特殊字符IE浏览器支持,其他主流浏览器firefox,chrome,opera,safari不支持 (opera可识别除外)。2.\9 :所有IE浏览器都支持3._和- :仅IE6支持4.* :IE6、E7支持5.\0 :IE8、IE9支持,opera部分支持6.\9\0 :IE8部分支持、IE9支持7.\0\9 :IE8、IE9支持

4、各种CSS hack情况介绍

1.区别IE和非IE浏览器

tip{ background:blue;/非IE背景蓝色 因为所有浏览器都能解释/ background:red\9;/IE6、IE7、IE8、IE9背景紅色 因为\9在IE6.7.8.9中可以识别,覆盖上面样式 IE10跟11应该不识别,IE11测试确定/ }

2.区别IE6,IE7,IE8,FF

【区别符号】:“\9”、“”、“_”
tip{ background:blue;/
Firefox背景变蓝色 所有浏览器都支持/ background:red\9;/IE8背景变红色 IE6、7、8、9支持覆盖上面样式/ background:black;/IE7背景变黑色 IE6、7支持又一次覆盖上面样式/ background:orange;/IE6背景变橘色 紧IE6支持又一次覆盖上面样式/ }
【说明】:因为IE系列浏览器可读「\9」,而IE6和IE7可读「*」(米字号),另外IE6可辨识「
」(底线),因此可以依照顺序写下来,就会让浏览器正确的读取到自己看得懂得CSS语法,所以就可以有效区分IE各版本和非IE浏览器(像是Firefox、Opera、GoogleChrome、Safari等)。*

3.区别IE6、IE7、Firefox(方法1)

【区别符号】:“”、“_”
tip{ background:blue;/
Firefox背景变蓝色/ background:black;/IE7背景变黑色/ background:orange;/IE6背景变橘色/ }
【说明】:IE7和IE6可读「*」(米字号),IE6又可以读「
」(底线),但是IE7却无法读取「」,至于Firefox(非IE浏览器)则完全无法辨识「*」和「」,因此就可以透过这样的差异性来区分IE6、IE7、Firefox*

4.区别IE6、IE7、Firefox(方法2)

【区别符号】:“”、“!important”
tip{ background:blue;/
Firefox背景变蓝色/ background:green!important;/IE7背景变绿色/ background:orange;/IE6背景变橘色/ }
【说明】:IE7可以辨识「
」和「!important」,但是IE6只可以辨识「」,却无法辨识「!important」,至于Firefox可以读取「!important」但不能辨识「」因此可以透过这样的差异来有效区隔IE6、IE7、Firefox。*

5.区别IE7、Firefox

【区别符号】:“”、“!important”
ip{ background:blue;/
Firefox背景变蓝色/ background:green!important;/IE7背景变绿色/ }
【说明】:因为Firefox可以辨识「!important」但却无法辨识「」,而IE7则可以同时看懂「」、「!important」,因此可以两个辨识符号来区隔IE7和Firefox。*

6.区别IE6、IE7(方法1)

【区别符号】:“”、“_”
tip{ background:black;/IE7背景变黑色
/ background:orange;/IE6背景变橘色/ }
【说明】:IE7和IE6都可以辨识「*」(米字号),但IE6可以辨识「
」(底线),IE7却无法辨识,透过IE7无法读取「_」的特性就能轻鬆区隔IE6和IE7之间的差异。*

7.区别IE6、IE7(方法2)

【区别符号】:“!important”
tip{ background:black!important;/IE7背景变黑色/ background:orange;/IE6背景变橘色/ }
【说明】:因为IE7可读取「!important;」但IE6却不行,而CSS的读取步骤是从上到下,因此IE6读取时因无法辨识「!important」而直接跳到下一行读取CSS,所以背景色会呈现橘色。*

8.区别IE6、Firefox

【区别符号】:“_”
tip{ background:black;/Firefox背景变黑色/ background:orange;/IE6背景变橘色/ }
【说明】:因为IE6可以辨识「
」(底线),但是Firefox却不行,因此可以透过这样的差异来区隔Firefox和IE6,有效达成CSShack。*

5、IE浏览器下hack总结

element{color:#666\9; //IE8 IE9* color:#999; //IE7_color:#EBEBEB; //IE6}
可以看出,利用字符识别无法区分IE8和IE9,我们可以从伪类的识别来区分
element{color:#666\9; //IE8* color:#999; //IE7_color:#EBEBEB; //IE6}:root element{color:#666\9;}//IE9
【说明】:“:root”伪类IE系列只有IE9支持,其他主流浏览器均支持,利用这一点来区分IE8和IE9。另外考虑到opera部分支持,完全支持:root,所以不使用。*

6、其他主流浏览器css hack总结

1.Firefox浏览器:

mozilla私有属性
@-moz-document url-prefix(){ .element{color:#f1f1f1;}} //Firefox

2.Webkit和Opera:

@media all and (min-width: 0px){ .element{color:#777;} }//Webkit@media screen and (-webkit-min-device-pixel-ratio:0){.element{color:#444;}}//Opera@media all and (-webkit-min-device-pixel-ratio:10000), not all and (-webkit-min-device-pixel-ratio:0) {.element{color:#336699;}}

7、兼容各大主流浏览器(最新版本)css hack汇总如下(最全的):

.element{color:#000; /w3c标准/[;color:#f00;]; /Webkit(chrome和safari)/color:#666\9; /IE8/color:#999; /IE7/_color:#333; /IE6/}:root .element{color:#0f0\9;} /IE9/@media all and (-webkit-min-device-pixel-ratio:10000), not all and (-webkit-min-device-pixel-ratio:0) { .element{color:#336699;}} /opera/@-moz-document url-prefix(){ .element{color:#f1f1f1;}} /Firefox*/

8、建议:实际开发先如果不是很清楚可以先写布局代码,写一个阶段用浏览器测试工具(常用工具推荐IETEST)测试一个各个版本浏览器的布局效果,如有问题针对有问题的浏览器单独调试。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容