让人头疼的CSS兼容
因为之前对css的理解不够深入,也没有经过系统的学习,所以一度认为css是前端最难的东西,但真的学习后,才发现css真的很难。。。有很多东西啊!!!
解决HTML5/css3兼容性
<!--[if IE]>
<script src=”http://html5shiv.googlecode.com/svn/trunk/html5.js”></script>
< ![endif]-->
CSS3中-moz、-ms、-webkit和-o分别代表什么意思
1、-webkit-:代表safari、chrome浏览器私有属性
2、-moz-:代表FireFox浏览器私有属性
3、-o-:代表opera浏览器私有属性
4、-ms-:代表IE浏览器私有属性
-webkit-transition:width 2s; /* Safari and Chrome */
-moz-transition:width 2s; /* Firefox 4 */
-o-transition:width 2s; /* Opera */
-ms-transition:width 2s; /*ie */
接下来说说一些我知道的BUG:
- 不同浏览器的标签默认的外补丁和内补丁不同
问题症状:随便写几个标签,不加样式控制的情况下,各自的margin 和padding差异较大。
解决方案:CSS里 {margin:0;padding:0;}
备注:这个是最常见的也是最易解决的一个浏览器兼容性问题,几乎所有的CSS文件开头都会用通配符来设置各个标签的内外补丁是0。 - 块属性标签float后,又有横行的margin情况下,在IE6显示margin比设置的大( IE的双边距bug )
问题症状:常见症状是IE6中后面的一块被顶到下一行
解决方案:在float的标签样式控制中加入 display:inline;将其转化为行内属性
备注:我们最常用的就是div+CSS布局了,而div就是一个典型的块属性标签,横向布局的时候我们通常都是用div float实现的,横向的间距设置如果用margin实现,这就是一个必然会碰到的兼容性问题。
#IamFloat{
float:left;
margin:5px;/*IE下理解为10px*/
display:inline;/*IE下再理解为5px*/
}
图片默认有间距
问题症状:几个img标签放在一起的时候,有些浏览器会有默认的间距,加了问题一中提到的通配符也不起作用。
解决方案:使用float属性为img布局
备注:因为img标签是行内属性标签,所以只要不超出容器宽度,img标签都会排在一行里,但是部分浏览器的img标签之间会有个间距。去掉这个间距使用float是正道。(我的一个学生使用负margin,虽然能解决,但负margin本身就是容易引起浏览器兼容问题的用法,所以我禁止他们使用)设置较小高度标签(一般小于10px),在IE6,IE7,遨游中高度超出自己设置高度
问题症状:IE6、7和遨游里这个标签的高度不受控制,超出自己设置的高度
解决方案:给超出高度的标签设置overflow:hidden;或者设置行高line-height 小于你设 置的高度。
备注:这种情况一般出现在我们设置小圆角背景的标签里。出现这个问题的原因是IE8 之前的浏览器都会给标签一个最小默认的行高的高度。即使你的标签是空的,这个标签 的高度还是会达到默认的行高。
例如: overflow:hidden zoom:0.08 line-height:1px