如何使浮动div的高度达到其父级的100%?

问题描述 投票:0回答:12

这是 HTML:

<div id="outer">
    <div id="inner"></div>
    Test
</div>

这是 CSS:

#inner {
  float: left;
  height: 100%;
}

使用 Chrome 开发者工具检查,内部 div 的高度为 0px。

如何强制其为父div高度的100%?

css html height
12个回答
134
投票

致家长:

display: flex;

您应该添加一些前缀http://css-tricks.com/using-flexbox/

编辑: 唯一的缺点是IE一如既往,IE9不支持flex。 http://caniuse.com/flexbox

编辑2: 正如@toddsby 所指出的,对齐项目是针对父级的,它的默认值实际上是stretch。如果你想要子元素有不同的值,可以使用align-self属性。

编辑3: jsFiddle:https://jsfiddle.net/bv71tms5/2/


125
投票

要使

#outer
的高度基于其内容,并让
#inner
的高度以此为基础,使两个元素绝对定位。

更多详细信息可以在 css height 属性的规范中找到,但本质上,如果

#inner
的高度为
#outer
#outer
必须忽略
auto
高度,除非
#outer
绝对定位。那么
#inner
高度将为0,除非
#inner
本身是绝对定位的。

<style>
    #outer {
        position:absolute; 
        height:auto; width:200px; 
        border: 1px solid red; 
    }
    #inner {
        position:absolute; 
        height:100%; 
        width:20px; 
        border: 1px solid black; 
    }
</style>

<div id='outer'>
    <div id='inner'>
    </div>
    text
</div>

但是...通过绝对定位

#inner
float
设置将被忽略,因此您需要显式选择
#inner
的宽度,并在
#outer
中添加填充以伪造文本换行,我怀疑您想。例如,下面,
#outer
的填充是
#inner
的宽度+3。方便的是(因为重点是让
#inner
高度达到 100%),无需将文本换行到
#inner
下面,所以这看起来就像
#inner
是浮动的。

<style>
    #outer2{
        padding-left: 23px;
        position:absolute; 
        height:auto; 
        width:200px; 
        border: 1px solid red; 
    }
    #inner2{
        left:0;
        position:absolute; 
        height:100%; 
        width:20px; 
        border: 1px solid black; 
   }
</style>

<div id='outer2'>
    <div id='inner2'>
    </div>
    text
</div>

我删除了之前的答案,因为它基于对你的目标太多错误的假设。


77
投票

其实只要父元素定位好,就可以将子元素的高度设置为100%。也就是说,如果您不希望父级处于绝对定位。让我进一步解释一下:

<style>
    #outer2 {
        padding-left: 23px;
        position: relative; 
        height:auto; 
        width:200px; 
        border: 1px solid red; 
    }
    #inner2 {
        left:0;
        position:absolute; 
        height:100%; 
        width:20px; 
        border: 1px solid black; 
    }
</style>

<div id='outer2'>
    <div id='inner2'>
    </div>
</div>

25
投票

只要您不需要支持 IE8 之前的 Internet Explorer 版本,您就可以使用

display: table-cell
来完成此操作:

HTML:

<div class="outer">
    <div class="inner">
        <p>Menu or Whatever</p>
    </div>
    <div class="inner">
        <p>Page contents...</p>
    </div>
</div>

CSS:

.inner {
    display: table-cell;
}

这将强制具有

.inner
类的每个元素占据其父元素的整个高度。


17
投票

我做了一个示例来解决您的问题。

你必须制作一个包装器,使其浮动,然后将你的 div 绝对定位并赋予它 100% 的高度。

HTML

<div class="container">
    <div class="left">"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." </div>
  <div class="right-wrapper">
    <div class="right">"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua." </div>
  </div>
  <div class="clear">&nbsp;</div>
</div>

CSS:

.container {
    width: 100%;
    position:relative;
}
.left {
    width: 50%;
    background-color: rgba(0, 0, 255, 0.6);
    float: left;
}
.right-wrapper {
    width: 48%;
    float: left;
}
.right {
    height: 100%;
    position: absolute;
}

说明: .right div 是绝对定位的。这意味着只有在 CSS 中显式声明宽度或高度属性时,才会根据绝对或相对定位的第一个父 div 来计算其宽度和高度以及顶部和左侧位置;如果没有显式声明,这些属性将根据父容器 (.right-wrapper) 计算。

因此,DIV的100%高度将根据.container最终高度计算,.right位置的最终位置将根据父容器计算。


16
投票

这是实现这一目标的更简单方法:

  1. 设置三个元素的容器(#outer)显示:table
  2. 并设置元素本身(#inner)显示:table-cell
  3. 去除漂浮物。
  4. 成功。
#outer{
    display: table;
}
#inner {
    display: table-cell;
    float: none;
}

感谢@Itay在浮动div,100%高度


6
投票

如果您准备使用一点 jQuery,答案很简单!

$(function() {
    $('.parent').find('.child').css('height', $('.parent').innerHeight());
});

这对于将单个元素浮动到其父元素高度为 100% 的一侧非常有效,而通常会环绕的其他浮动元素则保留在一侧。

希望这对 jQuery 粉丝有所帮助。


3
投票

这是等高网格系统的代码示例。

#outer{
width: 100%;
margin-top: 1rem;
display: flex;
height:auto;
}

上面是外层div的CSS

#inner{
width: 20%;
float: left;
border: 1px solid;
}

上面是内部div

希望这对您有帮助


2
投票

这对我有帮助。

#outer {
    position:relative;
}
#inner {
    position:absolute;
    top:0;
    left:0px;
    right:0px;
    height:100%;
}

更改右:和左:设置首选#内部宽度。


1
投票

当您需要多个子元素具有相同高度时,可以使用 Flexbox 解决类似的情况:

https://css-tricks.com/using-flexbox/

为父元素设置

display: flex;
,为子元素设置
flex: 1;
,它们都将具有相同的高度。


0
投票

针对新绿色浏览器的简单解决方案。 答案是 -webkit-fill-available


#inner {
        min-height: -moz-available;
        min-height: -webkit-fill-available;
        min-height: fill-available;
    }

-1
投票

尝试

#outer{overflow: auto;}

显示更多选项: 如何防止浮动元素的父元素崩溃?

© www.soinside.com 2019 - 2024. All rights reserved.