Bootstrap / CSS - 为什么这里需要 .clearfix

Bootstrap / CSS - why is .clearfix needed here

我在尝试将一些 <input/> 元素放置在带有 Bootstrap 的固定位置 DIV 中时遇到问题 3。容器 DIV 似乎在增长宽度以容纳输入(在 col-* 容器内),原因不明。这是一个演示代码:

    <div class="dropdown-menu" style="top: 10px; left: 400px; position: fixed; display: block;">
      <div class="col-xs-12">
        <div class="col-xs-12">
          <div class="radio">
            <label> <input type="radio" name="st" value="0">Bark</label>
          </div>
          <div class="radio">
            <label> <input type="radio" name="st" value="1">Roll over</label>
          </div>
          <div class="radio">
            <label> <input type="radio" name="st" value="2">Find bone and bury it underground</label>
          </div>
        </div>
        <div class="col-xs-12 whyyyyyyyyyyyyyyyyyyyyyy">
          <div class="col-xs-3">
            <input class="form-control" />
          </div>
          <div class="col-xs-3">
            <input class="form-control" />
          </div>
          <div class="col-xs-3">
            <input class="form-control" />
          </div>
          <div class="col-xs-3">
            <input class="form-control" />
          </div>
        </div>
      </div>
    </div>

这是上面的样子:

这是没有输入的:

检查宽度和最小宽度后,我发现仅在所有 col-* 元素之间使用 .clearfix 即可解决问题,如下所示:

    <div class="dropdown-menu" style="top: 10px; left: 400px; position: fixed; display: block;">
      <div class="col-xs-12">
        <div class="col-xs-12">
          <div class="radio">
            <label> <input type="radio" name="st" value="0">Bark</label>
          </div>
          <div class="radio">
            <label> <input type="radio" name="st" value="1">Roll over</label>
          </div>
          <div class="radio">
            <label> <input type="radio" name="st" value="2">Find bone and bury it underground</label>
          </div>
        </div>
        <i class="clearfix" />
        <div class="col-xs-12 whyyyyyyyyyyyyyyyyyyyyyy">
          <div class="col-xs-3">
            <input class="form-control" />
          </div>
          <i class="clearfix" />
          <div class="col-xs-3">
            <input class="form-control" />
          </div>
          <i class="clearfix" />
          <div class="col-xs-3">
            <input class="form-control" />
          </div>
          <i class="clearfix" />
          <div class="col-xs-3">
            <input class="form-control" />
          </div>
        </div>
      </div>
    </div>

上面是这样的:

其中一个 .clearfix-es 丢失了,我的容器尺寸很糟糕。

我曾尝试通过阅读 .clearfix 来转向理论,例如从这里开始: 但是,同样,我没有看到 .clearfix 在这种情况下有什么变化。

我的意思是,就我而言,所有 elements/content 都已经浮动了。为什么容器会像那样增长?.clearfix 如何解决它?引用的答案是 floats do not impart shape to its containerWhat clearfix does is to force content after the floats or the container containing the floats to render below it。如果在我的例子中浮动元素本身不会导致容器增长,那么这是什么黑客行为?它们之间的空格?

有没有比到处使用 clearfix 元素更好的解决方法?

更新:

嗯...在第二个代码片段中我的解决方案代码的 HTML 中似乎有一些无效的东西。这是自闭 <i> 元素。那是在 Bootply 中解决问题,但不是在它之外。这是我在 Bootply 中得到的:

嗯...所以,我想我仍然没有解决这个问题的方法(至少不是需要 hack 的方法)。关于如何以 bootstrap 方式解决此问题的任何想法?

input 容器的总宽度为 col-xs-12。所以他们会尝试用完那 12 列 space。所以你可以在父级上使用较小的 col-*-#:

<div class="col-xs-6">
  <div class="col-xs-3">
    <input class="form-control" />
  </div>
  <div class="col-xs-3">
    <input class="form-control" />
  </div>
  <div class="col-xs-3">
    <input class="form-control" />
  </div>
  <div class="col-xs-3">
    <input class="form-control" />
  </div>
</div>

但是,您的列设置方式可能存在更大的问题。例如,列 col-xs-12 作为另一个 col-xs-12 的直接后代是多余的。您还应该使用 .row 容器。

查看网格上的 boostrap documentation

此外,永远不要用 <i> 这样的内联元素包裹 <div> 这样的块级元素 除非 它们的显示 属性 设置为 inline-blockblock。否则您的页面将呈现出意想不到的结果。