css兼容性写法大全

常见的浏览器内核引擎以及具体应用:

     Trident: IE;
     Gecko: Firefox;
     webkit: Safari,Google Chrome,遨游3,猎豹,百度;
     Presto:Opera——Opera mini
 
书写顺序:firefox,IE8,IE7,IE6
 
IE6:*,_
IE7:*,+
IE8:\9,\0
 
chrome:-webkit-
firefox:-moz-,root(仅ff认)
 
  • *和_ , ie6可以识别;
  • *      , ie6,ie7可以识别;
  • !important  ,表示高优先级,ie7及以上,firefox都支持,ie6认识带!important的样式属性,但不认识!important的优先级;
  • -webkit- ,针对safari,chrome浏览器的内核CSS写法
  • -moz-,针对firefox浏览器的内核CSS写法
  • -ms-,针对ie内核的CSS写法
  • -o-,针对Opera内核的CSS写法
    如果只让ie6看见用        *html .head{color:#000;}
  如果只让ie7看见用 *+html .head{color:#000;}
  如果只让ff看见用: root body .head{color:#000;}
  如果只让ff、IE8看见用 html>/**/body .head{color:#000;}
  如果只是不让ie6看见用 html>body .head{color:#000;} 即对IE 6无效
  如果只是不让ff、IE8看见用 *body .head{color:#000;} 即对ff、IE8无效

  1. .div1{
  2. *position:relative;
  3. -moz-background-size:50%;
  4. -ms-content-zoom-limit-max:50%;
  5. -o-box-shadow:5px10px20px#f0f;
  6. }
  7. .div2{
  8. position:absoulte!important;
  9. }
 
 
第一问:宽度问题
给div一个 width:300px;padding:10px;
Firefox实际宽度320px,padding是填上去的;支持!important,IE忽略
IE6实际宽300px,padding是300px里面的,把content往里面挤;
 
页面的最小宽度 
IE不认得min-,而它实际上把 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的判断来实现最小宽度。
 
 
第二问:水平居中问题
IE下只要设置body{text-align:center;}这样就可以居中显示。
Firefox不行  解决:body:{text-align:center;margin:0px auto;}
 
第三问:在mozilla firefox和IE中的BOX模型解释不一致导致相差2px
           div{margin:30px!important;margin:28px;} 
 
第四问:CSS透明问题 
          IE:filter:progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=60)。 
          FF:opacity:0.6。 
         [注] 最好两个都写,并将opacity属性放在下面。
第五问:圆角问题
        IE:ie7以下版本不支持圆角。 
        FF: -moz-border-radius:4px 
 
浏览器bug 
IE的双边距bug 

设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。 

解决方案:在这个div里面加上display:inline; 
 
浮动
DIV浮动IE文本产生3象素的bug 
左边对象浮动,右边采用外补丁的左边距来定位,右边对象内的文本会离左边有3px的间距.
 
#box{ float:left; width:800px;} 
#left{ float:left; width:50%;} 
#right{ width:50%;} 
*html #left{ margin-right:-3px; //这句是关键} 
<div id="box"> 
<div id="left"></div> 
<div id="right"></div> 
</div> 
 
IE捉迷藏的问题 
当div应用复杂的时候每个栏中又有一些链接,DIV等这个时候容易发生捉迷藏的问题。 
有些内容显示不出来,当鼠标选择这个区域是发现内容确实在页面。 解决办法:对#layout使用line-height属性 或者给#layout使用固定高和宽。页面结构尽量简单。
 
IE的layout私有属性
作为外部 wrapper 的 div 不要定死高度,为了让高度能自动适应,要在wrapper里面加上overflow:hidden; 当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。
.colwrapper{ overflow:hidden; zoom:1; margin:5px auto;} 
 
排版
我们用得最多的css描述可能就是float:left.有的时候我们需要在n栏的float div后面做一个统一的背景,譬如: 
<div id=”page”> 
<div id=”left”></div> 
<div id=”center”></div> 
<div id=”right”></div> 
</div> 
我们要将page的背景设置成蓝色,以达到所有三栏的背景颜色是蓝色的目的,但是我们会发现随着left center right的向下拉长,而page居然保存高度不变,问题来了,原因在于page不是float属性,而我们的page由于要居中,不能设置成 float,所以我们给他加个父元素 page变成爷爷;
 
高度不适应 
高度不适应是当内层对象的高度发生变化时外层高度不能自动进行调节,特别是当内层对象使用margin 或paddign 时。 
例: 
#box { } 
#box p {margin-top: 20px;margin-bottom: 20px; text-align:center; } 
<div id="box"> 
<p>p对象中的内容</p> 
</div> 
解决技巧:在P对象上下各加2个空的div对象CSS代码:.1{height:0px;overflow:hidden;}或者为DIV加上border属性。 
 
IE6下为什么图片下有空隙产生 
解决这个BUG的技巧也有很多,可以是改变html的排版,或者设置img 为display:block 或者设置vertical-align 属性为vertical-align:top   bottom  middle  text-bottom 都可以解决. 
 
IE的css bug 
在p:first-letter和{font-size:300%}加上空格,也就是p:first-letter {font-size:300%}后,显示就正常了。但是同样的代码,在FireFox下看是正常的。按道理说,p:first-letter{font-size:300%}的写法是没错的。那么问题出在哪里呢?答案是伪类中的连字符”-”。IE有个BUG,在处理伪类时,如果伪类的名称中带有连字符”-”,伪类名称后面就得跟一个空格,不然样式的定义就无效。而在FF中,加不加空格都可以正常处理。
 
div设置 margin-left, margin-right 为 auto 时已经居中,IE 不行,IE需要设定body居中,首先在父级元素定义text-algin: center;这个的意思就是在父级元素内的内容居中。
 
垂直居中=>内容换行问题

一个高30px的div,默认显示左上角,如果想垂直居中对其可以加个line-height:30px;样式。如果你想让他居下方则修改line-height

数值越大越下,为了防止撑破,还需要再给一个样式overflow:hidden; 

 

块级对象设置三个样式解决浏览器默认值:宽高overfl

LI中内容超过长度后以省略号显示的技巧 

此技巧适用与IE与OP浏览器

li { 

width:200px; 
white-space:nowrap; 
text-overflow:ellipsis; 
-o-text-overflow:ellipsis; 
overflow: hidden; 

为什么web标准中IE无法设置滚动条颜色了 
解决办法是将body换成html 

html { 
scrollbar-face-color:#f6f6f6; 
scrollbar-highlight-color:#fff; 
scrollbar-shadow-color:#eeeeee; 
scrollbar-3dlight-color:#eeeeee; 
scrollbar-arrow-color:#000; 
scrollbar-track-color:#fff; 
scrollbar-darkshadow-color:#fff; 

为什么无法定义1px左右高度的容器 
IE6下这个问题是因为默认的行高造成的,解决的技巧也有很多,例如:overflow:hidden   zoom:0.08   line-height:1px

css初始化
其中margin属性对IE有效,padding属性对FireFox有效。
  1. body,div,dl,dt,dd,ol,h1,h2,h3,h4,h5,h6,form,input,p,th,td{margin:0;padding:0;}  
  2. img{border:0px;}  
  3. ul {margin:0px;padding:0px;}/  
  4. ul li {list-style:none;} 

/* 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 */ 

或者这样设置:.hackbox{ display:table; //将对象作为块元素级的表格显示} 

 

太多了 参考:http://www.jb51.net/css/43686.html

posted @ 2017-06-08 14:00  LD_Joy  阅读(1685)  评论(0编辑  收藏  举报