【问题标题】:Set floating div to height: 100%?将浮动 div 设置为高度:100%?
【发布时间】:2013-07-18 07:27:00
【问题描述】:

我怀疑没有答案,但我想知道是否有办法将浮动 div 的高度设置为 100%?

我在一个包装 div 中有两个 div:

<div id="wrapper">
    <div id="left">
    </div>
    <div id="right">
    </div>
</div>

右边的 div 有一个设定的高度,我想让左边的 div 匹配它,所以我创建了:

#wrapper {
    background-color: red;
    width: 200px;
    height: 100%;
    overflow: auto;
    padding: 5px;
}

#left{
    width: 90px;
    height: 100%;
    float:left;
    background-color: #ccc;
}

#right{
    width: 90px;
    height: 300px;
    float:right;
    background-color: blue;
}

但左边的 div 没有展开。在这里摆弄:http://jsfiddle.net/8dstK/2/

有人知道实现等高 div 的方法吗?

我应该只使用 JQuery 来获取右 div 的高度并将其应用于左 div 吗?

【问题讨论】:

  • 你为什么不把左边和右边的高度一样?
  • @upcoming_coder 在我的真实网站上,一栏动态填充了来自我的 CMS 的内容 - 高度未知

标签: html css css-float


【解决方案1】:

您可以通过在 HTML 中设置&lt;div&gt;s 的类似表格结构,然后使用display: tabledisplay: table-cell 等来做到这一点。这将起作用,因为同一行中的表格单元格会自动调整为与最高的单元格相同的高度。不过IE7及以下do not supportdisplay: table

jsFiddle

<div id="wrapper">
    <div id="inner-wrapper">
        <div id="left">
            left
        </div>
        <div id="right">
            right
        </div>
    </div>
</div>
#wrapper       { display: table; }
#inner-wrapper { display: table-row; }
#left          { display: table-cell; }
#right         { display: table-cell; }

我必须从 #left#right 中删除 float: leftfloat: right 才能使表格单元格显示正常工作,因为表格单元格不能浮动。但是,这将两个 div 粘在一起。表格单元格不接受边距,只接受填充。如果您不想用填充分隔它们,您可能需要在 leftright 之间添加一个额外的 display: table-cell div 来分隔它们。

阅读更多关于display: table 和家人on QuirksModeon MDN 的信息。

【讨论】:

  • 谢谢!这有点工作,但后来它跑到我的页脚。对此有何建议?
  • @MeltingDog this jsFiddle 能解决您的问题吗?我只是在猜测你想要你的页脚。我添加了一个额外的包装 div 以将类似表格的 div 与页脚分开。如果这不是您的页脚问题,请发布一个页脚损坏的代码示例。
  • 不,请不要使用 display:table :( 我知道在 css 中没有其他方法,我更喜欢使用 Javascript
【解决方案2】:

这是我知道如何做到这一点的方式。具有绝对位置和上/下/左 更新了你的小提琴:http://jsfiddle.net/8dstK/3/

基本上,您使包装器 div 的位置相对,以便子 div 可以绝对定位在包装器内。接下来,我们将左侧 div 设置为绝对定位,并在我们的定位中考虑填充。将顶部设置为 5px,左侧设置为 5px,底部设置为 5px。应该这样做。

#wrapper {
    background-color: red;
    width: 200px;
    height: 100%;
    overflow: auto;
    padding: 5px;
    position:relative;
}

#left{
    width: 90px;
    float:left;
    background-color: #ccc;
    top:5px;
    left:5px;
    bottom:5px;
    position:absolute;
}

#right{
    width: 90px;
    height: 300px;
    float:right;
    background-color: blue;
}

【讨论】:

  • 左边 div 中的文字溢出了...我知道.. 一个退步。然而,问题是如何让左边的 div 扩大到 100%... 确实如此。
  • 我认为这是一个很好的潜在解决方案,但不知道长期使用它会破解。 +1 @Mr.Alien 阐明了你的观点。
  • @RayPerea - 只是出于好奇,包装器呢?
  • @NathanLee - 如果包装器中的内容增加,那么左 div 也会增加。此外,如果右 div 增加,左 div 也会增加,因为这也会增加包装器的大小,从而增加左 div 的大小。一种解决方法是添加溢出:自动;到左侧 div 以便文本可滚动并且不会简单地溢出。
  • 我忽略了一件事..你不需要浮动:左边的div
【解决方案3】:

在父 div 中使用最常用的 clearfix 类。这个问题已经可用。检查此链接。 How do you keep parents of floated elements from collapsing?

【讨论】:

    【解决方案4】:

    有答案,有解决方案。 高度没有扩大是因为它是&lt;div&gt;&lt;div&gt; 是块级元素。

    如果你想让它扩展,你必须将它的display 转换为table 才能扩展。

    下面是相同的工作演示。

    WORKING DEMO

    HTML:

    <div id="wrapper">
        <div id="left">
            left
        </div>
        <div id="right">
            right
        </div>
    </div>
    

    CSS:

    #wrapper {
        background-color: red;
        width: 200px;
        height: 100%;
        overflow: auto;
        padding: 5px;
        display:table;
    }
    
    #left{
        width: 90px;
        height: 100%;
        float:left;
        background-color: #ccc;
        display:table;
    }
    
    #right{
        width: 90px;
        height: 300px;
        float:right;
        background-color: blue;
    }
    

    【讨论】:

    • 抱歉没能找到您?你的意思是说#left也应该有同样的高度?如果是,那么如果增加了#right div,那么 OP 希望浮动 div 的高度应该匹配到 100%。这就是正在实现的目标。
    • @RohitAzad 刚刚制作了 height: auto; 用于测试,效果不错...jsfiddle.net/8dstK/8 Nathan - +1
    • 对那些否定的人来说也是一种感谢,但应该感谢一个理由。
    【解决方案5】:

    将父元素设置为固定高度(比如300px),然后子元素会自动将100%上父元素的整个宽度设为http://jsfiddle.net/8dstK/6/

     #wrapper {
            background-color: red;
            width: 200px;
            height: 300px;
            overflow: auto;
            padding: 5px;
        }
    
        #left{
            width: 90px;
            height: 100%;
            float:left;
            background-color: #ccc;
        }
    
        #right{
            width: 90px;
            height: 100%;
            float:right;
            background-color: blue;
        }
    

    【讨论】:

    • 关键是,如果必须将高度设置为固定,那么没有解决方案的意义,因为它会给出一个临时的解决方案,而不是一个长期的解决方案。说为此您将包装器固定为 300px,但是当内容出现时,您将不会继续增加高度。它必须在某个时候停止,因此相关性是使其流动而不是固定。
    猜你喜欢
    • 2012-04-22
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-17
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多