CSS Hack

下划线hack

(适用于IE7以下版本)

这些加了下划线的样式就是特别为IE6而写的样式!加了_后,就只有IE6可以识别啦而其它的浏览器会忽略它

_height

_width

_position

_background

这个hack使用了无效的CSS,利用了一个浏览器的bug,但是我们有有效的CSS语句可以完成这样的事情,所以这个HACK不推荐使用。

星号hack
(适用于IE7以下版本)
除了下划线和连字符,版本7及以下的IE可以识别以非字母字符为前缀的属性,而其它浏览器会忽略。
#elem {
width: [W3C Model Width];
*width: [BorderBox Model];
}
这个HACK不推荐使用,原因同上面的下划线HACK一样。
星号 HTML hack
(适用于IE4-6)
HTML元素是W3C标准DOM (Document Object Model)的根元素,但是IE 4至6的版本中还有一个神秘的父元素。完全兼容的浏览器会忽略这个* html选择器,但IE4-6却会对它正常处理。这样就可以为这些版本的浏览器指定特别的规则。比如,这个规则可以特别指定IE4-6中的文字大小,但对其它浏览器不起作用。
* html p {font-size: 5em; }
这个HACK使用了完全有效的CSS。
星号加号HACK
(适用于IE7)
虽然IE7不再识别以前的* html hack,但它使用了一个相似的新的hack。
*:first-child+html p { font-size: 5em; }
或者:
*+html p { font-size: 5em; }
此代码只适用于IE7,不适用于其它任何浏览器。注意这个HACK只在IE7标准模型里工作正常,在怪异模式下不能用。这个hack也被IE8的兼容模式(相当于IE7的标准模式)所支持。和星号HTML hack一样,它也使用了有效的CSS。
子选择器hack
(适用于IE6及以下版本)
IE6和早期的版本不支持“子选择器”(>),利用这个我们可以为其它浏览器指定特别的规则。举例来说,这个规则可以让段落文字在firefox 变成蓝色,但在IE7之前的版本里却不能。
html > body p { color: blue; }
虽然IE7增加了对子选择器的支持,但人们发现了新的hack可以把IE7也排除。当一个空的注释紧跟在子选择器的后面重复的时候,IE7会不识别后面的规则,就和较早版本的浏览器一样。
html >/**/ body p { color: blue; }
否定伪类HACK
(可区分IE和非IE)
IE的所有版本都不支持CSS3 : not() 伪类。有一种变异的HACK使用 : root 伪类,此伪类也同样不被IE识别。
.yourSelector {
color: black;
} /* IE中的值 */
html:not([dummy]) .yourSelector {
color: red;
} /* Safari, Opera and Firefox中的值 */
这种否定选择器接受任何类型作为参数,属性,通用,类或ID选择器,或者伪类。然后它会把后面的属性应用于所有不匹配此语法的元素上。
Body:empty hack
(适用于Firefox 2.0及以下版本)
:empty 伪类,在CSS3中介绍过的,用于选择不含任何内容的元素。然而,Geck0 1.8.1 和之后版本(应用在Firefox2.0.x 及之后的版本)错误地选择了body:empty 即使body元素包含有内容(一般情况都如此)。这样我们可以向Firefox 2.0x及以下版本提供专用的CSS规则。
/* 让 p 元素在 Firefox 2.0.x 及以下的版本中不显示 */
body:empty p {
display:none;
}
此HACK使用有效的CSS.
!Important 怪僻
(适用于IE8以下版本)
IE8及以下版本有一些和!imporant有关的怪僻,它允许一个赋值优先级更高。IE7及更早版本接受任意字符串替代important,并且会正常处理该值,而其它浏览器则会忽略。
/* 在IE8及以下版本下设文字为蓝色,其它浏览器中为黑色 */
body {
color: black;
color: blue !ie;
}
相似地,IE8及更早版本接受在!important声明后面的非字母符号,而其它浏览器会忽略它。
body {
color: black;
color: blue !important!;
}
IE6及以下版本有一个!important带来的问题,当在同一段代码块中同一元素的同一属性有了不同的值,本应结果是第二个值被第一个取代,但IE6及更低版本并不这么做。
/* 在IE6及更低版本中设文字为蓝色 */
body {
color: black !important;
color: blue;
}
所有这些HACK使用的是有效的CSS。
动态属性
在版本5至7,IE曾支持过一种语法适用于动态变化的CSS属性,有时被称为CSS表达式。动态属性通常混合其它HACK以补偿更早版IE中不支持的属性。
div {
min-height: 300px;
/* 在IE6中模拟 min-height */
_height: expression(document.body.clientHeight < 300 ? "300px" : "auto");
}
有条件的注释
有条件的注释只在Windows平台的IE上被识别,并从IE5起开始支持,它甚至可以区分版本5.0,5.5和6.0。
代码:
下面是一些“有条件的注释”,可以显示你正在使用的IE版本。如果你看不到,那么你用的不是IE:
<p><!--[if IE]>
According to the conditional comment this is Internet Explorer<br />
<![endif]-->
<!--[if IE 5]>
According to the conditional comment this is Internet Explorer 5<br />
<![endif]-->
<!--[if IE 5.0]>
According to the conditional comment this is Internet Explorer 5.0<br />
<![endif]-->
<!--[if IE 5.5]>
According to the conditional comment this is Internet Explorer 5.5<br />
<![endif]-->
<!--[if IE 6]>
According to the conditional comment this is Internet Explorer 6<br />
<![endif]-->
<!--[if IE 7]>
According to the conditional comment this is Internet Explorer 7<br />
<![endif]-->
<!--[if gte IE 5]>
According to the conditional comment this is Internet Explorer 5 and up<br />
<![endif]-->
<!--[if lt IE 6]>
According to the conditional comment this is Internet Explorer lower than 6<br />
<![endif]-->
<!--[if lte IE 5.5]>
According to the conditional comment this is Internet Explorer lower or equal to 5.5<br />
<![endif]-->
<!--[if gt IE 6]>
According to the conditional comment this is Internet Explorer greater than 6<br />
<![endif]-->
</p>
注意它的语法:
- gt: 高于
- lte:低于或相当
说明:
1.它们的基本结构和HTML注释一样(<!-- -->)。因此其它所有浏览器会把它们当作正常的注释忽略掉。
2.Windows IE里的程序可以识别这个特殊的<!--[if IE]>语法,处理if并解析此注释中的内容,就当作是正常的网页内容一样。
3.既然“有条件的注释”使用了HTML注释的结构,它们就只能被包含在HTML文件里,而不是CSS文件里。你可以把整个<link>标签放在“有条件的注释”里,指向一个指定的样式表。如下所示:
<link href="all_browsers.css" rel="stylesheet" type="text/css">
<!--[if IE]> <link href="ie_only.css" rel="stylesheet" type="text/css"> <![endif]-->
<!--[if lt IE 7]> <link href="ie_6_and_below.css" rel="stylesheet" type="text/css"> <![endif]-->
<!--[if !lt IE 7]><![IGNORE[--><![IGNORE[]]> <link href="recent.css" rel="stylesheet" type="text/css"> <!--<![endif]-->
<!--[if !IE]>--> <link href="not_ie.css" rel="stylesheet" type="text/css"> <!--<![endif]-->
IE8 hack
IE8不能识别“*”和“_”的css hack,所以我们可以使用"\9"来区分IE的各个版本。
color:#0000FF\9; ; /*ie6,ie7,ie8*/
*color:#FFFF00; /*ie7*/
_color:#FF0000; /*ie6*/
小结
使用HACK隐藏代码在浏览器更新时经常会导致页面不正常显示。许多HACK曾用于在IE6及更低版本中隐藏CSS,但在版本7下不再工作,因为IE改进了对CSS 标准的支持。微软的IE开发小组曾要求人们使用有条件的注释,代替使用hack。


为什么要使用inline-block?

为什么?因为不想左浮动一下右浮动一下,因为想让一组ul,li居中,因为…

如何让IE6支持inline-block

针对inline元素,如span,a等,现在css中定义

display:inline-block,

然后加上zoom:1触发hasLayout即可

针对block元素,如div,p等,两种做法:

1. 先写display:inline设置为内联对象呈现,然后同上触发其hasLayout。
这样使用要注意把IE的css和firefox等没有hasLayout的浏览器样式分开。

2.先在一个选择器中定义(这个方法我在IE tester中没有测试通过,不过以前确实好用,有待进一步观察

display:inline-block

接着再给这个选择器定义display:inline

div {display:inline-block;...}
div {display:inline;}
最后选择使用内联元素来完成任务!在一些必须使用块级元素的情况,用条件注释就好了


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值