前端开发CSS兼容性整理

.net 前端开发框架
前端开发有什么框架
适合表单开发的前端框架

浏览器内核

-moz-对应 Firefox,
-webkit-对应 Safari and Chrome
-o- for Opera
-ms- for Internet Explorer
兼容写法

1.css 内部 hack
(1)前缀
、+ 、_ ———————— ie6
、+ —————————— ie7

  • ———————————— ie8
    > ————————————firefox
    (2)后缀
    “-″减号是IE6专有的hack —待验证
    “\9″ IE6/IE7/IE8/IE9/IE10都生效,11不生效
    “\0″ IE8/IE9/IE10都生效,是IE8/9/10/11的hack
    “\9\0″ 只对IE8/IE9/IE10生效hack
    2.css选择器hack=选择器前缀
    IE6能识别
    html .class{},IE7能识别+html .class{}或者:first-child+html .class{}。
    3.css html头部判断

    1. <!–[if !IE]> 除IE外都可识别 <!–<![endif]–>
    2. <!–[if IE]> 所有的IE可识别 <![endif]–>
    3. <!–[if IE 5.0]> 只有IE5.0可以识别 <![endif]–>
    4. <!–[if IE 5]> 仅IE5.0与IE5.5可以识别 <![endif]–>
    5. <!–[if gt IE 5.0]> IE5.0以及IE5.0以上版本都可以识别 <![endif]–>
    6. <!–[if IE 6]> 仅IE6可识别 <![endif]–>
    7. <!–[if lt IE 6]> IE6以及IE6以下版本可识别 <![endif]–>
    8. <!–[if gte IE 6]> IE6以及IE6以上版本可识别 <![endif]–>
    9. <!–[if IE 7]> 仅IE7可识别 <![endif]–>
    10. <!–[if lt IE 7]> IE7以及IE7以下版本可识别 <![endif]–>
    11. <!–[if gte IE 7]> IE7以及IE7以上版本可识别<![endif]–>
      样式识别

IE都能识别;标准浏览器(如FF)不能识别
IE6能识别;不能识别 !important;
IE7能识别
,能识别!important;
FF不能识别*,但能识别!important;

IE兼容性常见问题

块属性标签float后,又有横行的margin情况下,在IE6显示margin比设置的大
问题症状:常见症状是IE6中后面的一块被顶到下一行
碰到频率:90%(稍微复杂点的页面都会碰到,float布局最常见的浏览器兼容问题)
解决方案:在float的标签样式控制中加入 display:inline;将其转化为行内属性
备注:我们最常用的就是div+css布局了,而div就是一个典型的块属性标签,横向布局的时候我们通常都是用div float实现的,横向的间距设置如果用margin实现,这就是一个必然会碰到的兼容性问题。

设置较小高度标签(一般小于10px),在IE6,IE7,遨游中高度超出自己设置高度
问题症状:IE6、7和遨游里这个标签的高度不受控制,超出自己设置的高度
碰到频率:60%
解决方案:给超出高度的标签设置overflow:hidden;或者设置行高line-height 小于你设置的高度。
备注:这种情况一般出现在我们设置小圆角背景的标签里。出现这个问题的原因是IE8之前的浏览器都会给标签一个最小默认的行高的高度。即使你的标签是空的,这个标签的高度还是会达到默认的行高。

行内属性标签,设置display:block后采用float布局,又有横行的margin的情况,IE6间距bug
问题症状:IE6里的间距比超过设置的间距
碰到几率:20%
解决方案:在display:block;后面加入display:inline;display:table;
备注:行内属性标签,为了设置宽高,我们需要设置display:block;(除了input标签比较特殊)。在用float布局并有横向的margin后,在IE6下,他就具有了块属性float后的横向margin的bug。不过因为它本身就是行内属性标签,所以我们再加上display:inline的话,它的高宽就不可设了。这时候我们还需要在display:inline后面加入display:talbe。

图片默认有间距
问题症状:几个img标签放在一起的时候,有些浏览器会有默认的间距,加了问题一中提到的通配符也不起作用。
碰到几率:20%
解决方案:使用float属性为img布局
备注:因为img标签是行内属性标签,所以只要不超出容器宽度,img标签都会排在一行里,但是部分浏览器的img标签之间会有个间距。去掉这个间距使用float是正道。
css布局中的居中问题
主要的样式定义如下:
body {TEXT-ALIGN: center;}

center { MARGIN-RIGHT: auto; MARGIN-LEFT: auto; }

说明:
首先在父级元素定义TEXT-ALIGN: center;这个的意思就是在父级元素内的内容居中;对于IE这样设定就已经可以了。

min-属性

Container{

min-width: 600px;
width:e-xpression(document.body.clientWidth < 600? “600px”: “auto” );

}
min-width是个非常方便的css命令,它可以指定元素最小也不能小于某个宽度,这样就能保证排版一直正确。但IE不认得这个,而它实际上把 width当做最小宽度来使。
其他兼容技巧(相当有用)

1, FF下给 div 设置 padding 后会导致 width 和 height 增加, 但IE不会.(可用!important解决)
2, 居中问题.
1).垂直居中.将 line-height 设置为当前 div 相同的高度, 再通过 vetical-align: middle.( 注意内容不要换行.)
2).水平居中. margin: 0 auto;(当然不是万能)
3, 若需给 a 标签内内容加上 样式, 需要设置 display: block;(常见于导航标签)
4, FF 和 IE 对 BOX 理解的差异导致相差 2px 的还有设为 float的div在ie下 margin加倍等问题.
5, ul 标签在 FF 下面默认有 list-style 和 padding . 最好事先声明, 以避免不必要的麻烦. (常见于导航标签和内容列表)
6, 作为外部 wrapper 的 div 不要定死高度, 最好还加上 overflow: hidden.以达到高度自适应.
7, 关于手形光标. cursor: pointer. 而hand只适用于 IE.
万能float

<style>
/ Clear Fix /
.clearfix:after {
content:”.”;
display:block;
height:0;
clear:both;
visibility:hidden;
}
.clearfix {
display:inline-block;
}
/ Hide from IE Mac */
.clearfix {display:block;}
/
End hide from IE Mac /
/
end of clearfix */
</style>
截字省略号
select {
-o-text-overflow:ellipsis;
text-overflow:ellipsis;
white-space:nowrap;
overflow:hidden;
width:100%;
}
这个是在越出长度后会自行的截掉多出部分的文字,并以省略号结尾,很好的一个技术。
FF不兼容可以调用jquery ellipsis plugin

如何定义1px左右高度的容器?
IE6下这个问题是因为默认的行高造成的,解决的方法例如:overflow:hidden | zoom:0.08 | line-height:1px

现在前端开发用什么框架
微信前端开发框架
2018web前端开发框架
» 本文来自:前端开发者 » 《前端开发CSS兼容性整理》
» 本文链接地址:https://www.rokub.com/6906.html
» 您也可以订阅本站:https://www.rokub.com
赞(0)
64K

评论 抢沙发

评论前必须登录!