【问题标题】:Weird div border problems when floating浮动时奇怪的div边框问题
【发布时间】:2009-04-30 06:55:28
【问题描述】:

我能否解释一下为什么这段代码会产生这样的结果?如果可能的话,还有一种修复/解决它的方法。

我不希望 div 'z' 和 'q' 越过右侧的“蓝色 div 边框”。

或者

我希望 div 'x' 与 'z' 和 'q' 一致,并且也可以越过蓝色的右边框。

<div style='margin: 5px;width: 653px;border: blue 1px solid;float: left;'>
    <div style='margin: 0px; margin-bottom: 5px;width: 100%;border: red 1px solid;/*float: left;*/'>z</div>
    <div style='overflow: hidden;margin: 0px; margin-bottom: 5px;width: 100%;border: red 0px solid;/*float: left;*/'>
            <div style='margin: 0px; margin-bottom: 0px;width: 300px;border: red 1px solid;float: left;'>y</div>
            <div style='margin: 0px; margin-bottom: 0px;width: 300px;border: red 1px solid;float: right;'>x</div>
    </div>
     <div style='margin: 0px; margin-bottom: 5px;width: 100%;border: red 1px solid;/*float: left;*/'>q</div>

【问题讨论】:

    标签: css html border


    【解决方案1】:

    您是通过什么浏览器生成屏幕截图的?如果是IE,框模型有问题导致计算100%宽度时忽略边框宽度。

    要么创建一个不可见的容器来调整内部 div 的大小,要么将内部 div 的大小调整为 container.width -2。

    另外,尝试从 div 中删除 width: 100%;

    【讨论】:

    • 问题出在/出在 Firefox 3 和 IE7 中(在其他版本中没有测试)。移除宽度:100% 解决了我的问题
    【解决方案2】:

    红色边框实际上位于图像中的蓝色边框内 - 但我假设您想增加 z 和 q 容器的边距...

    我冒昧地将属性括在双引号中并更正了重新声明的样式规则(边距和边距底部)-但为行格式道歉-我似乎无法理解在我删除换行符之前,它都留在这个论坛的代码块内:

    <div style="margin: 5px;width: 653px;border: blue 1px solid;float: left;"><div style="margin: 5px;width: 100%;border: red 1px solid;">z</div><div style="overflow: hidden;margin: 5px;width: 100%;border: red 0px solid;"><div style="margin: 0px;width: 300px;border: red 1px solid;float: left;">y</div><div style="margin: 0px;width: 300px;border: red 1px solid;float: right;">x</div></div><div style="margin: 5px;width: 100%;border: red 1px solid;">q</div>
    

    【讨论】:

      【解决方案3】:

      对于这种情况,您的设计可能正在运行,但由于您没有清除和处理浮动元素,因此很容易损坏。

      您可以参考我创建的示例。我已经为此类问题创建了一个工作小提琴。

      http://jsfiddle.net/mayankipsa/e7snvdag/

      .floatLeft { float: left;}
      .floatRight { float: right;}
      .clearBOTH { clear: both; }
      
      .redBorder{border:1px solid red;}
      .blueBorder{border:1px solid blue;}
      
      .x,.y{width:49%;margin:1px; }
      .z{margin:1px;}
      .q{margin:1px;}
      <div style='margin: 5px;width: 653px;border: blue 1px solid;float: left;'>
          <div style='margin: 0px; margin-bottom: 5px;width: 100%;border: red 1px solid;/*float: left;*/'>z</div>
          <div style='overflow: hidden;margin: 0px; margin-bottom: 5px;width: 100%;border: red 0px solid;/*float: left;*/'>
                  <div style='margin: 0px; margin-bottom: 0px;width: 300px;border: red 1px solid;float: left;'>y</div>
                  <div style='margin: 0px; margin-bottom: 0px;width: 300px;border: red 1px solid;float: right;'>x</div>
          </div>
           <div style='margin: 0px; margin-bottom: 5px;width: 100%;border: red 1px solid;/*float: left;*/'>q</div>
      </div>
      
      <div class="clearBOTH"></div>
      <div class="blueBorder" style="margin-top:50px;">
          <div class="z redBorder">z</div>
          <div class="redBorder">
              <div class="y floatLeft redBorder">y</div>
              <div class="x floatRight redBorder">x</div>
              <div class="clearBOTH"></div>
          </div>
          <div  class="q redBorder">q</div>
      </div>

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-01-04
        • 2017-07-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多