关于一些浏览器的的Hack
关于一些浏览器的的Hack,我怎么老是忘,每次都要查,实在是郁闷
现在,就几句话我要写清楚!我只写关于 IE6, IE7 的hack
至于Chrome, Safari, Opera那些我就先不写了,毕竟那些出错是有点麻烦,目前也不是主流浏览器。那至于IE8,刚刚正式发布不久,从目前情况来看,显示效果和FF3好像还没发现不同,IE8以后再说了。如果你看到此文章时已经有发现问题的话,可以和我留言,我们共同研究。
1、只有IE6 和 IE7 有效的hack:
.abc{width:100px; *width:50px;} /*IE6与IE7将体现 width:50px*/
(这一条在我以前学习的教程中说是IE7特有的hack,但是我今天试验后,IE6也被影响到)
2、下面是 IE6, IE7 与 IE8, FF 的hack(其实可以和第一条放在一起)
就如我的感觉,使用IE8那么多天以来,页面显示方面更偏向于FF,而非传统的IE系列,这个原来是对付IE系列与FF系列的hack现在已经成了 IE系列与IE8和FF的hack了,呵呵,说实话,对于IE8的“叛徒”举动,我非常赞成,以后可以少很多工作量了。
.abc{width:100px; +width:50px;} /*IE6与IE7将体现 width:50px*/
3、只有IE6有效的hack
.abc{width:100px; _width:50px;} /*IE6将体现 width:50px*/
或者
.abc{ width:50px!important; width:0;} /*有important的必须在前面,ie6为0*/
其中我早些时候有在网上还看到了一篇,这个是我刚刚学的时候调HACK用的方法,后来觉得不是很好用,所以上面的方法才是我个人认为比较好的。下面的文字一直放在QQ空间里,现在也一起复制过来。
补充:
IE:
selector { +property:value; } 在属性名前加上加号”+”,这个Hack只有IE系列可以识别.
selector { *property:value; } 在属性名前加上星号”*”,这个Hack只有IE系列可以识别.
selector { _property:value; } 在属性名前加上下划线”_”,这个Hack只有IE系列 (除IE7外) 识别.
* html selector{ property:value; } 在选择器上运用继承法 * html selector, 这个Hack只有IE系列 (除IE7外) 可以识别.
html/**/ >body selector { property:value; } 在选择器上运用继承法 html/**/ >body selector ,这个Hack只有IE系列 (除IE7外) 可以识别.
selector { property/**/:value; } 在属性名和冒号”:”之间加入注释,屏蔽IE6用.
selector/**/ { property/**/:value; } 在选择器和花括号”{“之间以及在属性名和冒号”:”之间加入注释,屏蔽IE5和IE6用 (不屏蔽IE5.5) .
select/**/ { property:value; } 在选择器和花括号”{“之间加入注释,屏蔽IE5用.
*+html selector { property:value !important; } 在选择器上运用继承法 *+html selector 再加上 !important, 这个Hack只有IE7可以识别.
CSS Hack
FF:
*:lang(lang) selector { property:value !important; } 用伪类lang(语言)再加上!important进行定义的话,目前只有Firefox可以识别.
Safari:
selector:empty { property:value !important; } 用伪类empty再加上!important进行定义的话,目前只有Safari可以识别.
Opera:
@media all and (min-width: 0px){ selector { property:value; } } 利用特殊继承法进行定义的话,目前只有Opera可以识别.
屏蔽IE浏览器(也就是IE下不显示)
*:lang(zh) select {font:12px !important;} /*FF的专用*/
select:empty {font:12px !important;} /*safari可见*/
这里select是选择符,根据情况更换。第二句是MAC上safari浏览器独有的。
仅IE7识别
*+html {…}
当面临需要只针对IE7做样式的时候就可以采用这个HACK。
IE6及IE6以下识别
* html {…}
这个地方要特别注意很多地主都写了是IE6的HACK其实IE5.x同样可以识别这个HACK。其它浏览器不识别。
html/**/ >body select {……}
这句与上一句的作用相同。
仅IE6不识别
select { display /*IE6不识别*/:none;}
这里主要是通过CSS注释分开一个属性与值,流释在冒号前。
仅IE6与IE5不识别
select/**/ { display /*IE6,IE5不识别*/:none;}
这里与上面一句不同的是在选择符与花括号之间多了一个CSS注释。
仅IE5不识别
select/*IE5不识别*/ { display:none;}
这一句是在上一句中去掉了属性区的注释。只有IE5不识别
盒模型解决方法
selct {width:IE5.x宽度; voice-family :”\”}\”"; voice-family:inherit; width:正确宽度;}
盒模型的清除方法不是通过!important来处理的。这点要明确。
清除浮动
select:after {content:”.”; display:block; height:0; clear:both; visibility:hidden;}
在Firefox中,当子级都为浮动时,那么父级的高度就无法完全的包住整个子级,那么这时用这个清除浮动的HACK来对父级做一次定义,那么就可以解决这个问题 。
截字省略号
select { -o-text-overflow:ellipsis; text-overflow:ellipsis; white-space:nowrap; overflow:hidden; }
这个是在越出长度后会自行的截掉多出部分的文字,并以省略号结尾,很好的一个技术。只是目前Firefox并不支持。
只有Opera识别
@media all and (min-width: 0px){ select {……} }
针对Opera浏览器做单独的设定。
以上都是写CSS中的一些HACK,这些都是用来解决局部的兼容性问题,如果希望把兼容性的内容也分离出来,不妨试一下下面的几种过滤器。这些过滤器有的是写在CSS中通过过滤器导入特别的样式,也有的是写在HTML中的通过条件来链接或是导入需要的补丁样式。
IE5.x的过滤器,只有IE5.x可见
@media tty {
i{content:”\”;/*” “*/}} @import ‘ie5win.css’; /*”;}
}/* */
Update May 3, 2009
补充一个比较经典的。
selector{
property:value; /* 所有浏览器 */
property:value\9; /* 所有IE浏览器 */
+property:value; /* IE7 */
_property:value; /* IE6 */
}当然,注意顺序。根据CSS的优先性,上面的写法,分别针对Firefox、IE8、IE7和IE6显示值。
附上IE注释hack
<!–[if IE 8]>不错不错,挺先进的嘛,使用IE8呢!文字是褐色的。<![endif]–>
<!–[if IE 7]>你,IE7,红色文字!<![endif]–>
<!–[if IE 6]>孩子,虽然显示的是绿色文字,不过,IE6可不是好东西呢!<![endif]–>
