flexbox 可以帮助你简化创建基本和高级布局的过程。使用 CSS flexbox 或 grid 创建侧边和底部导航菜单非常简单。

这些布局非常流行,它们几乎出现在网络上的任何地方。例如,查看 Twitter 的侧边栏,它激发了我写作本文的灵感:

Web-capture_25-9-2021_181148_twitter.com-1

通常,要使用 CSS 创建固定菜单,你必须使用值为 fixedstickyposition 属性。

这种方法的问题在于它将整个元素从文档流中取出,就像它根本不存在一样。对于初学者,有时甚至是专家来说,这是 CSS 中令人沮丧的时刻之一。

在本教程中,你将学习如何使用 CSS flexbox 创建固定侧边栏和固定底部导航菜单。我将在 Codepen 上托管所有代码和 demo,以便你可以看到我们将构建的内容的实时预览。

开始

要使用 Flexbox 创建固定元素,你首先需要禁用要固定的项目的父元素上的滚动。在我们的例子中,父元素是 body

body {
    overflow: hidden;
    height: 100vh;
}

HTML

我们将使用 HTML 创建一个包含在叫作 wrapperdiv 中的两列布局。

<body>
<div class="wrapper">
  <aside>
    <ul>
      <li>Item</li>
      ...
    </ul>
  </aside>
  <main>
    <div class="wrapper_inner">
      <p>
        ...  
       </p>
     </div>
   </main>
 </div>
</body>

CSS

为了使侧边栏固定,我们只需要禁用父级 body 上的滚动,并使 main 元素可滚动。

body {
  overflow: hidden;
  height: 100vh;
}
main {
  overflow-y: auto;
}
aside {
  flex: 1 0 10%;
}
.wrapper {
  display: flex;
  height: 100%;
}

让我们稍微分解一下这段代码。

首先,我们使 body 不可滚动并使用以下代码隐藏滚动条:

body {
    overflow: hidden;
}

然后使用 overflow: auto,我们将滚动条添加回 main 元素。

最后,我们创建了一个 flex 容器 wrapper,并使用 height: 100% 给它一个等于父级的高度:

.wrapper {
    display: flex;
    height: 100%;
}

如何使其适合移动设备

但是在宽度小于 500px 的移动屏幕上,我们希望侧边栏固定在底部或顶部,视情况而定。为此,你将添加以下 CSS:

@media (max-width: 500px) {
  .wrapper {
    flex-direction: column-reverse;
  }
  ul {
    display: flex;
    align-items: center;
    justify-content: space-between;
  }
  
}

在移动屏幕上,我们将 flex 的方向更改为列而不是行。然后为了使其固定到底部,我们添加以下内容:

.wrapper {
    flex-direction: column-reverse;
}

另一方面,要使其固定在顶部,你只需删除 column-reverse,并将其更改为 column,如下所示:

.wrapper {
    flex-direction: column;
}

你可以在下面使用 Codepen 创建的示例中看到实时预览。你可以调整窗口大小以查看固定的底部导航:

总结

在本教程中,你学习了如何使用 flexbox 创建响应式固定侧边栏。以下是一些需要记住的重要步骤:

  • 要使用 flexbox 固定元素,你必须使用 overflow: hidden 禁用父元素上的滚动
  • 然后你需要创建一个高度等于父级的 flex 容器
  • overflow: auto 添加到你不想固定的元素

就是这样!

如果你发现本教程有用,或者你有任何疑问,请随时在 Twitter 上与我联系(不要忘记点击关注按钮)@sprucekhalifa

祝你编码愉快!

原文:CSS Flexbox Tutorial – How to Build a Fixed Side and Bottom Navbar,作者:Spruce Emmanuel