【问题标题】:How to automatically scale down a 100% div without showing browser vertical scrollbars?如何在不显示浏览器垂直滚动条的情况下自动缩小 100% div?
【发布时间】:2011-05-16 23:17:54
【问题描述】:

我有一个三行表。我有 1 个主要的#container div(高度 100%),里面是一个有 3 行的表。第一行和最后一行具有固定大小的内容。第二行是一个高度为 100% 的 #content div 和溢出:自动。 (实际上表格有更多的行,页面有更多的 div,但为了清楚起见,我为这个问题把它缩小了)。

如果#content 中的内容过多,则应在该div 的内容旁边显示一个垂直滚动条。但是,浏览器窗口本身会出现一个垂直滚动条。但是,当我将#content div 设置为固定大小时,该垂直滚动条确实出现在正确的位置。

我一定是做错了什么,或者可能误解了某些东西:) 有什么想法吗?也许那里有 jquery/javascript 可以监视页面并在加载/调整浏览器大小时缩小特定的 div?

编辑:我刚刚创建了一个小例子:http://wierdaonline.com/softest.html

在理想情况下,整个事物(表格)应该始终在浏览器窗口中可见,除了#content div 之外没有任何窗口滚动条。

【问题讨论】:

  • 您有示例页面来说明问题吗?如果我理解正确,您有一个高度为 100% 的 div,然后在多个 div 中,其中一个是 100% 高度?这似乎没有加起来。
  • 不幸的是,这不是一个例子。但是您可以将其视为具有 3 行表格的页面。第一个有一个标题(一行文本),第二个有一个高度为 100% 的 div,其中包含大量内容,第三行有一个文本行页脚。基本上,整个内容应该始终在浏览器窗口中可见,因此当您调整浏览器大小时,只有带有#content div 的第二行会调整大小,而第一行和第三行仍然可见。就像手风琴一样,当您将其推入自身时,各个袋子会放气,除了正面和背面。

标签: javascript jquery css


【解决方案1】:

在不使用表格和使用固定位置的情况下创建固定页眉和页脚要容易得多:

#header
{
    position: fixed;
    top: 0;
    height: 20px;
}

#middle
{
    position: fixed;
    top: 20px;
    bottom: 20px;
    overflow: auto;
}

#footer
{
    position: fixed;
    bottom: 0;
    height: 20px;
}

【讨论】:

  • 不幸的是,不使用表格是不可行的。我的应用程序目前基于表格(表格中有很多行和表格)。我以前尝试过摆脱所有的桌子,但到目前为止还没有成功。我猜摆脱桌子是一个长期的项目。没有办法让它与桌子和所有东西一起工作吗?很好的例子顺便说一句@fudgey。
【解决方案2】:

在 div 中设置overflow: scroll。你不应该为此需要 Javascript。

【讨论】:

  • 不,总是显示滚动条,同时仍然让内容超出浏览器窗口,从而也显示浏览器窗口滚动条。主要 (#maincontainer) 内容应始终适合浏览器窗口,因此如果浏览器太小而无法显示所有内容,则只有 #content div 应该有滚动条。
【解决方案3】:

#container 100% 是页面高度的 100%,可以大于窗口高度。将 html 和正文高度设置为 100%(=窗口的 100%)可能会有所帮助,具体取决于您要实现的目标。

【讨论】:

  • 我只是尝试设置 html, body{ height:100%;} 但这没有任何区别。
  • 另外,您可能需要将表格设置为 100% 高度,然后将第一行和最后一行设置为 1px 高度,将中间行设置为空。这将控制表格。
【解决方案4】:

编辑:这些更改应该适用于高度,如果您愿意,可以对宽度进行类似的操作。

javascript:

window.onresize = function() {
    var tehdiv = document.getElementById('content2');
    if($(window).height() < 100) { tehdiv.height = 50; }
    else if($(window).height() > 2000) { tehdiv.height = '100%'; }
    else { tehdiv.height = ($(window).height()/2);}
};

内容 div 的表格:

<td valign='top' id='content2'>

这样的东西有用吗?

window.onresize = function() {
    var minh = 50;
    var minw = 50;
    var tehh = (window.height/2);
    var tehw = (window.width/2);
    var tehdiv = document.getElementById('yourdiv');
    tehdiv.height = (tehh > minh)? tehh : minh;
    tehdiv.width = (tehw > minw)? tehw : minw;
};

这将使其缩放到窗口大小的一半,只要它可以大于 50。您还可以将最小值更改为最大值并使其在该点执行 tehdiv.height = 100%。

【讨论】:

  • 不幸的是,该功能在我的页面上没有做任何事情。
  • @Jason 是的,我知道这不是好的编码。考虑到它有多小,它并不意味着好,甚至不易于阅读,只是一个关于他如何做到这一点的想法。我假设提问者知道足够多的 js 来重写代码,因为我不倾向于为他们编写人们的代码。随意将其修复为您的规格。
  • @Jeroen W 尝试制作小提琴和/或发布一些示例代码。这将使我们更容易为您提供帮助。
  • 示例添加到主帖。
  • 用一个在小提琴中工作的新版本进行了编辑。您可能想要使用 $(window).height() - (无论您的表格的其余部分有多大)而不是除以 2 以使表格仍然填满屏幕。
【解决方案5】:

好吧,既然你别无选择,只能使用表格,我修改了 HTML,但实际上保留了与我在上面评论中发布的演示相同的 CSS,check it out here - 我发现的唯一问题是在 IE7 中页眉和页脚表格单元格没有 100% 跨越的地方:

CSS

#header, #footer {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    height: 20px;
    border: #000 1px solid;
    margin: 5px;
}
#footer {
    top: auto;
    bottom: 0;
}
#content {
    position: absolute;
    top: 25px;
    left: 0;
    bottom: 25px;
    right: 0;
    overflow-y: auto;
    background: #ddd;
    margin: 5px;
}

HTML

<table id="page">
    <thead>
        <tr><td id="header">Header</td></tr>
    </thead>
    <tfoot>
        <tr><td id="footer">Footer</td></tr>
    </tfoot>
    <tbody>
        <tr><td><div id="content">Content goes here</div></td></tr>
    </tbody>
</table>

如果您有时间切换 HTML,最好还是not use tables

【讨论】:

  • 感谢您提供此示例。它适用于表:) 我试图在我自己的应用程序中使用许多嵌套表和行来实现它,但没有成功。看来这是可能的(你证明了这一点),但不是我的设置。我可能很快就会再次尝试将其全部转换为无表设置。还不知道怎么做,因为它以前惨败。
  • 确保你有theadtfoottbody在里面,并且tfoottbody之前...最好也添加ID 到 tr 而不是 td。
  • 我知道你的意思,但是我有很多嵌套的表和行以及它们之间混合的 div。我无法知道每个元素的确切大小。 (就像你对页眉/页脚所做的那样,并从内容 div 中减去它)。我可以展示应用程序,但我不想在这里发布网址。
猜你喜欢
  • 2014-08-19
  • 2011-08-17
  • 2011-05-02
  • 2010-10-24
  • 1970-01-01
  • 2016-11-27
  • 2016-03-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多