可滚动 div 和固定底部 div 如何在包装器内动态更改高度?

Posted

技术标签:

【中文标题】可滚动 div 和固定底部 div 如何在包装器内动态更改高度?【英文标题】:How can a scrollable div and a fixed bottom div dynamically change height inside a wrapper? 【发布时间】:2014-12-31 01:11:25 【问题描述】:

我正在尝试在包装 div 中堆叠 2 个 div。我需要一个设置高度的 div 来保持在包装 div 的 bottom 上,并且我需要 top div 来滚动。我无法将它们分开,因为我希望包装器随着顶部 div 中的内容一起增长,直到它对于屏幕来说太大,然后开始滚动而不隐藏底部 div。

这是example。

我几乎可以弄清楚这一点,但是 bottom div 与 content div 中的最后一点信息重叠。有没有办法改变 top div 的高度,以便为 bottom div 留出空间,无论它的高度如何?

html

<div class="wrapper">
  <div class="top">
    <div class="content">
      // Dynamically added information that
      // grows the height of div.content
    </div>
  </div>
  <div class="bottom">
    // Input box or static button panel
  </div>
</div>

SCSS

.wrapper 
  max-height: 100vh;
  position: relative;
  overflow: hidden;

  .top 
    max-height: inherit;
    overflow: hidden;

    .content 
      max-height: inherit;
      overflow-y: scroll;
    
  
  .bottom 
    position: absolute;
    bottom: 0;
  

【问题讨论】:

【参考方案1】:

您可以在包装器中添加padding-bottom:150px(150px 是底部 div 的高度)。喜欢here。这将为底部 div 提供足够的空间。

【讨论】:

我想让底部的 div 改变大小。如果我要添加填充,我将不得不使用 jquery 来动态更改填充值。有没有更简单的方法来堆叠两个 div? 底部 div 的大小如何变化?是根据内容在每个页面上有所不同,还是在页面上动态变化?无论哪种方式,您都可能需要用户端脚本。【参考方案2】:

如果不向任何带有内容的 div 添加内边距或边距底部,则无法进行。 这是代码:

.wrapper 
  max-height: 100vh;
  position: relative;
  overflow: auto;

  .top 
    padding-bottom:150px;
  
  .bottom 
    position: fixed;
    bottom: 0;
    left:0;
    width:100%;
    height:150px;
    background-color:red;
  

您实际上不需要额外的 div “.content”。 div ".top" 的填充是等于底部固定 div 的高度的值。如果底部固定 div 的动态高度,您需要使用 jQuery 更改顶部 div 的填充值(没有其他选择)。但是对于内容动态的变化,不需要添加任何jQuery。

希望这会有所帮助。

【讨论】:

【参考方案3】:

我稍微简化了一下,得到了我认为你想要的:

    <div class="wrapper">
        <div class="top">
            // Dynamically added information that
            // grows the height of div.content
        </div>
        <div class="bottom">
            // Input box or static button panel
        </div>
   </div>

那么对于css:

    body
        height: 100vh;
        margin: 0;
    
    .wrapper 
        overflow: hidden;
        width: 100%;
    
    .content 
        width: 100%;
        max-height: calc(100vh - 150px);
        overflow-y: scroll;
    
    .bottom 
        height:150px;
        width:100%;
        background: #f00;
    

查看 jsfiddle here

【讨论】:

【参考方案4】:

这并不难。只需要使用计算功能:

Fiddle

您可以通过在变量中设置值来保持包装器动态,然后放弃您的 max-height: inherit 规则。

这里是相关的SCSS

$box_height: 100vh;
.wrapper 
    height: $box_height;
    max-height: $box_height;
    position: relative;
    overflow: hidden;
    
    .top 
        max-height: unquote("calc(" + $box_height + " - 150px)");
        overflow: hidden;
        
        .content 
            max-height: unquote("calc(" + $box_height + " - 150px)");
            overflow-y: scroll;
        
    

【讨论】:

以上是关于可滚动 div 和固定底部 div 如何在包装器内动态更改高度?的主要内容,如果未能解决你的问题,请参考以下文章

HTML里CSS样式如何写DIV固定在底部,随滚动而滚动呢?

当用户滚动到页面的最底部时淡入/淡出固定位置 div

html 里面 div 滚动条保持在底部 及 div 位置固定。

设置一个div网页滚动时,使其固定在头部,当页面滚动到距离头部300px时,隐藏该div,小于30

如何让DIV固定在页面而不随着滚动条随意滚动

jQuery 可拖放和可滚动的 div