浏览器内核

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

使用Trident内核的浏览器:IE、Maxthon、TT;
使用Gecko内核的浏览器:Netcape6及以上版本、FireFox;
使用Presto内核的浏览器:Opera7及以上版本;
使用Webkit内核的浏览器:Safari、Chrome。

兼容写法

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{}
IE7不识别:last-child,只支持:first-child

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: 0 auto; } 

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

min-属性

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

min-width是个非常方便的CSS命令,它可以指定元素最小也不能小于某个宽度,这样就能保证排版一直正确。但IE不认得这个,而它实际上把 width当做最小宽度来使。

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> 

IE7 float:right 时元素换行bug

在IE7中,几个并列的块元素,如果前面几个元素没有设置浮动,而给最后的元素设置为float:right,则被设置为浮动的这个元素会出现在下一行。

ul li{display:inline-block;}
.right{float:right}
<ul>
<li>正常</li>
<li class="right">会显示在第二行</li>
</ul>

解决方法:将浮动的li元素放在最前面即可:

<ul>
<li class="right">会显示在第二行</li>
<li>正常</li>
</ul>

其他兼容技巧

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.

背景透明问题

IE: filter: progid: DXImageTransform.Microsoft.Alpha(style=0,opacity=60);
IE: filter: alpha(opacity=10);
FF: opacity:0.6;
FF: -moz-opacity:0.10;

最好两个都写,并将opacity属性放在下面。

显示类display:block,inline两个元素

display:block; //可以为内嵌元素模拟为块元素
display:inline; //实现同一行排列的的效果
display:table; //for FF,模拟table的效果

display:block 块元素,元素的特点是:总是在新行上开始;高度,行高以及顶和底边距都可控制;宽度缺省是它的容器的100%,除非设定一个宽度

float浮动清除

<style> 
.clearfix:after { 
    content:"."; 
    display:block; 
    height:0; 
    clear:both; 
    visibility:hidden; 
} 
.clearfix { 
    display:inline-block; 
} 
.clearfix {display:block;} 
</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 .

文字阴影(CSS3)

.text { text-shadow: 1px 1px 1px #666; filter: Shadow(Color=#666666, Direction=135, Strength=5); }

Box阴影(CSS3)

.box { box-shadow: 5px 5px 5px #666; -moz-box-shadow: 5px 5px 5px #666; -webkit-box-shadow: 5px 5px 5px #666; }

Sticky Footer (让页脚永远停靠在页面底部,而不是根据绝对位置)

<style type="text/css">
        * {
            margin: 0;
        }
        html, body {
            height: 100%;
        }
        .page-wrap {
            min-height: 100%;
            /* equal to footer height */
            margin-bottom: -142px;
        }
        .page-wrap:after {
            content: "";
            display: block;
        }
        .site-footer, .page-wrap:after {
            height: 142px;
        }
        .site-footer {
            background: #00ffc0;
        }
    </style>

<body>

<div class="page-wrap">

    Content!
    <a href="http://www.tuicool.com/articles/7ryUB3">http://www.tuicool.com/articles/7ryUB3</a>

</div>

<footer class="site-footer">
    I'm the Sticky Footer.
</footer>

</body>

iframe元素內嵌頁面如何去掉继承的html及body背景色/背景图片

iframe元素的功能是在一个文档里内嵌一个文档,创建一个浮动的帧。内嵌文档时一个完整的页面,有HTML,BODY等属性。这样遇到了一个问题,如果样式表中对BODY定义过背景色/背景图片,那么内嵌文档将全部继承过来。所以如何去掉背景色和背景图片:
【1】去掉背景色:filter:Chroma(Color=white);

<iframe width="100%" height="400" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" leftmargin="0" topmargin="0" style="filter:Chroma(Color=white);" ></iframe>

【2】去掉背景图片:

<iframe width="100%" height="400" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" leftmargin="0" topmargin="0" style="filter:Chroma(Color=white);" allowTransparency="true" ></iframe>

注意:内嵌页面同时也要增加BODY属性:

<body bgcolor="transparent" style='background:transparent'>

文字与图片垂直居中对齐方法?

为图片与文字的共同父元素所有的后代元素定义*{vertical-align:middle};例如:

<p>我要的坚强<img src="i/image.gif" /></p>

只需定义p *{vertical-align:middle}即可使文字与图片同行垂直居中.

文章标题列表中日期居右显示的两种方法?

方法A相对方法B省资源,但比方法B要多写两句代码,使用时请视情况而定:
方法A:

<p>这是文章标题<span>2010-10-10</span></p>
样式:
p{ position:relative}
p span{ position:absolute; right:0}

方法B:

<p><span>2010-10-10</span>这是文章标题</p>
样式:
p span{float:right}

文章参考-传送门