高度:<div>中<div>内的<div>为100%,显示:table-cell


69

这是使用display: tabledisplay: table-cellCSS声明的2列标记:

.table {
  display: table;
}

.cell {
  border: 2px solid black;
  vertical-align: top;
  display: table-cell;
}

.container {
  height: 100%;
  border: 2px solid green;
}
<div class="table">
  <div class="cell">
    <p>Text
      <p>Text
        <p>Text
          <p>Text
            <p>Text
              <p>Text
                <p>Text
                  <p>Text
  </div>
  <div class="cell">
    <div class="container">Text</div>
  </div>
</div>

但是.container块不会垂直填充父单元格。这是JsFiddle上的示例:http : //jsfiddle.net/MGRdP/2

我有什么| 我需要的

是)我有的 我需要的

请不要提出JS解决方案。


5
问题是您要使用height: 100%;其父项height设置为的子元素auto,因此要解决此问题,请将其分配height: 100%;给所有父项,如果不行,则要使用一些已修复height的项.cell
Alien先生

3
+1(无JS解决方案)。
约翰

Answers:


53

%用于设置高度或宽度时,请务必同时设置父元素的宽度/高度:

.table {
    display: table;
    height: 100%;
}

.cell {
    border: 2px solid black;
    vertical-align: top;
    display: table-cell;
    height: 100%;
}

.container {
    height: 100%;
    border: 2px solid green;
    -moz-box-sizing: border-box;
}
<div class="table">
    <div class="cell">
        <p>Text
        <p>Text
        <p>Text
        <p>Text
        <p>Text
        <p>Text
        <p>Text
        <p>Text
    </div>
    <div class="cell">
        <div class="container">Text</div>
    </div>
</div>


3
您应该添加-moz-box-sizing: border-box;.container使它也FF正常工作。
伊泰2014年

8
将表格高度更改为1px,它适用于IE11。不过没有什么比这更重要的了。
詹姆斯·南

4
为什么在<IE11中不能正常工作-这太荒谬了。它可以在每个单独的浏览器(移动版和其他版本)上运行-但是IE ..我无法忍受。GAH
JCraine 2015年

2
@Capsule Microsoft放弃支持并不等于人们停止使用它。
Growiel '16

3
该解决方案停止工作在Chrome不幸
瓦雷拉Tumash

37
table{
   height:1px;
}

table > td{
   height:100%;
}

table > td > .inner{
   height:100%;
}

确认从事以下工作:

  • 铬60.0.3112.113,63.0.3239.84
  • Firefox 55.0.3、57.0.1
  • Internet Explorer 11

21
桌子{height:1px; }是关键
Ceferrari

2
在公认的解决方案停止运行之后,该版本实际上与新版本的Chrome兼容。
Valera Tumash

2
荒谬,但完美。谢谢!实际上,我什至不需要td { 100% },只需table.inner样式对我有用。
Scrimothy

但为什么?这是错误还是预期的行为?在firefox 68.5和chrome 79上可以像魅惑一样工作。firefoxtd { 100% }仍需要@Scrimothy 。
卡米尔·本本

@KamilBęben我在FF上没有注意到。谢谢
Scrimothy


17

除了jsFiddle之外,如果您愿意,我可以提供一个丑陋的技巧,以使其跨浏览器(IE11,Chrome,Firefox)。

相反的height:100%;,把height:1em;.cell


您能解释一下为什么将高度:100%更改为高度:1em的原因吗?作品?1em应该只是字母“ m”的高度....有趣的是,我遇到了与上述类似的问题,并且更改为height:1em固定了我的问题。荣誉!注意*我没有做任何其他事情,例如更改位置等...
Wes Duff

1
我不确定它是否丑陋,但可以。希望我知道为什么。
Casey Plummer

7

这正是您想要的:

的HTML

<div class="table">

    <div class="cell">
        <p>Text</p>
        <p>Text</p>
        <p>Text</p>
        <p>Text</p>
        <p>Text</p>
        <p>Text</p>
        <p>Text</p>
        <p>Text</p>
    </div>
    <div class="cell">
        <div class="container">Text</div>
    </div>
</div>

的CSS

.table {
    display: table;
    height:auto;
}

.cell {
    border: 2px solid black; 
    display:table-cell;
    vertical-align:top;
}

.container {
    height: 100%;
    overflow:auto;
    border: 2px solid green;
    -moz-box-sizing: border-box;
}

-moz-box-sizing: border-box;因为.container是在这里:)
欧内斯特·索耶

3
适用于FF,但不适用于IE(11)
fregante

7

将表格单元格位置设为相对,然后将内部div位置设为绝对,顶部/右侧/底部/左侧均设置为0px。

.table-cell {
  display: table-cell;
  position: relative;
}

.inner-div {
  position: absolute;
  top: 0px;
  right: 0px;
  bottom: 0px;
  left: 0px;
}

如果您.inner-div有保证金或内容可能溢出怎么办?
纳曼

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.