【问题标题】:How do I float two divs side-by-side without specifying a width while keeping the right div minimal?如何在不指定宽度的情况下并排浮动两个 div,同时保持右 div 最小?
【发布时间】:2015-06-10 15:47:59
【问题描述】:

我指的是解决方案:How do I float two divs side-by-side without specifying a width?

不过,我想要相反的星座:右边的 div 应该留在右侧,同时占用最小的空间(仅与其内容一样多),而左边的 div 应该扩展到剩余空间。

我尝试了以下方法:

.right {
  float: right;
  background: red;
}
.left {
  overflow: hidden;
  background: green;
}
<div class="left">left div</div>
<div class="right">right div</div>

然而,这会将右边的 div 放在换行符上,而左边的 div 会扩展到上面的整个宽度。

见:https://jsfiddle.net/enRkR/973/

【问题讨论】:

    标签: html css


    【解决方案1】:

    这是因为:

    浮点数是在当前行向左或向右移动的框。

    取自http://www.w3.org/TR/CSS21/visuren.html#floats

    因为右侧浮动的div 在新行上,它会出现在左侧div 的下方。通过将其放在左侧div 之前,它们将位于同一行。

    在您的原始示例中,divs 将像这样堆叠:

    当右 div 向右浮动时,它会移动到当前行的右侧:

    颠倒顺序会导致divs 像这样堆叠:

    当右 div 向右浮动时,它会移动到当前行的右侧:

    但是:

    由于浮动不在流中,因此在浮动框之前和之后创建的非定位块框垂直流动,就好像浮动不存在一样。

    所以左侧div 有效地向上移动到右侧div 的同一行:

    因此,获得所需结果的最简单方法是通过将 .right 放在 .left 之前来更改 HTML 中 divs 的顺序:

    .right {
      float: right;
      background: red;
    }
    .left {
      overflow: hidden;
      background: green;
    }
    <div class="right">right div</div>
    <div class="left">left div</div>

    【讨论】:

    • 你能解释一下为什么这个星座的左边 div 也没有放在新的一行上吗? (或者为什么在我尝试的代码中首先将正确的 div 放在新行上)
    • @user511287 这将是由于:由于浮动不在流中,因此在浮动框之前和之后创建的非定位块框垂直流动,就好像浮动不存在一样。 简而言之,因为右div 不再是流的一部分,所以左div 现在在右div 占据的行上。如果以后有机会,我会尝试在我的答案中添加更多信息。
    • 谢谢!准确而彻底的答案。
    • @user511287 没问题,我已经在答案中添加了额外的细节。
    【解决方案2】:

    你快到了,你只需要改变两个div的顺序

    而不是

    <div class="left">left div</div>
    <div class="right">right div</div>
    

    你把它们放在另一个顺序。这使得浮动 div 占据了它所需的空间,而下一个 div (.left) 将占据其余部分。

    <div class="right">right div</div>
    <div class="left">left div</div>
    

    【讨论】:

    • 奇怪但效果很好!我将 Hidden Hobbes 的答案标记为正确,因为它也解释了原因。谢谢
    【解决方案3】:

    一个可能的解决方案:

    .right{    
        position: absolute;
        top: 0;
        right: 0;
    }
    

    小提琴:https://jsfiddle.net/lmgonzalves/enRkR/974/

    【讨论】:

    • 谢谢,这也是一个很好的解决方案,但依赖于包装器的位置值,这就是我将纯浮动解决方案标记为正确的原因。
    【解决方案4】:

    这就是你想要达到的目标?

    https://jsfiddle.net/ksg8fnL9/

    <div id="wrapper">
        <div class="left">left div</div>
        <div class="right">right div</div>
    </div>
    
    #wrapper {
        display:table;
        width:100%;
    }
    #wrapper > div {
        display:table-cell;
    }
    #wrapper > div.right{    
        background:red;
    }
    #wrapper > div.left{
        background:green;
        width:70%
    }
    

    【讨论】:

    • “不指定宽度”毕竟不是那么强的约束吗?
    • 谢谢,但不,我想避免完全按照问题所述指定宽度。
    猜你喜欢
    • 1970-01-01
    • 2014-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多