📕 实例:上下固定中间可滚

在网上很容易可以搜到固定头部或者固定底部,另外一部分可根据内容滚动的代码,且实现的方式也有很多。而现在,我们要聊的是使用 flex 方式布局,实现上下高度不定,中间高度也不定,且中间部分内容增加很多之后可以滚动,如果中间部分内容不多,上下两个部分保持在浏览器顶部和底部

也不知道这个描述是否能够明白,如果不明白也没关系,我们一点点来,相信到最后就能明白了。如果已经明白这句话的意思,那就可以先想想这个效果应该怎么实现吧。如果已经知道这个效果怎么实现了,那……那就跳过这个章节吧。

首先第一步,我们先实现一个撑满浏览器的 flex 容器,且里面三个 flex 元素分别占据上中下的位置。

/*
  file: flex_0075.css
  上中下三行布局效果
*/
html,
body {
  /* 设置 html 和 body 的高度为 100%,并将 margin 重置为 0 */
  height: 100%;
  overflow: hidden;
  margin: 0;
}
.demo {
  /* demo 作为 body 的子元素,高度为 100% 时,将会撑满整个窗口 */
  height: 100%;
  /* 将 item 的排列方向改为列的形式 */
  flex-direction: column;
  border: 1px solid #000;
}
.item:nth-child(n+4) {
  /* 从第 4 个元素开始隐藏,目前不需要 */
  display: none;
}

上中下的布局有了,不过第 3 个 item 并没有置底。

.item_2 {
  flex: 100%;
}

加上这个,我们就得到一个看似满足需求的界面效果了。

为什么说只是一个看似满足需求的呢,我们随便加点内容就会明白了。

这个时候由于我们在 body 中设置了 overflow: hidden;,所以,无论怎么样,都是看不到更多的内容了。在本章节开始的时候,就提到了一点,中间的内容是可以滚动的。所以,这个看似满足求的效果,我们还差一个满足滚动的需求。

.item_2 {
  flex: 100%;
  overflow: auto;
}

现在这样就可以让中间的那个部分滚起来了。突然有种错觉,flex 弹性布局真的好赞啊。