先说点Hack的知识(真正的高手是不用Hack的,但要成为高手必须通过Hack这一关)

/* CSS属性级Hack */ 
color:red; /* 所有浏览器可识别*/ 
_color:red; /* 仅IE6 识别 */ 
*color:red; /* IE6、IE7 识别 */ 
+color:red; /* IE6、IE7 识别 */ 

*+color:red; /* IE6、IE7 识别 */ 

[color:red; /* IE6、IE7 识别 */
color:red\9; /* IE6、IE7、IE8、IE9 识别 */ 

color:red\0; /* IE8、IE9 识别*/ 

color:red\9\0; /* 仅IE9识别 */ 

color:red \0; /* 仅IE9识别 */ 

color:red!important; /* IE6 不识别!important 有危险*/
/* CSS选择符级Hack */ 
*html #demo { color:red;} /* 仅IE6 识别 */ 

*+html #demo { color:red;} /* 仅IE7 识别 */ 

body:nth-of-type(1) #demo { color:red;} /* IE9+、FF3.5+、Chrome、Safari、Opera 可以识别 */ 

head:first-child+body #demo { color:red; } /* IE7+、FF、Chrome、Safari、Opera 可以识别 */ 

:root #demo { color:red\9; } : /* 仅IE9识别 */
/* IE条件注释Hack */ 

<!--[if IE 6]>此处内容只有IE6.0可见<![endif]--> 

<!--[if IE 7]>此处内容只有IE7.0可见<![endif]-->

接下来说说一些我知道的BUG:
① css盒模型在IE6下解析有问题,我们知道就width来说,一个块级元素的magin、padding、boder,width7个属性的宽度之和,应该等于其父级元素的内容区域(width),
而我们一般设置宽度若是未达到其长度,浏览器就会重置margin-right的值,将之它们的和等于其值,当然若是我们为margin设置负值,那么元素的width可能超出其父元素。
在标准下,width为padding所占区域,但是再ie6中设置width后,其真实width为所设width-其padding与border*2,我一般采用CSShack技术处理
② IE6的双倍边距BUG,在块级元素浮动后本来外边距10px,但IE解释为20px,解决办法是加上display: inline ,
1、问题:在IE6下如果某个标签使用了float属性,同时设置了其外补丁“margin:10px 0 0 10px”可以看出,上边距和左边距同样为10px,但第一个对象距左边有20px。

2、解决办法:当将其display属性设置为inline时问题就都解决了。

3、说明:这是因为块级对象默认的display属性值是block,当设置了浮动的同时,还设置了它的外边距 就会出现这种情况。
也许你会问:“为什么第二个对象和第一个对象之间就不存在双倍边距的BUG”?
因为浮动都有其相对应的对象,只有相对于其父对象的浮动 对象才会出现这样的问题。
第一个对象是相对父对象的,而第二个对象是相对第一个对象的,所以第二个对象在设置后不会出现问题。
另外在一些特殊布局中,可能需要组合使用display:block;和display:inline;才能达到预期效果。
当然最坏的情况下,我们就可以使用"margin:10px 0 0 10px;*margin:10px 0 0 10px;_margin:10px 0 0 5px",
这种“标准属性;*IE7识别属性;_IE6识别属性”HACK方式解决 4、总结:这个现象仅当块级对象设置了浮动属性后才会出现,内联对象(行级对象)不会出现此问题。并且只有设置左边距和右边距的值才会出问题,上下边距不会出现问题。 <div style="width:200px;height:50px;background:#ccc;"> <div style="width:100px; height:50px;float:left;margin-left:10px; background:#eee;"> </div> </div> margin双布局可以说是IE6下经典的bug之一。产生的条件是:block元素+浮动+margin。 还记得我自认为会css的那个阶段,这个问题我经常碰到,会很熟练的用hack解决这个问题,当时还自以为是,洋洋得意。现在看来,当时的自己嫩的就像个 豆芽菜。
真正css厉害的人基本上是不会碰到这个bug的,如果您时不时遇到这个bug,说明您的css还有好一段路要走。 我的体会是越少的浮动,就会越少的代码,会有更灵活的页面,会有扩展性更强的页面。这不多说,归结为到一定水平了,浮动会用的较少。
另外,您也会避免使用浮动+margin的用法。所以,越后来越不易遇到这种bug。 这里提一下解决方法,使用hack我是不推荐的,使用hack属于比初学者稍高一点的层次水平。一个页面,没有一个hack,但是各个浏览器下表现一致,这才是水平。
使用display:inline;可以解决这个问题。 而为什么display:inline可以解决这个双边距bug,首先是inline元素或inline-block元素是不存在双边距问题的。
然后,float:left等浮动属性可以让inline元素haslayout,会让inline元素表现得跟inline-block元素的特性一样, 支持高宽,垂直margin和padding等,
所以div class的所有样式可以用在这个display inline的元素上。
③ IE6下图片下方有空隙产生;解决这个BUG的方法也有很多,可以是改变html的排版,或者设置img 为display:block,
或者设置vertical-align 属性为vertical-align:top bottom middle text-bottom都可以解决.(但是最近我发现这个问题在其它浏览器中也有所体现)
④ IE6 3px bug 两个浮动层中间有间隙,这个IE的3PX BUG也是经常出现的,
解决的办法是给右边元素也同样浮动 float:left 或者相对IE6定义.left margin-right:-3px;
经典两列布局,float: left;width:200px; 第二个,margin-left,200px; 他们之间会产生3px的间距。
⑤ 在IE6中没有min-width的概念,其默认width就是min-width,所以有时字体过多它会选择撑开容器。
⑥ IE6无法定义1px左右高度的容器,是因为默认的行高造成的,解决的方法也有很多,
例如: overflow:hidden zoom:0.08 line-height:1px ⑦ 使用margin : 0 auto;方法使容器居中依然在IE6中行不通,我们要对其父容器使用text-align:center;
⑧ 被点击访问过的超链接样式不在具有hover和active了,很多人应该都遇到过这个问题,
解决方法是改变CSS属性的排列顺序: L-V-H-A <style type="text/css"> a:link {} a:visited {} a:hover {} a:active {} /style>
⑨ 在使用绝对定位/相对定位时,设置z-index在ie中可能会失效,是因为其元素依赖于其父元素的z-index,而父元素默认为0 ?
所以子元素z-index高,而父元素底,依然不会改变其显示顺序;
10、外边距叠加问题:

#box{ margin:10px; background-color:Red; }

#box p { margin:20px; background:gray; }

<div id="box"><p>dd</p></div>

该代码会导致外边距叠加,并且外边距跑到div包裹外去,bug是由于块级子元素高度计算方式造成的。 
若是元素没有垂直边框或者padding,那么它的高度就是包含的子元素的顶部和底部边框的的距离。

让人头疼的CSS兼容的更多相关文章

  1. js和css兼容问题

    (一)html部分 1.H5新标签在IE9以下的浏览器识别 <!--[if lt IE 9]>  <script type="text/javascript" s ...

  2. 【转载】各浏览器CSS兼容问题

    CSS对浏览器的兼容性有时让人很头疼,或许当你了解当中的技巧跟原理,就会觉得也不是难事,从网上收集了IE7,6与Fireofx的兼容性处理方法并 整理了一下.对于web2.0的过度,请尽量用xhtml ...

  3. div+css兼容 ie6_ie7_ie8_ie9_ie10和FireFox_Chrome等浏览器方法

    1.div的垂直居中问题 vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了.缺点是要控制内容不要换行   ...

  4. CSS兼容常用技巧

    请尽量用xhtml格式写代码,而且DOCTYPE影响 CSS 处理,作为W3C标准,一定要加DOCTYPE声明. 1.div的垂直居中问题 vertical-align:middle; 将行距增加到和 ...

  5. css兼容技巧

    CSS兼容常用技巧 请尽量用xhtml格式写代码,而且DOCTYPE影响 CSS 处理,作为W3C标准,一定要加DOCTYPE声明. 1.div的垂直居中问题 vertical-align:middl ...

  6. CSS兼容IE Firefox问题与解决方法

    一.双边距问题浮动元素的外边距会加倍,但与第一个浮动元素相邻的其他浮动元素外边距不会加倍.解决方法:在此浮动元素增加样式  display:inline; 二.图片产生的间隙父元素直接包含<im ...

  7. 各浏览器CSS兼容问题

    CSS对浏览器的兼容性有时让人很头疼,或许当你了解当中的技巧跟原理,就会觉得也不是难事,从网上收集了IE7,6与Fireofx的兼容性处理方法并 整理了一下.对于web2.0的过度,请尽量用xhtml ...

  8. 主流浏览器css兼容问题的总结

    最近又搞了一波网站的兼容,由于要求ie浏览器还是要兼容到ie8,所以调起来还是各种蛋疼. 现在就post一些做兼容的总结,可能不够全面,但是可以告诉大家如何避过一些坑.主要测试了chrome,fire ...

  9. css兼容问题集合

    css兼容问题 兼容问题 1.文字本身的大小不兼容.同样是font-size:14px的宋体文字,在不同浏览器下占的空间是不一样的,ie下实际占高16px,下留白3px,ff下实际占高17px,上留白 ...

随机推荐

  1. live555—VS2010/VS2013 下live555编译、使用及测试(转载)

    Ⅰ live555简介 Live555 是一个为流媒体提供解决方案的跨平台的C++开源项目,它实现了对标准流媒体传输协议如RTP/RTCP.RTSP.SIP等 的支持.Live555实现了对多种音视频 ...

  2. CNN-梯度下降

    一.梯度检测: 对于函数而言通常有两种计算梯度的方式: 1.数值梯度 (numberical gradient) 2.解析梯度 (analytic gradient ) 数值梯度计算通常为: 更为常见 ...

  3. DEBUG 调试

    1.Step Into (also F5) 跳入 2.Step Over (also F6) 跳过 3.Step Return (also F7) 执行完当前method,然后return跳出此met ...

  4. SQL Server2012中的SequenceNumber

    http://www.cnblogs.com/CareySon/archive/2012/03/12/2391581.html https://q.cnblogs.com/q/53552/ https ...

  5. Gentoo双网卡同时启用上内外网

    引言:本文配置网络通过 OpenRC/netifrc 方法(net.*scritps)配置. 外网网卡:enp3s4 内网网卡:enp2s0 外网地址(通过路由器) IP: 192.168.1.10 ...

  6. NSDateComponents

    NSDateComponents将时间表示成适合人类阅读和使用的方式, 首先要遵循某种历法 NSCalendar * cal = [NSCalendar currentCalendar]; 有三种用法 ...

  7. Objective-C Runtime 运行时之二:成员变量与属性(转载)

    在前面一篇文章中,我们介绍了Runtime中与类和对象相关的内容,从这章开始,我们将讨论类实现细节相关的内容,主要包括类中成员变量,属性,方法,协议与分类的实现. 本章的主要内容将聚集在Runtime ...

  8. photoshop切图

    1.首先需要用photoshop把psd源文件打开,看看源文件的整体布局.源文件是分层的,方便切图的层次. 2.切图的工具叫做"切片",在左侧面板可以看到.右击可以看到" ...

  9. IIS 7如何实现http重定向https

    转自[http://blog.csdn.net/xuhuojun/article/details/6137154] 在不少的企业当中,网站设计出于安全的考虑使用了https协议,但同时公司也开放了80 ...

  10. TheSeventhWeekJavaText

    如何用二维数组绘制五子棋盘 在定义一个棋盘类,声明一个二维字符数组,为每一个数组元素赋值为"+",打印输出就是一个简单地棋盘,如下图: 然后定义BufferedReader的实例对 ...