常用的10种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 {}
  要使用这些选择器,请将它们放在样式之前. 例如:

div css xhtml xml Example Source Code Example Source Code#content-box {
width: 300px;
height: 150px;
}
div css xhtml xml Example Source Code Example Source Code * html #content-box {
width: 250px;
}

二、让IE6支持PNG透明

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

div css xhtml xml Example Source Code Example Source Code*html #image-style {
background-image: none;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src="fil
ename.png", sizingMethod="scale");
}
三、移除超链接的虚线

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

div css xhtml xml Example Source Code Example Source Codeoutline:none.
a{
outline: none;
}很实用

四、给行内元素定义宽度

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

div css xhtml xml Example Source Code Example Source Code span { width: 150px; display: block }
五、让固定宽度的页面居中

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

div css xhtml xml Example Source Code Example Source Code#wrapper {
margin: auto;
position: relative;
}margin:0 auto;这个也可以 还有 text-aglin:center;为了火狐和IE兼容
七、IE6双倍边距的bug

  给此对象加上display:inline即可解决问题。

八、图片替换技术

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

div css xhtml xml Example Source Code Example Source CodeHTML:
<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; 例如:

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

div css xhtml xml Example Source Code Example Source Code <div class="container">
<div class="holder">Content</div>
</div>
  然后你需要定义外层div的min-width属性,
div css xhtml xml Example Source Code Example Source Code .container {
min-width:300px;
}
这时该是IE hack大显身手的时候了. 你需要包含如下的代码:

div css xhtml xml Example Source Code Example Source Code* 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 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 .

div css xhtml xml Example Source Code Example Source Code body { overflow-x: hidden; }
  当你决定使用一个比浏览器窗口大的图片或者flash时, 这个技巧将非常有用.

CSS sprites 精灵图片

引言:

  提高网页显示速度最有效的一个方法是减少页面的HTTP请求次数,为了减少HTTP请求次数,最直接有效的方法是使用精灵图片(CSS sprites),精灵图片是把许多图片放到一张大图片里面,通过CSS来显示图片的一部分。

本文的目的不是阐述精灵图片如何让网页下载更快,而是介绍在创建精灵图片时的一些实战经验。

下面是一张精灵图片
CSS Spriting 不要等你完成所有工作后再开始使用CSS精灵

在网站全部完成后,你的CSS和图片也都已经创建好了,这时候你再使用CSS精灵,也就意味着你要返回重写CSS,并且还要把用到的一大堆图片再丢到Photoshop里拼合成一张图片,这是非常痛苦和乏味的。如果在刚开始构建页面时就着手使用CSS精灵,那么一切都会变得简单。

按图片显示相反的方向放置图片

这一条有点难以理解,我是在创建一张大的精灵图片中途失败后才意识到它的。假如一张图片应该出现在一个元素的左边,如下图
appear-left
请将这张图片放在精灵的右边(看上面的示例精灵图片)。用这种方式处理后,当你用CSS移动背景图片时,不可能会有别的图片会(错误的)显示处理。

避免在CSS使用bottom或right定位

当定位CSS精灵中靠后的图片时,使用类似background-position: bottom -300px; 或者 background-position: right -200px;的方式定位非常容易。最初,这一切都能正常工作,但是,一旦你的CSS精灵宽度或高度增加时,你刚才使用的定位方式就发现了错误,因为图片相对右边或者底边的距离已经发生了变化。所以,请使用left和top来定位。

为每张图片留出足够空隙

正如你所看到文章中提供的例子精灵图片一样,许多小图片间都预留了很多空白。为什么不把图片挤得紧凑点让精灵图片尺寸更小点呢?因为使用元素的地方可能包含各种不同的内容,这些内容会导致容器变宽变高,预留了足够的空白的话,在容器大小发生变化时,可以避免其他的图片显示出来。

这有一个例子:
为每张图片留出足够空隙

每个列表都使用一个数字图片作为背景。看看上面的示例CSS精灵,你会发现这几张图片是交错排列的,这样处理后,不管怎么增加,其他的图片都不会显示出来。

不要担心CSS精灵的尺寸大小

如果你有机会以标准的web设计来设计你的网站,那么你必定要将把很多图片放到精灵图片上,并且为这些图片预览出合适的空隙,这很好。精灵图片中的空白空隙不会增加太多文件的体积,在addons.mozilla.org网站上使用的精灵图片尺寸是1,000×2,000,但它仅16.7kb!

原文Url:http://blog.mozilla.com/webdev/2009/03/27/css-spriting-tips/

相关阅读:http://www.alistapart.com/articles/sprites

起因:以前在某技术群问过——为什么淘宝之类的大型网站,小图标都在一张图上。

            记得当时的群友给的解答是因为路径一致,访问的时候就在一个图片上了。后来也有些疑惑,为什么有的图片另存就是一张一个,有的另存竟然是一张N个呢。前天才知道原来这是利用的css 精灵,和在一张图片上,利用xy轴的坐标来定位。减少文件体积、减少对服务器的请求次数,提高效率。