【问题标题】:IE - using 100% height within table-rowIE - 在表格行中使用 100% 高度
【发布时间】:2013-10-06 21:54:20
【问题描述】:

我正在使用最后一个表格行高度为 100% 的 css 表格 - 以填充剩余的高度。

FIDDLE

这适用于我的跨浏览器(包括 IE)。

但是,如果我在最后一个表行中添加一些具有固定高度的 div(这是动态内容 - 我不知道其中有多少),最后一个 div 的高度为:100% - 按顺序填满最后一个表格行。 - 像这样:

FIDDLE-

现在这在 IE 中不起作用(甚至 IE10)

我必须做什么才能在 IE 中完成这项工作?

(编辑:与 cmets 中的正确指针一样:它在任何浏览器中都不起作用 - 尽管在 Chrome 和 firefox 中它看起来 像它一样工作 - 高度:100% 在第三行的最后一个 div 上并没有填满剩余的高度,而是占据了 row3 的完整高度......

所以我尝试在第 3 行使用表格行:- FIDDLE... 现在 this 在其他浏览器中有效,但在 IE 中仍然无效!)

标记

<div class="table">
    <div class="row row1">row1</div>
    <div class="row row2">row2</div>
    <div class="row row3">
        <div class="row3a">row3a</div>
        <div class="row3b">row3b</div>
        <div class="row3c">row3c</div> <!-- in IE this doesn't fill the last row -->
    </div>
</div>

CSS

.table
{
    display: table;
    width: 600px;
    height: 300px;
}
.row
{
    display: table-row;
}
.row1
{
    height: 50px;
    background: pink;
}
.row2
{
    height: 100px;
    background: orange;
}
.row3
{
    height: 100%;
    background: yellow;
}
.row3a
{
    height: 30px;
    background: purple;
}
.row3b
{
    height: 60px;
    background: aqua;
}
.row3c
{
    height: 100%;
    background: brown;
}

【问题讨论】:

  • 对 row1、row2 和 row3 特定规则使用 id。
  • @ArunAravind 我这样做是为了为每个元素显示不同的颜色,以便您可以看到发生了什么
  • 我一直发现,如果你想跨浏览器兼容 CSS 表格,你实际上应该模拟整个表格。也就是说,使用嵌套 div 三层深,分别为 display:tabledisplay:table-rowdisplay:table-cell
  • 您可以在row3 中添加另一个包装器吗? (在行和实际内容之间)
  • @avrahamcool - 是的,虽然我宁愿不这样做。

标签: html css css-tables


【解决方案1】:

纯 CSS,跨浏览器解决方案,不使用 CSS 表格布局。

如果可以的话,我实际上建议您使用 CSS 表格布局。 (我不知道你为什么不想要它在你的行中,它完全没问题。) 或者 flexbox 布局,虽然它还没有在所有浏览器中正确实现.. --我刚刚在 cmets 中读到它在 IE 中对您不起作用,好吧:我的解决方案确实如此......即使使用 IE8。

Working Fiddle

HTML:我正在使用我在评论中提到的额外包装器。

<div class="table">
    <div class="row1">row1</div>
    <div class="row2">row2</div>
    <div class="row3">
        <div class="Wrapper">
            <div class="row3a">row3a</div>
            <div class="row3b">row3b</div>
            <div class="row3c">row3c</div>
        </div>
    </div>
</div>

CSS:(大部分用于背景)

.table
{
    width: 600px;
    height: 900px;
}
.row1
{
    height: 50px;
    background: pink;
}
.row2
{
    height: 100px;
    background: orange;
}
.row3
{
    background: yellow;
    position: relative;
}

.row3a
{
    height: 30px;
    background: purple;
}
.row3b
{
    height: 60px;
    background: aqua;
}
.row3c
{
    background: brown;
}

.Wrapper
{
    position: absolute;
    width: 100%;
    height: 100%;
}

.table:before, .Wrapper:before
{
    content: '';
    height: 100%;
    float: left;
}

.row3:after, .row3c:after
{
    content: '';
    display: block;
    clear: left;
}

【讨论】:

  • 最后一行没有填满表格剩余高度的 100%。
  • @BernardV 是的。 (查看 CSS 中的表定义)
  • @avrahamcool:我的错,它只在 table { height: 100%; } 这就是我想要实现的目标。
  • @BernardV 再次......你误会了。看看这个Fiddle
  • 对于投反对票的人,愿意分享您对原因的看法吗?
【解决方案2】:

IE 为您提供您想要的完美结果。您将其呈现为表格行。您无需为最后一行设置特定高度即可填充剩余空间。

将高度设置为 100% 实际上是错误的; 这里 100% 表示 row3 的实际高度,chrome 会按照您所写的方式呈现它。

即 row3c 溢出其父 row3。

因为您为剩余的行指定了像素高度,所以它不会被填充。您需要指定 所有人的百分比高度( row3a -> height: 20%, row3b -> height: 30%, row3c -> height: 50%)

会有用的

【讨论】:

  • 但我希望我的第三行包含固定高度的元素和最后一个元素来填充剩余高度
  • 在这种情况下,你能做的最好的事情就是避免使用桌子。样式 div 元素以获得网格的外观。永远不要使用 HTML 表格进行页面布局。仅将它们用于表格内容。表格取消了设计的灵活性。您可以制作自己的组件并随时重复使用它们。花一些时间,这将对您将来有所帮助。
  • 我上面提到的修复在 IE 中不起作用,因为 IE 在渲染表方面存在问题。他们直到 IE 10 才解决了这个问题。所以去寻找替代品。您可以在不使用表格或 display: table 的情况下制作纯 css 网格。
【解决方案3】:

您将高度设置为 300px,这是小提琴 http://jsfiddle.net/yKPq3/11/ and assuming you want table to be filled 300px, you need to change .row3 to height:150px and .row3c to height:60px

【讨论】:

  • 谢谢,但我的内容是动态的。我不知道会有多少个div。我需要的是 last 元素来填充剩余的高度
猜你喜欢
  • 2015-05-24
  • 2014-10-06
  • 2016-12-14
  • 2015-03-28
  • 1970-01-01
  • 2015-02-07
  • 2013-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多