
IE与Firefox下对CSS解析的区别 |
我本着尽量不转载文章的原则,转载的这片文章.因为它实实在在帮了我不少忙.尤其是近期我再开发一个PJBlog插件时遇到的问题。希望没有看过的designer们留意些。 1、IE与Firefox下对CSS解析的区别,这是我在使用中的一些经验,拿出来和大家分享,希望大家继续 对高度的解析 IE:将根据内容的高度变化,包括未定义高度的图片内容,即使定义了高度,当内容超过高度时,将使用实际高度。 Firefox:没有定义高度时,如果内容中包括了图片内容,MF的高度解析是根据印刷标准,这样就会造成和实际内容高度不符合的情况;当定义了高度,但是内容超过高度时,内容会超出定义的高度,但是区域使用的样式不会变化,造成样式错位。 结论:大家在可以确定内容高度的情况下最好定义高度,如果真的没有办法定义高度,最好不用使用边框样式,否则样式肯定会出现混乱! img对象alt和title的解析 结论:大家在定义img对象时,最后将alt和title对象都写全,保证在各种浏览器中都能正常使用 其他的细节差别 其实这里还有另外一个问题,就是IE对于空格的处理,firefox是忽略的而IE对于块与块之间的空格是处理的。也就是说一个div结束后要紧接着一个div写,中间不要有回车或者空格。不然也许会有问题,比如3px的偏差,而且这个原因很难发现。 非常不走运的是我又碰到了这样的问题,多个img标签连着,然后定义的float: left,希望这些图片可以连起来。但是结果在firefox里面正常而IE里面显示的每个img都相隔了3px。我把标签之间的空格都删除都没有作用。 后来的解决方法是在img外面套li,并且对li定义margin: 0,这样就解决了IE和firefox的显示偏差。IE对于一些模型的解释会产生很多错误问题,只有多多尝试才能发现原因。 2、嵌套DIV:父DIV的高度不能根据子DIV自动变化的解决方案 当Content内容多时,即使parent设置了高度100%或auto,在不同浏览器下还是不能完好的自动伸展。 解决方案 <div id="parent"> 在层的最下方产生一个高度为1的空格,可解除这个问题 3、CSS DIV 学习笔记 二、每个稍大的区块div 后面都跟一个<!– /id –>标记开始、结束 三、隐藏文字的又一种方法 TEXT-INDENT: -9999px; LINE-HEIGHT: 0 四、巧妙地处理并列的两列: 以上两种方法关键点在于选择其中一个为float=left 五、随机的切换图片: 4、关于div的高度自适应 xhtml: <div id="container_father"> CSS #container { FRom: http://ulean.zg163.net/ 5、 深入标准 ~ The IE Doubled Float-Margin Bug(IE双倍浮动边界Bug) 一 段无错的代码把一个居左浮动(float:left)的元素放置进一个容器盒(box),并在浮动元素上使用了左边界(margin-left)来令它和 容器的左边产生一段距离。看起来相当的简单,对吗?但直至它被在IE/Win中浏览为止,在浏览器中居左浮动元素的边界长度被神秘地翻了一倍! 情况应该如何? 下面的图释展示了一个简单的div(茶色的盒子)包含着一个居左浮动的div(绿色的盒子)。浮动元素有一个100px的左边界,使容器盒与它的左边缘之间产生了一个100px的间隙。到现在为止,一直都还不错。 .floatbox { 陈旧的IE“双倍占据” 原样的相同代码被在IE/Win中浏览时以些微不同的方式显示,下面的图释展示了IE/Win在布局上所做的。 这为什么会发生?别问这种傻问题!这就是IE,记得吗?符合标准只是理想的状况,不指望实现,这个简单的事实正验证了。 重点 这个Bug仅当浮动边界和浮动元素的方向相同时出现在浮动元素和容器盒的内边缘之间,在这之后的任意有着相似边界的浮动元素不会呈现双倍边界。只有特定的浮动行的第一个浮动元素会遭遇这个Bug。像居左的情况一样,双倍边界同样神秘地显示在居右的相同方式。 最后,修复办法! 直 到现在(04年1月)这个Bug一直被认为是无法修复的,通常用来替代错误的边界的控制方法如:一个不可视浮动元素的左边距,连同一个内嵌的盒子一起,可 视的盒子装在不可视浮动元素里;或者使用技巧仅对IE/Win设定边界的1/2值。这办法生效了,但是是混乱的而且搞糟了干净的源代码。不过现在全部结束 了。 Steve Clason发现了一个修复办法,描述在他的Guest Demo里,修复了双倍边界和围绕文字缩进Bug。这是一个经典的IE的Bug修复办法,使用一个属性来修复影响不相关属性的Bug。 现在如何来做? 研究它,简单地将{display: inline;}设置给浮动元素就是全部所需做的!是的,听起来太简单了,不是吗?不过这是真的,仅仅一个display的"inline"声明已经能够胜任了。 熟悉规则的人知道浮动元素自动设置为"block"元素,而不管他们之前是什么。就如Steve从W3C里指出: 9.5.1 Positioning the float: the ‘float’ property "This property specifies whether a box should float to the left, right, or not at all. It may be set for elements that generate boxes that are not absolutely positioned. The values of this property have the following meanings: left right none 这 说明浮动元素上的{display: inline;}会被忽略,事实上所有的浏览器没有呈现任何改变,包括IE。但是,它不知何故让IE停止将浮动元素的边界翻倍。因而,这个修复办法可以被 直接应用,而没有任何繁琐的隐藏方法。如果将来的一款浏览器决定对这个修复办法抱恙,只要把这个修复装入IE独用的Tan Hack里,细节如同IE Three Pixel Text-Jog Demo。 下面是两个使用了前面相同代码的生动演示,第一个照常显示了IE的Bug,下一个对浮动元素使用了"inline"修复。 Update (20060828): 在FF下空<li></li>是不被解析的,也就是说,<li>标签所带的css样式是不被解释的。但是在IE下空<li></li>是一样会被解析的。 而我的sidebar使用了一个空的 <li></li> 。那么在FF下不被解析,而在IE下会出现15px的空白。 |