【问题标题】:Slide up a "fixed height div" that splits a web page horizontally?向上滑动水平分割网页的“固定高度 div”?
【发布时间】:2017-01-21 02:35:56
【问题描述】:

我需要一个从页面底部向上滑动的框。我将使用该框向新用户显示重要信息。因此,例如,在注册后,该框会立即滑动并显示欢迎信息。

我已经制作了this jsfiddle,这在某种程度上体现了所需的行为。它只是一个从底部向上滑动的 div:

$('.foot').addClass('slide-up', 500, 'easeOutBounce');

但是代码只是举例说明,因为实现不够,原因如下:

  1. 底部框有一个预先确定的500px 高度,因为它最初隐藏在浏览器下方的500px。相反,我只需要盒子高度来适应它的内容。内容会有所不同,甚至会在加载后通过 javascript 进行更改。

  2. 底部框出现在其他元素之上。相反,我想将屏幕一分为二。下半部分的高度与盒子内容所需的高度一样。上半部分的行为就像普通网页一样,即如果内容太多,用户可以向下滚动。为了举例说明所描述的效果,您可以查看this jsfiddle (the code has no relevance though)

如何实现所描述的行为?

【问题讨论】:

  • 与其移动 info-div,不如将其放在 main-div 的底部,然后缩小 main-div - 这将自动“向上移动”info-div。
  • 但这需要我将主 div 缩小一定数量的像素。让底部 div 根据里面的内容来确定它需要多少空间似乎更干净。
  • 正确,您确定 info-div 的大小,然后将 main-div 缩小该数量。
  • 我愿意看到使用这种方法的建议,但我不得不承认我有点怀疑:-)
  • 这只是对你的理由 2 的扩展。所以 body=100% 如果你想显示一个底框“拆分”然后 body+bottom=100% (根据定义),所以 body=100% -底部

标签: javascript jquery html css infobox


【解决方案1】:

在尝试了几种方法之后,我最终得到了一个解决方案,它结合了 Freedomm-n 的 cmets(修改主 div 的大小)和 Nikhil 的答案(使用 flex 容器)中给出的一些想法。你可以在这个jsfiddle看到结果。

对于以下标记:

<div id="divContainer">
    <div id="divTop">
        Main content
    </div>
    <div id="divFooter">
        Footer content
    </div>
</div>

还有这些样式:

html, body, form 
{
    margin: 0;
    padding: 0;
    overflow: hidden;
    height: 100%;
}
#divContainer
{
    width: 100%;
    height: 100%;
}
#divTop
{
    overflow-y: auto;
    padding: 8px;
    height: calc(100vh - 16px); /* Accounts for padding and border (if any) */
}
#divFooter
{
    padding: 12px;
    text-align: center;
    border: 1px solid black;
    border-top-left-radius: 25px;
    border-top-right-radius: 25px;
}
.containerEnd
{
    display: flex;
    flex-direction: column;
}
.topEnd
{
    height: auto;
    flex-grow: 1;
}

这段 Javascript 代码用于为 div 元素设置动画:

function slideUpFooter() {
    var currentHeight = $('#divTop').height();
    var footerHeight = $('#divFooter').outerHeight(true);
    $('#divTop').animate(
        { height: currentHeight - footerHeight },
        2000,
        'easeOutBounce',
        function () {
            $('#divContainer').addClass('containerEnd');
            $('#divTop').addClass('topEnd');
        });
};

动画结束时调用的函数设置flexbox参数,以确保页脚粘在页面底部。

【讨论】:

    【解决方案2】:

    我已更新your Fiddle。详情请看下文。

    .foot 部分不需要使用position: fixed,您可以使用position: relative 代替。由于我注意到您使用的是 flex,因此我冒昧地使用它来解决此问题。

    所做的更改

    • 首先我建议添加一个 div 容器,给一个类名说 - container
    • 创建容器display: flex并将默认方向更改为flex-direction: column
    • 现在,由于您希望 main-content 可以根据其内容滚动,您需要先设置此部分的高度 使用 height: 200px; 然后使其滚动-能够使用overflow-y: auto;

    如果您有任何疑问,请告诉我。

    【讨论】:

    • 您确定链接到最新的 jsfiddle 迭代吗?底部 div 向上滑动,仍然在顶部 div 之上。而不是顶部 div 是可滚动的,而是全部。
    • 我添加的 cmets 没有执行它们之后的代码。诡异的 !现在检查。添加更多内容以查看滚动的显示方式。仅供参考:“整个部分滚动”是 jsFiddle 的滚动而不是代码 :-)
    • 谢谢。但是,似乎顶部 div 现在以假设底部 div 将向上滑动并占用空间的高度开始。这不是一个可行的解决方案,因为首先它会在页面加载后创建一个空白点。其次,如果在页面加载后底部 div 发生变化,顶部 div 将保持相同的高度。我需要顶部 div 最初具有全高,并随着底部 div 的变化调整高度。
    • 嗯,那么你的章节完全不同,基本上你想要“在页面加载时动态设置 div 的高度而不实际知道 div 的高度”? :-/
    猜你喜欢
    • 2018-02-03
    • 2018-06-21
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多