最近受到Sami大叔的激励,努力花了一天的功夫,又把博客模板改版了一下,升级了一下,几乎把所有的css代码又重新写了一遍。我发现,实践真的是最好的老师之一,通过实践,可以让你的技术层次更深一步增加。这一次的升级,让我得到了非常多的经验,例如本文要说的。
浏览器都是不同的,解析用的内核也是不同的(这里的浏览器不算360、搜狗等借用其他浏览器内核的浏览器)。这样就出现了不兼容的问题。例如,一行css代码,在这个浏览器可能会正常解析,而在那一个浏览器,却无法解析或者进行了加粗等等。这样就出现了一个很头疼的问题,一个页面,可能在火狐浏览器中显示很好很正常,但是到了IE浏览器下面,却错位,严重影响版面。
面对这个兼容的问题,大多数人都选择了进行修补,但是通过这次,我发现了,这种不兼容的原因,大部分还是因为你编写的css代码上。下面请看潜行者m在升级模板的时候,发现的两个案例:
1,显示文章摘要的框,在火狐浏览器等都是正常的,而在IE浏览器中,却莫名的增高了。重写css代码的时候,发现,在定义文章摘要框的时候,由于演示边框效果,临时定义了高160px。在整个定义整个文章框的时候,又强制定义了高度,由于类的优先性,这样就把文章摘要框的过高部分截掉了。所以就忽视了当时临时定义的高度属性。在火狐等浏览器中,都正常解释。但是在IE早期的版本,可能无法处理这种叠加效果,所以就全部显示出来了。导致每一个文章框的高度都很高。问题的解决方法,删掉对于文章摘要框的高度定义即可。
2,当我设计完这套模板的时候,在其他浏览器中均显示正常,但是在IE5.5和IE6中的“文章模块”显示中,边栏却错位。在“页面模块”显示中,却没有错位。由于“页面模块”是由“文章模块”衍生出来的,肯定是“文章模块”中某个地方的原因,导致边栏错位。经过仔细的对比观察发现,在文章下面的“文章信息”这一个块中,由于添加了两个虚线,导致整体宽度是642px,而文章内容是640px。正是由于多出了这2px的宽度,把边栏挤下去了。修改方法,设置“文档信息”的宽度为638px。
通过这两个例子,不得不让我思考,网页错位等原因,究竟是什么造成的?很显然,是由不完善的css代码造成的,是人为造成的。浏览器确实针对某些css样式的解释不同,显示的效果不同。但是绝大多数浏览器对于基础的css样式解释是没有问题的,比如:width:900px;绝对没有一个浏览器会把这条语句中的900px的宽度,显示成1000px的宽度。所以说,对于常用的常见的css样式规则,浏览器全部都完美支持,只是有部分比较生僻的标签样式或者某些高级的样式应用技巧,对于某些比较旧的浏览器来说,显示不出来应有的效果,仅此而已。所以,如果你的网页中,出现了不应该出现的显示效果,请仔细检查你的css代码,看看是不是有一些低级的错误。
对于一个人编写的css样式表来说,这种错误会很容易避免,因为css代码比较少,一个人去写,风格也能统一。但是对于一个比较大型的网站,对于一个需要团队共同维护的css样式表来说,麻烦就来了。每个人的编写风格都不同,而且代码很多,出现错误不易检查。所以,本人总结出了几条针对不兼容问题的应对方法:
1,尽量使用最低级,最简单的样式。因为这种基础样式在所有浏览器中的显示效果都是一样的。
2,统一编写风格,细化样式控制,尽量避免在一个区块叠加多个样式,意思就是说,对于一个div或者区域,就用一个样式去控制,不要再添加多个样式,让这个div继承其他样式。这样,哪一个区域出现问题,可以迅速的查找原因,而且不会出现其他继承样式优先级等导致的意外情况。