CSS 布局 - 最后一个元素占满剩余可用高度

本贴最后更新于 1985 天前,其中的信息可能已经物是人非

2019-07-15

描述

在当前屏幕中,让最后一个元素占满可用的剩余空间,当窗口大小变化时也需如此。

HTML

<div class="container">
  <div>Div 1</div>
  <div>Div 2</div>
  <div>Div 3</div>
</div>

CSS

html,
body {
  height: 100%;
  margin: 0;
}
.container {
  height: 100%;
  display: flex;
  flex-direction: column;
}
.container > div:last-child {
  background-color: tomato;
  flex: 1;
}

Demo

说明

  1. height: 100% 设置容器高度为屏幕高度
  2. display: flex 启用 flex 盒子模型
  3. flex-direction: column 设置 flex 盒子模型中的子元素按照从上到下的方向进行排列
  4. flex-grow: 1 flex 盒子模型内的该元素将会占据父容器中剩余的空间
  5. 父元素必须有一个设定的高度
  6. flex-grow: 1 可以应用到第一个或者第二个或者任意一个子元素上,被设置了该属性的子元素将会占据所有剩余的可用空间

浏览器支持

支持率:99.5%
支持情况:https://caniuse.com/#feat=flexbox
⚠️:进行所有支持时需要提供前缀

返回总目录

每天 30 秒系列之 CSS

  • 30Seconds

    📙 前端知识精选集,包含 HTML、CSS、JavaScript、React、Node、安全等方面,每天仅需 30 秒。

    • 精选常见面试题,帮助您准备下一次面试
    • 精选常见交互,帮助您拥有简洁酷炫的站点
    • 精选有用的 React 片段,帮助你获取最佳实践
    • 精选常见代码集,帮助您提高打码效率
    • 整理前端界的最新资讯,邀您一同探索新世界
    488 引用 • 384 回帖
  • CSS

    CSS(Cascading Style Sheet)“层叠样式表”是用于控制网页样式并允许将样式信息与网页内容分离的一种标记性语言。

    196 引用 • 540 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • InkDP

    如果不用弹性盒子能不能实现呢huaji

    1 回复
  • Vanessa

    js 实现算么?

    1 回复
  • InkDP

    用 js 就没有灵魂了

  • InkDP

    position 扯,属于骚操作系列

    1 回复
  • Vanessa

    扯 字用的好形象呀

    1 回复
  • InkDP

    以前做前端的时候不知道弹性盒子,就想了这个办法,我管他叫拉扯布局

  • iTanken

    V 姐换了头像差点没认出来 😆

  • iTanken

    只看到 css 里有一个 flex: 1;,第四点和第六点的 flex-grow: 1 没看懂呢

    1 回复
  • Vanessa 2 1 赞同

    flex 属性是 flex-growflex-shrink 和 flex-basis 的简写,默认值为 0 1 auto

    • flex-grow 属性定义项目的放大比例,默认为 0,即如果存在剩余空间,也不放大。如果所有项目的 flex-grow 属性都为 1,则它们将等分剩余空间(如果有的话)。如果一个项目的 flex-grow 属性为 2,其他项目都为 1,则前者占据的剩余空间将比其他项多一倍。
    • flex-shrink 属性定义了项目的缩小比例,默认为 1,即如果空间不足,该项目将缩小。如果所有项目的 flex-shrink 属性都为 1,当空间不足时,都将等比例缩小。如果一个项目的 flex-shrink 属性为 0,其他项目都为 1,则空间不足时,前者不缩小。
    • flex-basis 属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为 auto,即项目的本来大小。它可以设为跟 widthheight 属性一样的值(比如 350px),则项目将占据固定空间。
    1 回复
  • konglingwen94

    flex 属性讲解的很到位,受教了,感谢!

请输入回帖内容 ...
Vanessa
我们终此一生,就是要摆脱他人的期待,找到真正的自己。 昆明