2009年4月9日星期四

CSS BUG解决方法以及CSS BUG类的小技巧

CSS bug是布局中最头疼的问题。我们需要兼顾各种浏览器,以期待获得一致的效果。非常遗憾的是各厂商之间的竞争导致很多问题的存在。而IE6与IE7在很多问题上也存在着很大的差别。轻松的解决CSS bug是我们必须掌握的技能。现在整理出最常用的12种CSS BUG解决方法以及CSS BUG类的小技巧。

一、 针对浏览器的选择器

  这些选择器在你需要针对某款浏览器进行css设计时将非常有用.
  IE6及其更低版本
  * html {}

  IE7及其更低版本
  *:first-child+html {} * html {}

  仅针对IE7
  *:first-child+html {}

  IE7和当代浏览器
  html>body{}

  仅当代浏览器(IE7不适用)
  html>/**/body{}

  Opera9及其更低版本
  html:first-child {}

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

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

  #content-box {
  width: 300px;
  height: 150px;
  }
  * html #content-box {
  width: 250px;
  } 
  您也可以参考—CSS hacks:浏览器特定选择器介绍

二、让IE6支持PNG透明

  一个IE6的Bug引起了大麻烦, 他不支持透明的PNG图片。
  你需要使用一个css滤镜

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

三、移除超链接的虚线

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

  outline:none.
  a{
  outline: none;
  }
  您也可以参考—除链接元素的虚线框(兼容IE7、IE6、FF)

四、给行内元素定义宽度

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

  span { width: 150px; display: block }

五、让固定宽度的页面居中

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

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

六、IE6双倍边距的bug

  给此对象加上display:inline即可解决问题。具体介绍:点击这里查看解决方法

七、Box Model 盒模型bug的一般解决办法

  我们定义一个最基本的层boxtest:

   Example Source Code
  #boxtest{
  border:20px   solid #60A179;
  padding: 30px;
  background :  #ffc;
  width : 400px;
  }

  标准情况下,这个盒的宽度是:20+30+300+30+20=400px。

      但是在IE5.0浏览器中,对盒模型的宽度解释有个bug,它认为300 px是整个盒的总宽度,内容的宽度变成:300-20-30-20-30=200px。

      为了弥补这个bug,采用一个技巧:即增加一个IE5不能解释的声音属性"voice-family",读到这个定义时浏览器就不再继续阅读,认为宽就是400px,但而其他符合标准的浏览器会继续阅读,并执行第二个真实值300px。

   Example Source Code
  #boxtest{
  border:20px solid #60A179;;
  padding:30px;
  background: #ffc;
  width :400px;
  voice-family :   "/"}/"";
  voice-family :inherit;
  width :  300px;
  }

八、两个层之间的3px间隙

  传说中的“IE 3px bug”,解决的办法:点击这里查看解决方法

九、在IE中的HTML注释引起文字奇怪的复制

  Duplicate Characters Bug很神奇。

十、图片替换技术

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

  HTML:
  <h1><span>Main heading one</span></h1>
  CSS:
  h1 { background: url(heading-image.gif) no-repeat; }
  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; 例如:

  .container {
  min-width:300px;
  }
  为了让他在IE6下工作, 我们需要一些额外的工作. 开始的时候我们需要创建两个div, 一个包含另一个:

  <div class="container">
  <div class="holder">Content</div>
  </div>
  然后你需要定义外层div的min-width属性,

  .container {
  min-width:300px;
  }
  这时该是IE hack大显身手的时候了. 你需要包含如下的代码:

  * html .container {
  border-right: 300px solid #FFF;
  }
  * html .holder {
  display: inline-block;
  position: relative;
  margin-right: -300px;
  }
  As the browser window is resized the outer div width reduces to suit until it shrinks to the border width, at which point it will not shrink any further. The&nbsp;holder div follows suit and also stops shrinking. The outer div border width becomes the minimum width of the inner div.

十二、隐藏水平滚动条

  为了避免出现水平滚动条, 在body里加入 overflow-x:hidden .
  body { overflow-x: hidden; }
  当你决定使用一个比浏览器窗口大的图片或者Flash时, 这个技巧将非常有用.

没有评论:

发表评论