【问题标题】:Sizing divs to fit page and figuring overflow scroll without specified height调整 div 大小以适应页面并计算没有指定高度的溢出滚动
【发布时间】:2017-09-15 03:44:39
【问题描述】:

我正在努力调整页面上的元素大小。

我有一个专栏,里面有几个部分。整列的最大宽度设置为 80vh。该列内有:

首先是#profilePic,它的高度(和宽度)会根据页面宽度自动调整大小。 其次是#profileInfo 部分,它有以下子部分:

第一个子。是#profileName,高度固定。 第二个子。是#profileAbout,我想填满#profileInfo 部分的剩余空间。如果该部分的内容不适合(并且溢出),我希望它可以滚动。 第三个子。是#profileEmail,高度固定。

现在,由于我不知道#profileInfo 的高度(因为自动调整头像),我无法设置#profileAbout 的最大高度参数,因此overflow-y: auto; 无法申请,所以整列的内容就溢出了。

总而言之,我只是试图使列尽可能短(当“关于”内容很少时),但使其达到屏幕底部的最大值(这是最大高度的位置80vh 来自)并使其余内容可滚动。

<div id="profileLeftPanel" class="card col-md-3">
  <div class="row">

    <!-- Profile pic -->
    <div id="profilePic">
      <img src="<?php echo $_SESSION["someUser"]["profile_pic"] ?>" alt="[profile_pic]">
    </div>

    <div id="profileInfo">

      <!-- Name -->
      <h4 id="profileName"><?php echo $_SESSION["someUser"]["name"] ?></h4>

      <!-- About -->
      <div id="profileAbout">
        <?php echo $_SESSION["someUser"]["about"] ?>
      </div>

      <!-- Email address -->
      <div id="profileEmail"><?php echo $_SESSION["someUser"]["email"] ?></div>
    </div>

  </div>
</div>

这是一个示例,它的外观以及我想要解决的情况是什么:https://jsfiddle.net/mjnoach/zo32ra4f/

【问题讨论】:

  • 您能否提供一个示例作为有效的 sn-p,我们可以更轻松地看到您要做什么。
  • 当然。 jsfiddle.net/muwu667s/1这里有两个需要解决的案例。在左侧,#profileAbout(黄色)应首先扩展以填充页面的其余部分(空白),然后如果还有更多文本要显示,它才应该激活滚动。在右边,里面的内容很少,所以整个列应该缩小到刚好能显示内容,而不是更多。

标签: html css


【解决方案1】:

一个快速而肮脏的建议:

#profileAbout {
  ...
  height: 100%;
  max-height: calc( 500px - 150px - 40px - 40px );
  /* Subtract the heights of the other elements on the page. */
  ...
}

根据您的附加信息,这是另一种解决方案,使用 flexbox 布局。

<style>
    .row {
        background-color: white;
        width: 200px;
        height: 500px;
        display: flex;
        flex-direction: column;
    }
    #profilePic {
        flex: 0 0 auto;
    }
    #profilePic img {
        max-width: 100%;
    }
    #profileInfo {
        flex: 1 1 auto;
        display: flex;
        flex-direction: column;
    }
    #profileName {
        background-color: blueviolet;
        margin: 0;
        flex: 0 0 40px;
    }
    #profileAbout {
        background-color: yellow;
        overflow-y: auto;
        flex: 0 1 auto;
    }
    #profileEmail {
        background-color: blue;
        flex: 0 0 40px;
    }
</style>

<div class="row">
    <div id="profilePic">
        <img src="http://via.placeholder.com/350x150">
    </div>
    <div id="profileInfo">
        <h4 id="profileName"></h4>
        <div id="profileAbout">
            Lorem, ipsum dolor sit amet consectetur adipisicing elit. Minus, nesciunt?
        </div>
        <div id="profileEmail"></div>
    </div>
</div>

要测试行为,您可以

  • 改变.row的高度
  • 更改#profilePic中的占位符图片

【讨论】:

  • 我早就做了,但问题是#profilePic 高度不是恒定的。它可以调整大小并取决于视口大小。
  • 有了这些附加信息,我用另一种可能的解决方案更新了我的答案。
猜你喜欢
  • 2016-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-08
  • 1970-01-01
相关资源
最近更新 更多