DIV CSS HACK和浏览器兼容解决方法

2016-05-18 08:07:43 DIV CSS HACK和浏览器兼容解决方法整理收集

以下是HTML8收集整理的div css hack兼容与兼容代码。

一. 介绍

这篇文章包括了8个非常有用的解决办法, 在进行css设计遇到问题时你就会用到它们.

二. 针对浏览器的选择器

这些选择器在你需要针对某款浏览器进行css设计时将非常有用.

IE6及其更低版本

  1. * html {} 

IE7及其更低版本

  1. *:first-child+html {} * html {} 

仅针对IE7

  1. *:first-child+html {} 

IE7和当代浏览器

  1. html>body{} 

仅当代浏览器(IE7不适用)

  1. html>/**/body{} 

Opera9及其更低版本

  1. html:first-child {} 

Safari

  1. html[xmlns*=""] body:last-child {} 

要使用这些选择器,请将它们放在样式之前. 例如:

  1. #content-box {width:300px;height:150px;
  2. * html 
  3. #content-box {width: 250px; }
     /* overrides the above style and changes the width to 250px in IE 6 and below */ 

三. 让IE6支持PNG透明

一个IE6的Bug引起了大麻烦, 他不支持透明的PNG图片.(css实现ie6 png图片透明)

你需要使用一个css滤镜

  1. *html #image-style {background-image: none; 
  2. filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src="fil 
  3. ename.png", sizingMethod="scale");} 

四. 移除超链接的虚线(仅对FF有效)

FireFox下,当你点击一个超链接时会在外围出现一个虚线轮廓. 这很容易解决, 只需要在标签样式中加入 outline:none .

  1. a{outline: none;} 

五. 给行内元素定义宽度

如果你给一个行内元素定义宽度,那么它只是在IE6下有效. 所有的HTML元素要么是行内元素要么就好是块元素. 行内元素包括: <span>, <a>, <strong> 和 <em>. 块元素包括<div>, <p>, <h1>, <form>和<li> . 你不能定义行内元素的宽度, 为了解决这个问题你可以将行内元素转变为块元素.

  1. span { width: 150px; display: block } 

六. 让固定宽度的页面居中

为了让页面在浏览器居中显示, 需要相对定位外层div, 然后把margin设置为auto.

  1. #wrapper {margin: auto;position: relative;} 

七. 图片替换技术

用文字总比用图片做标题好一些. 文字对屏幕阅读机和SEO都是非常友好的.

HTML:

  1. <h1><span>Main heading one</span></h1> 

CSS:

  1. h1 { background:url(heading-image.gif) no-repeat; } 
  2. h1 span {position:absolute;text-indent:-5000px;} 


你可以看到我们对标题使用了标准的<h1>作为标签并且用css来将文本替换为图片. text-indent属性将文字推到了浏览器左边5000px处, 这样对于浏览者来说就看不见了.

关掉css,然后看看头部会是什么样子的.

八. 最小宽度

IE6另外一个bug就是它不支持 min-width 属性. min-width又是相当有用的, 特别是对于弹性模板来说, 它们有一个100%的宽度,min-width 可以告诉浏览器何时就不要再压缩宽度了.

除IE6以外所有的浏览器你只需要一个 min-width: Xpx; 例如:

  1. .container {min-width:300px;} 

为了让他在IE6下工作, 我们需要一些额外的工作. 开始的时候我们需要创建两个div, 一个包含另一个:

  1. <div class="container"> 
  2.     <div class="holder">Content</div> 
  3. </div> 

然后你需要定义外层div的min-width属性

  1. .container {min-width:300px;} 

这时该是IE hack大显身手的时候了. 你需要包含如下的代码:

  1. * html .container {border-right: 300px solid #FFF;} 
  2. * html .holder {display: inline-block;position: relative;margin-right: -300px;} 

随着浏览器窗口大小的外层div宽度降低,以适应直到它缩小到了边框的宽度,此时它不会进一步萎缩的。持有人DIV跟风,也停止萎缩。外层的div边框宽度成为内div的最小宽度。

九. 隐藏水平滚动条

为了避免出现水平滚动条, 在body里加入 overflow-x:hidden .

  1. body { overflow-x: hidden; } 

当你决定使用一个比浏览器窗口大的图片或者flash时, 这个技巧将非常有用

屏蔽IE浏览器(也就是IE下不显示)
*:lang(zh) select {font:12px !important;} /*FF,OP可见,特别提醒:由于Opera最近的升级,目前此句只为FF所识别*/
select:empty {font:12px !important;} /*safari可见*/
这里select是选择符,根据情况更换。第二句是MAC上safari浏览器独有的。
仅IE7与IE5.0可以识别
*+html select {…}
当面临需要只针对IE7与IE5.0做样式的时候就可以采用这个HACK。
仅IE7可以识别
*+html select {…!important;}
当面临需要只针对IE7做样式的时候就可以采用这个HACK。
IE6及IE6以下识别
* html select {…}
这个地方要特别注意很多博客都写成了是IE6的HACK其实IE5.x同样可以识别这个HACK。其它浏览器不识别。
html/**/ >body select {…}
这句与上一句的作用相同。
仅IE6不识别,屏蔽IE6
select { display /*屏蔽IE6*/:none;}
这里主要是通过CSS注释分开一个属性与值,注释在冒号前。
仅IE6与IE5不识别,屏蔽IE6与IE5
select/**/ { display /*IE6,IE5不识别*/:none;}
这里与上面一句不同的是在选择符与花括号之间多了一个CSS注释。不屏蔽IE5.5
仅IE5不识别,屏蔽IE5
select/*IE5不识别*/ {…}
这一句是在上一句中去掉了属性区的注释。只有IE5不识别,IE5.5可以识别。
盒模型解决方法
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''; /*";}
}/* */
IE5/MAC的过滤器,一般用不着
/*\*//*/
@import "ie5mac.css";
/**/
IE的if条件Hack
Only IE
所有的IE可识别

只有IE5.0可以识别
Only IE 5.0+
IE5.0包换IE5.5都可以识别

仅IE6可识别
Only IE 6/+
IE6以及IE6以下的IE5.x都可识别
Only IE 7/-
仅IE7可识别
以上内容可能并不全面,欢迎大家能和我一起把这些技巧都汇总起来,为以后工作的查询提供一个方便,同时在这里感谢那些研究出这些HACK的作者们。

更新