# flex实现footer吸底

在fullScreenDialog中实现底部position: fixed的另一种方式, 固定dialog的高度, 设置dialog为display: flex, flex-direction: column, 固定footer的高度, 另外设置其他元素的高度, 使得其能占满整个屏幕, 即可. 在线示例 (opens new window)

# HTML结构

<div class="container">
    <div class="header"></div>
    <div class="content">
        <div class="body">
            xxx
        </div>
        <div class="footer"></div>
    </div>
</div>

# 对应的CSS

html, body {
    height: 100%;
    margin: 0;
}

.container {
    display: flex;
    flex-direction: column;
    height: 500px; /* container的固定高度 */
    border: 1px solid #000; /* 可选,便于查看布局 */
}

.header {
    height: 20px;
    background-color: #ccc; /* 可选 */
}

.content {
    display: flex;
    flex-direction: column;
    flex: 1; /* content占据剩余空间 */
    min-height: 0; /* 允许content在flexbox中调整高度 */
}

.body {
    flex: 1; /* body占据content的可用空间 */
    overflow-y: auto; /* 当内容过多时允许body滚动 */
    background-color: #f1f1f1; /* 可选 */
}

.footer {
    height: 20px;
    background-color: #ccc; /* 可选 */
    flex-shrink: 0; /* 防止footer被挤压,始终保持固定高度 */
}

# 解释:

  • container:与之前相同,使用 flexbox 来实现高度布局。
  • content:flex: 1 确保 content 占据剩余空间,并且 min-height: 0 允许内容按需调整。
  • body:flex: 1 使 body 在 content 中占据最大可用空间,并使用 overflow-y: auto 控制内容的滚动。
  • footer:flex-shrink: 0 确保 footer 始终固定在 content 的底部,不会被压缩。
  • 这样,当 body 的内容不多时,footer 会贴合在底部;当 body 内容超出可见范围时,body 内部会出现滚动条,footer 依然保持在底部不变。