gpt4 book ai didi

html - 高度为 100% 且溢出的元素

转载 作者:太空狗 更新时间:2023-10-29 15:51:01 24 4
gpt4 key购买 nike

我基本上需要实现的是让一个元素(div、span、table 等)占用其父级高度的 100%,并在其内容更高时显示滚动条。

问题是,在 height:100%; 下只有 chrome 和 IE 可以正常工作溢出:自动;。标准中的 Firefox、Opera 和 IE(任何 IE 7+,任何“标准”)只是忽略溢出并将 html 元素拉伸(stretch)到父大小以下。如果我设置固定高度它可以工作,但我无法在渲染前确定可用高度,有多个可能的值。

简化示例(jsFiddle for this):

<body>
<div id="parent">
<table id='container'>
<tr>
<td>
<div id='element-in-question'>
<!--Content long enough to stretch the div-->
</div>
</td>
</tr>
<tr>
<td id='footer-cell'>
<div id='footer'>I'm footer<div>
</td>
</tr>
</table>
</div>
</body>

CSS:

#parent { height:500px; width:500px; position:absolute; }
#container { height: 100%; width:100%; }
#element-in-question { height:100%; width:100%; overflow: auto; }
#footer-cell { height:30px;}
#footer { height: 30px; }

在真实的应用程序中,所有这些东西都在 iframe 中运行,表格用于呈现页眉和页脚等。请不要建议停止使用表格,它是遗留应用程序,有 100 多个地方需要注意。仅 CSS 解决方案将是理想的。

还有一点:它应该在 Chrome、IE10 标准模式下工作。不支持 FF、Opera 和 Safari,IE9 及以下版本处理不同。

更新:大约有十个不同高度的页脚,理想情况下解决方案不应依赖于固定的页脚高度。

最佳答案

给你:

Updated fiddle.

问题是 height: 100%; 将填充下一个定义的容器。无论出于何种原因,表都不被视为用于该目的的有效容器。因此,我们需要做的是利用表格布局的一些古怪之处。

position: absolute;
top:5px; left:5px;
right: 5px;
bottom: 40px;
overflow: auto;
border: 1px solid green;
background-color: #eee;

不需要在 td 上进行相对定位。不要问我为什么,也许有人比我更有见识。

无论如何,我们可以强制它扩展以填充一定量的空间,同时仍然允许:

  1. 页脚可见。
  2. 要存在的填充(即使它不是技术上填充。)
  3. 此解决方案适用于跨浏览器环境。

真的希望这对您有所帮助;如果没有,我会非常乐意再试一次。


更新

你说 javascript 不是你想要的方式,但这里有一个使用 jQuery 的简短解决方案,它实际上可以解决问题:

Updated Fiddle

$('td > div').each(function() {
var t = $(this);
var text = t.html();
t.hide();
t.height(t.parent().height());
t.show(text);
});

为什么会这样:

div 需要其父级在 100% 高度起作用之前具有定义的高度,但是这不是您的选择,因为您已经声明这是所有动态内容。没问题。我们只需要 jQuery 在浏览器渲染后将计算出的高度推送到 div。很简单,对吧?

好吧,没那么快。 Div 并不意味着受表格单元格的限制,至少不理想。我们已经在 td 中有一些东西可以作为一个逻辑的、独立的容器,而 div 并不关心 td 是什么高度是指它是否已经有大量内容溢出其边界。当我们去查询那个 td 的高度时,无论它实际上 是什么,它都会报告它比它包含的元素大。所以,如果你在注释掉我们清空 div 的行后查看 fiddle ,你会看到 td 错误地报告自己接近 900 像素高.

那我们该怎么办?

好吧,我们把那些内容从 div 中拿走。现在它只是一个外壳,在任何情况下都会比它的容器小。这意味着 td 不会在我们查询时 撒谎 误报其大小,因为它肯定包含其子项。

一旦我们从 TD 得到真相,我们就告诉 div 它的父级报告的大小是它需要的大小,并将它的内容还给它。

瞧。您现在有一个 div 实际上尊重其父元素。如果只有真正的 child 那么容易就好了。

关于html - 高度为 100% 且溢出的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15257467/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com