美文网首页Web前端之路
CSS hack技巧大全

CSS hack技巧大全

作者: 竿牍 | 来源:发表于2020-06-23 22:16 被阅读0次

一、什么是CSS Hack?

不同的浏览器对CSS的解析结果是不同的,因此会导致相同的CSS输出的页面效果不同,这就需要CSS Hack来解决浏览器局部的兼容性问题。而这个针对不同的浏览器写不同的CSS 代码的过程,就叫CSS Hack。

CSS Hack常见的有三种形式

CSS属性Hack、CSS选择符Hack以及IE条件注释Hack

(Hack主要针对IE浏览器)

1、属性级Hack:比如IE6能识别下划线””和星号” * “,IE7能识别星号” * “,但不能识别下划线””,而firefox两个都不能认识。

2、选择符级Hack:比如IE6能识别html .class{},IE7能识别+html .class{}或者*:first-child+html .class{}。

3、IE条件注释Hack:IE条件注释是微软从IE5开始就提供的一种非标准逻辑语句。比如针对所有IE:<!–[if IE]><!–您的代码–><![endif]–>,针对IE6及以下版本:<!–[if lt IE 7]><!–您的代码–><![endif]–>,这类Hack不仅对CSS生效,对写在判断语句里面的所有代码都 会生效。

PS:条件注释只有在IE浏览器下才能执行,这个代码在非IE浏览下被当做注释视而不见。可以通过IE条件注释载入不同的CSS、JS、HTML和服务器代码等。

回到顶部

二、常用的CSS Hack

[ 复制代码

](javascript:void(0); "复制代码")

<pre style="margin: 0px; padding: 0px; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">/* CSS属性级Hack / color:red; / 所有浏览器可识别/ _color:red; / 仅IE6 识别 / color:red; / IE6、IE7 识别 / +color:red; / IE6、IE7 识别 / +color:red; / IE6、IE7 识别 / [color:red; / IE6、IE7 识别 / color:red\9; / IE6、IE7、IE8、IE9 识别 / color:red\0; / IE8、IE9 识别/ color:red\9\0; / 仅IE9识别 / color:red \0; / 仅IE9识别 / color:red!important; / IE6 不识别!important/ ------------------------------------------------------------- / CSS选择符级Hack */ *+html 选择器{样式代码};

目前最常见的是:

*html *前缀只对IE6生效

*+html *+前缀只对IE7生效

@media screen\9{...}只对IE6/7生效
@media \0screen {body { background: red; }}只对IE8有效
@media \0screen,screen\9{body { background: blue; }}只对IE6/7/8有效
@media screen\0 {body { background: green; }} 只对IE8/9/10有效
@media screen and (min-width:0\0) {body { background: gray; }} 只对IE9/10有效
@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {body { background: orange; }} 只对IE10有效等等

html #demo { color:red;} / 仅IE6 识别 / +html #demo { color:red;} / 仅IE7 识别 / body:nth-of-type(1) #demo { color:red;} / IE9+、FF3.5+、Chrome、Safari、Opera 可以识别 / head:first-child+body #demo { color:red; } / IE7+、FF、Chrome、Safari、Opera 可以识别 / :root #demo { color:red\9; } : / 仅IE9识别 / -------------------------------------------------------------- / IE条件注释Hack /







/
浏览器的识别符
/ Firefox: -moz-
Chrome、Safari: -webkit-
Opera: -o-
IE: -ms-</pre>

[ 复制代码

](javascript:void(0); "复制代码")

回到顶部

三、IE6对!important的支持

!important一般用来做区分IE6和Firefox等浏览器的基本Hack手法。因为IE6不支持 !important ,而Firefox能读懂 !important ,其改变了样式的优先级。其实IE6在某些情况下,也能认识 !important 。

例如:

[ 复制代码

](javascript:void(0); "复制代码")

<pre style="margin: 0px; padding: 0px; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;"><style type="text/css"> .demo{ color:red !important; color:green;
}
</style>
<div class="demo">www.jb51.net</div></pre>

[ 复制代码

](javascript:void(0); "复制代码")

上面代码在FF下字体为红色、IE6下字体为绿色。说明IE6忽视 !important 的存在。

再来看看:

<pre style="margin: 0px; padding: 0px; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;"><style type="text/css"> .demo{ color:red !important; } .demo { color:green; }
</style>
<div class="demo">www.jb51.net</div> </pre>

如果IE6不认!important的话,上面代码.demo的内容应该显示为绿色,可偏偏不是,.demo的内容显示为红色,说明IE6是认得!important的。

两种情况的区别就在于:当在一个选择器中,利用!important改变样式优先级的时候,IE6下是无效的,后面的样式覆盖了前面的,!important被彻底无视了,利用!import

回到顶部

四、IE6下的多选择符

多类选择符的写法。例如:

<pre style="margin: 0px; padding: 0px; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">#my.c1.c2 { color:red;} .c1.c2 { color:red;}</pre>

以上写法在IE7+/FF/Opera/Safari 等浏览器都支持。

但在IE6中,后一个类名会覆盖前一个类名,也就是说,上例被IE6理解为:

<pre style="margin: 0px; padding: 0px; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">#my.c2 { color:red;} .c2 { color:red;}</pre>

同理:

<pre style="margin: 0px; padding: 0px; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">#my.c1.c2.c3 { color:red;}</pre>

IE6理解为 #my.c3 {color:red;}

<pre style="margin: 0px; padding: 0px; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">.c1.c2.c3 { color:red;}</pre>

IE6理解为 .c3 { color:red; }

所以开发中用多类来组合实现css效果的时候,注意IE6的这个问题。最好的方法就是,不要用类组合的形式。

回到顶部

五、CSS hack利弊

一般情况下,我们尽量避免使用CSS hack,但是有些情况为了顾及用户体验实现向下兼容,不得已才使用hack。比如由于IE8及以下版本不支持CSS3,而我们的项目页面使用了大量CSS3新属性在IE9/Firefox/Chrome下正常渲染,这种情况下如果不使用css3pie或htc或条件注释等方法时,可能就得让IE8-的专属hack出马了。使用hack虽然对页面表现的一致性有好处,但过多的滥用会造成html文档混乱不堪,增加管理和维护的负担。

参考:

https://www.jb51.net/css/226888.html

https://www.jianshu.com/p/a65486c56d19

相关文章

  • CSS hack 原理

    参考文章: CSS hack大全&详解(什么是CSS hack) 要点总结: css hack 原理是:依据不同浏...

  • CSS hack技巧大全

    一、什么是CSS Hack? 不同的浏览器对CSS的解析结果是不同的,因此会导致相同的CSS输出的页面效果不同,这...

  • CSS hack大全

  • 收集的前端面试题和答案

    HTML CSS CSS hack原理及常用hack技巧原理:利用不同浏览器对CSS的支持和解析结果不一样编写针...

  • CSS HACK技巧

    关于CSS对各个浏览器兼容已经是老生常谈的问题了, 网络上的教程遍地都是.以下内容没有太多新颖, 纯属个人总结, ...

  • css技巧 hack

    1:图标颜色利用投影 改变颜色 使颜色可配置 此属性利用边框透明 因为overflow属性不支持投影属性 icon...

  • 20-IE6浏览器兼容

    CSS Hack 什么是CSS Hack?针对IE的不同版本设置不同的CSS属性, 我们就称之为CSS Hack ...

  • CSS部分属性的IE兼容

    CSS-Hack 什么是CSS Hack?针对IE的不同版本设置不同的CSS属性, 我们就称之为CSS Hack ...

  • 浏览器兼容

    什么是 CSS hack CSS hack就是使你的CSS代码兼容不同的浏览器。CSS hack大致有3种表现形式...

  • HTML2

    1、ie6png的修复 2、CSS Hack常见的有三种形式:CSS属性Hack、CSS选择符Hack以及IE条件...

网友评论

    本文标题:CSS hack技巧大全

    本文链接:https://www.haomeiwen.com/subject/kwmkfktx.html