转自:http://www.codesky.net/article/201008/139903.html

1. 首先谈谈!important问题的引起(盒模型问题):

  在CSS标准中,一个盒模型包括4个区,分别是:内容、内边距(padding)、边框(border)和外边距(margin)。

而Width宽度的计算,CSS有它的标准。但是实际上,不同的浏览器的表现却不同。比如,
Firefox(FF)是准确按照CSS标准:width为内容的宽度,也就是说:
层的宽度=width+padding(leftandright)+border-width;

而IE则把width作为整个层的宽度:
内容的宽度=width-padding-border-width;

IE的这种解析,被认为是一个BUG。但事实上,这种解释也不无道理,人们在设计页面的时候关注得更多的是盒子的大小,而不是内容的大小。正是因为浏览器的不同解析,给CSS的设计带来一些困难。

2. 针对这个问题,我们经常使用!important来区分Firefox和IE6.0:

如下:

#content
{
  width:414px!important;
  width:400px;
  padding:5px;/*只给出一个值,表示上右下左的边距都为5px*/
  border-width:2px;
}

Firefox识别!important,而IE不识别,且!important的width优先级高,因此FF理解为width:400px,IE6.0理解为width:414px,从而显示就相同了。

但是问题出在IE7,IE7.0对!important有了识别能力,但是对盒模型的解析却和IE6.0等一样,从而造成很大的麻烦。也就是说,!important的方法在IE7.0下变得不适用了。
而一般的情况下,border的使用相对较少的,并且border-width一般较小,因此最主要的问题就出在padding上了。网上很多人总结的经验是:padding要尽量少用,能用margin的,就别用padding。这种说法是消极的,问题的解决不应该总是回避。

3. 盒模型问题的解决:

仔细想想,其实问题就出在“width与padding/border-width的同时定义”上。而明白了这一点,解决的方法就不难想到了,只要添加一个无width定义的wrapper层,把原来的一个content层拆分成2个层,在wrapper中定义padding和border-width,然后在content中定义width。

如下:

#wrapper{padding:5px;border-width:2px;}   

#content{margin:0px;width:400px;}  

如下:

<style>
#wrapper{
padding:5px;
border-width:2px;
background-color:green;
}
#content{
margin:0px;
width:400px;
background-color:blue;
}
</style>

这样问题就可以得到解决,FF,IE6.0以及IE7.0都会获得相同的显示效果。更重要的是,没有使用任何CSS hack。

这种解决方法可以说是最终的方案,使用CSS hack的方法只是目前过渡阶段的临时方法。
对于网站构造,特别是对于样式比较复杂的网站,个人建议在重要的层快外加上wrapper层。但是对于目前现成的模板,可以有选择修改部分样式,或者使用其他方法。

4. 是否适合所有的浏览器?

理论上,这种方法应该适用于各种浏览器。
但是本人认为除非大型网站,兼容FF,IE6.0,IE7.0已经足够,这里也是主要针对这三个最主流的浏览器,IE更低版本,以及其他浏览器上的可行性有待验证。

CSS兼容性解决方法!important的IE7,Firefox问题的更多相关文章

  1. 【转】 IE6 IE7 IE8 css bug兼容性解决方法总结归纳

    1:li边距“无故”增加 任何事情都是有原因的,li边距也不例外. 先描述一下具体状况:有些时候li边距会突然增 加很多,值也不固定(只在IE6/IE7有这种现象),让人摸不着头脑,仔细“研究”发现是 ...

  2. IE7,6与Fireofx的CSS兼容性处理方法集结

    CSS对浏览器的兼容性有时让人很头疼,尤其是对于IE6这个问题多多的浏览器版本,从网上收集了IE7,6与Fireofx的兼容性处理方法并整理了一下.对于web2.0的过度,请尽量用xhtml格式写代码 ...

  3. mouseover和mouseout多次触发解决方法(兼容ie和firefox)(转)

    在用到mouseover和mouseout事件来作为事件触发的条件,但是如果我们用做触发的元素内部有其他的元素的时候当鼠标移上的时候会反复的触发mouseover和mouseout事件,如导致菜单闪烁 ...

  4. 浏览器hack总结 详细的浏览器兼容性解决方法

    由于各浏览器对页面的解析不同,会导致页面在不同浏览器中显示的样式不一致,为了保持页面的统一,经常需要对浏览器进行兼容性问题的调试. CSS Hack 面对浏览器诸多的兼容性问题,经常需要通过CSS样式 ...

  5. 12种CSS BUG解决方法与技巧

    一. 针对浏览器的选择器 这些选择器在你需要针对某款浏览器进行css设计时将非常有用. IE6及其更低版本,本文由52CSS.com整理,转载请注明出处! * html {} IE7及其更低版本 *: ...

  6. IE11下不能引入外部css的解决方法

    原: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.o ...

  7. eclipse使用maven install 命令,生成war包中没有jsp/js/css的解决方法

    在pom.xml文件中添加如下11行代码就可以了. <build> <plugins> <plugin> <groupId>org.apache.mav ...

  8. mvc后台传到前台的值带html标签css(解决方法)

    mvc后台传到前台的值带html标签css MVC中要用:@Html.Raw(后台数据库取的值); 或者MvcHtmlString.create();

  9. CSS浏览器兼容性问题解决方法总结

    CSS浏览器兼容解决总结如下: 1. CSS中几种浏览器对不同关键字的支持,可进行浏览器兼容性重复定义 !important 可被FireFox和IE7识别 * 可被IE6.IE7识别 _ 可被IE6 ...

随机推荐

  1. 洛谷——P2071 座位安排 seat.cpp/c/pas

    P2071 座位安排 seat.cpp/c/pas 题目背景 公元二零一四年四月十七日,小明参加了省赛,在一路上,他遇到了许多问题,请你帮他解决. 题目描述 已知车上有N排座位,有N*2个人参加省赛, ...

  2. 小数据池,bytes

    '''python2 python3 '''#python2#print() print 'abc'#range() xrange() 生成器# raw_input() #python3#print( ...

  3. [BZOJ4556][TJOI2016&&HEOI2016]字符串(二分答案+后缀数组+RMQ+主席树)

    4556: [Tjoi2016&Heoi2016]字符串 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1360  Solved: 545[S ...

  4. [CODECHEF]EASYEX

    题意:有一个$k$面的骰子,上面的数字为$1\cdots k$,现在要丢$n$次骰子,设$n$次中有$a_i$次扔到数字$i$,给定$l,f$,求$\prod\limits_{i=1}^la_i^f$ ...

  5. 【LCA/tarjan】POJ1470-Closest Common Ancestors

    [题意] 给出一棵树和多组查询,求以每个节点为LCA的查询数有多少? [错误点] ①读入的时候,注意它的空格是随意的呀!一开始不知道怎么弄,后来看了DISCUSS区大神的话: 询问部分输入: scan ...

  6. 集成学习中的 stacking 以及python实现

    集成学习 Ensemble learning 中文名叫做集成学习,它并不是一个单独的机器学习算法,而是将很多的机器学习算法结合在一起,我们把组成集成学习的算法叫做“个体学习器”.在集成学习器当中,个体 ...

  7. Scala 元组

    与列表一样,元组也是不可变的,但与列表不同的是元组可以包含不同类型的元素. 元组的值是通过将单个的值包含在圆括号中构成的.例如: val t = (1, 3.14, "Fred") ...

  8. 让Firefox支持offsetX、offsetY

    //计算光标相对于第一个定位的父元素的坐标 function coordinate(e){ var o = window.event || e, coord, coord_X, coord_Y; co ...

  9. Can a windows dll retrieve its own filename?

    http://stackoverflow.com/questions/2043/can-a-windows-dll-retrieve-its-own-filename A windows exe fi ...

  10. Fixed DC-DC Regulator Output Uses A Digitally Controlled Potentiometer

    http://electronicdesign.com/print/passives/fixed-dc-dc-regulator-output-uses-digitally-controlled-po ...