CSS之hack与浏览器兼容常用技巧

  不同的浏览器,比如Internet Explorer 6,Internet Explorer 7,Mozilla Firefox等,对CSS的解析认识不一样,因此会导致生成的页面效果不一样,得不到我们所需要的页面效果。这个时候我们就需要针对不同的浏览器去写不同的CSS,让它能够同时兼容不同的浏览器,能在不同的浏览器中也能得到我们想要的页面效果。
  这个针对不同的浏览器写不同的CSS code的过程,就叫CSS hack,也叫写CSS hack。
  由于不同的浏览器对CSS的支持及解析结果不一样,还由于CSS中的优先级的关系。我们就可以根据这个来针对不同的浏览器来写不同的CSS。
  比如 IE6能识别下划线_和星号“ * ”,IE7能识别星号“* ”,但不能识别下划线“_”,而firefox两个都不能认识。等等
书写顺序,一般是将识别能力强的浏览器的CSS写在后面,不管是什么方法,书写的顺序都是firefox等标准浏览器的写在前面,IE7的写在中间,IE6的写在最后面(也有例外)。
下面列举常用的CSS hack方法。


1. !important

!important作用是提高指定样式规则的应用优先权。
IE7以及所有标准浏览器能识别!important
区别IE6与IE7+其他浏览器

{ 
    border:20px solid #60A179 !important;
    border:20px solid #00F;
}

2. *

IE都能识别*标准浏览器(如火狐)不能识别*

区别IE与火狐


{ 
    border:20px solid #60A179;
    *border:20px solid #00F;
} 

区别IE7,IE6与火狐


{ 
   border:20px solid #60A179;
   *border:20px solid #00F !important;
   *border:20px solid ###;
}

3. _

IE6支持下划线,IE7和firefox均不支持下划线

区别IE7,IE6与火狐

{ 
   border:20px solid #60A179;
   *border:20px solid #00F;
   _border:20px solid ###;
}

4. *+html 与 *html

+html 与 *html是IE特有的标签, firefox 暂不支持。而*+html 又为 IE7特有标签>

.browserTest { width: 120px; }      /* FireFox fixed */ 
*html .browserTest { width: 80px;}  /* ie6 fixed */ 
*+html .browserTest { width: 60px;} /* ie7 fixed */

注意:+html 对IE7的HACK 必须保证HTML顶部有如下声明:

5. 浏览器兼容常用技巧

  1)火狐下给div设置padding后会导致width和height 增加, 但IE不会。(可用!important解决)
  2)垂直居中,将 line-height设置为当前div相同的高度, 再通过vertical-align: middle;( 注意内容不要换行)
  3)水平居中,margin:0 auto;(当然不是万能)
  4)若需给a标签内内容加上样式, 需要设置 display: block;(常见于导航标签)
  5)浮动IE产生的双倍距离
在IE下,当一个div设置了float后,然后给他设置margin,就会出现加倍的margin,解决的办法是给div设置display:inline。
  6)IE和FF对盒模型的解释区别
  browserTest{ width: 650px !important;width: 648px;padding-left:2px;background:#fff; }
browserTest显示的宽度是650px;
  IE Box的总宽度是:width+padding+border+margin宽度总和;
  FF Box的总宽度就是:width的宽度,padding+border+margin的宽度在含在width内。
兼容二者,可以用
box-sizing:border-box;
-moz-box-sizing:border-box; /* Firefox */
-webkit-box-sizing:border-box; /* Safari */

  7)ul标签在FF下面默认有list-style和padding, 最好事先声明, 以避免不必要的麻烦;(常见于导航标签和内容列表)
  8)作为外部wrapper的div不要定死高度, 最好还加上 overflow: hidden;以达到高度自适应;
  9)页面的最小宽度
  min-width是个非常方便的CSS命令,它可以指定元素最小也不能小于某个宽度,这样就能保证排版一直正确。但IE不认得这个,而它实际上把width当做最小宽度来使。为了让这一命令在IE上也能用,可以把一个《div》 放到 《body》 标签下,然后为div指定一个类,然后CSS这样设计:
  container{ min-width: 600px;   width:expression(document.body.clientWidth < 600? “600px”: “auto” );}
  第一个min-width是正常的;但第2行的width使用了Javascript,这只有IE才认得,这也会让你的HTML文档不太正规。它实际上通过Javascript的判断来实现最小宽度。

你可能感兴趣的:(Web前端)