zoukankan      html  css  js  c++  java
  • IE6/IE7和Firefox对Div处理的差异(转)

    基本HTML代码:
    复制内容到剪贴板
    代码:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head>
    <title>Div Float Sample</title>
    <style type="text/css">
    div }
    </style>
    </head>
    <body>
    <div class="d1">
        <div class="d2"> </div>
        <div class="d3"> </div>
    </div>
    </body>
    </html>
    以上代码显示的结果如下,很正常,结果相同。
       

    document.body.clientWidth*0.5) {this.resized=true;this.width=document.body.clientWidth*0.5;this.style.cursor='pointer';} else {this.onclick=null}" border=0 resized="true">



    下面会在这个基础上进行修改,修改的内容都在style中,其他代码就不再重复写了。

    请注意,这里的Style中用到了min-height,这个和height是不同的,min-height指定了对象的一个最小高度,当对象的子内容高度超过这个最小高度是,这个对象会自动撑大。这是一个非常牛的style,可惜的是,在这个style和float这个同样牛的style一起使用的时候,就会出现各种问题

    内部一个Div修改成为float:left
    复制内容到剪贴板
    代码:
    .d1 }
    显示结果如下。

    document.body.clientWidth*0.5) {this.resized=true;this.width=document.body.clientWidth*0.5;this.style.cursor='pointer';} else {this.onclick=null}" border=0 resized="true">



    这个结果中,Firefox有点离谱了,两个框叠在一起也就罢了,为什么那个红框会变大捏?而且变的大小也很诡异,不知道是按照什么公式计算出来的。IE在这里的显示应当是附和标准的。

    内部两个Div都修改成为float:left
    复制内容到剪贴板
    代码:
    .d1 }
    显示结果如下。

    document.body.clientWidth*0.5) {this.resized=true;this.width=document.body.clientWidth*0.5;this.style.cursor='pointer';} else {this.onclick=null}" border=0 resized="true">



    在这种情况下,Firefox的结果尚能解释,可能是float把外层的Div也作为内层float影响的范围,这样内层的就不会将外层的Div撑大了。IE在这里出现了Margin失效的情况,可以解释为内层第二个float造成了影响。

    干脆把外层的Div也修改成为float:left
    复制内容到剪贴板
    代码:
    .d1 }
    显示结果如下

    document.body.clientWidth*0.5) {this.resized=true;this.width=document.body.clientWidth*0.5;this.style.cursor='pointer';} else {this.onclick=null}" border=0 resized="true">



    这种情况下,Firefox正常了,而IE延续了前面的不正常情况。

    外层是float:left,内层最后一个不再float:left
    复制内容到剪贴板
    代码:
    .d1 }
    显示结果如下

    document.body.clientWidth*0.5) {this.resized=true;this.width=document.body.clientWidth*0.5;this.style.cursor='pointer';} else {this.onclick=null}" border=0 resized="true">



    这和前面第一种加float:left的情况相同。

    结论
    再重申一次,本文讨论的是一个比较高级的话题。如果在style中用height而不是min-height来设定高度,是不会出现以上这些问题的。不过,不用min-height就失去了div自动撑大这一个很有必要的特性。

    在min-height和float:left的情况下,没有一种完美的写法让Firefox和IE结果相同。不过仍然可以发现绕开的方法。

    进一步试验可以发现,margin遭到的影响在padding上比较好,所以最好是padding和margin都不用,或者只用padding。

    两者相同的代码如下
    复制内容到剪贴板
    代码:
    div }
    显示结果如下

    document.body.clientWidth*0.5) {this.resized=true;this.width=document.body.clientWidth*0.5;this.style.cursor='pointer';} else {this.onclick=null}" border=0 resized="true">



    呵呵,总算是一样了,虽然是凑合着一样了。幸好一样了,否则只好用table了。

    当然所有这些情况也许是有合理解释的,说不定增加某一个style的设置,这些问题都迎刃而解了,不过目前我还没有找到这个设置。

    关于Doctype
    以上代码在下面这些Doctype下试验过,结果相同。

    作者:miyiyi[at]gmail[点]com

    时间:2006-12-20
  • 相关阅读:
    如何提高程序员自身价值
    程序员,你伤不起
    Android数据传输
    ecshop商城禁止修改管理员邮箱
    智能手机的安全隐患
    商城前后台限制ip地址访问
    商城用户评论优化
    职业洗手法
    Exp10 经典漏洞的逆向分析 20155113徐步桥
    Exp9 Web安全 20155113徐步桥
  • 原文地址:https://www.cnblogs.com/toosuo/p/917850.html
Copyright © 2011-2022 走看看