如何在带有 flexbox 的边栏中对齐顶部和底部的项目?

How to align Items at the top and on the bottom in a Sidebar with flexbox?

我基本上想要一个看起来像 Visual Studio 代码中的边栏的边栏。顶部有按钮,底部有 2 个按钮。我制作了一个侧边栏,但我只能将所有项目定位在侧边栏的顶部或底部,但我两者都想要。 我想要 3 个项目在顶部,2 个项目在底部。

这是我的 CSS:

.sidebarleft {
  background-color: rgb(25, 20, 26);
  display: flex;
  flex-direction: column;
  flex: 0 0 50px;
}

.sidebarleft-button {
  display: flex;
  justify-content: center;
  align-items: center;
  width: 100%;
  height: 50px;
  border: none;
  background-color: inherit;
  color: rgb(100, 110, 122);
}

在我的 html 我有这样的东西。

<div class="sidebarleft">
  <button class="sidebarleft-button">A</button>
  <button class="sidebarleft-button">B</button>
  <button class="sidebarleft-button">C</button>

  <button class="sidebarleft-button">Y</button> <-- this Item should be on the bottom -->
  <button class="sidebarleft-button">Z</button> <-- this Item should be on the bottom -->
</div>

我必须以某种方式告诉我的项目它们需要如何对齐,但我不确定。

align-items 属性 与 CSS 布局有关。它会影响元素在 Flexbox 和 Grid 布局中的对齐方式。

.container {
  display: flex;
  align-items: flex-start;
}

你的情况:

.sidebarleft {
  background-color: rgb(25, 20, 26);
  display: flex;
  align-items: flex-start;
  flex-direction: column;
  flex: 0 0 50px;
}

来源: https://css-tricks.com/almanac/properties/a/align-items/

要得到你想要的东西,请将 margin-top: auto; 应用到应该属于“bottom-group”的第一个元素,并将 flex 容器的 justify-content 设置保留在它的位置默认(即没有对该设置的定义)。此外,您需要为 flex 容器定义一个高度,否则默认情况下它只会添加其所有子容器的 height(我将其设置为 100vh,即全视口高度,但调整根据需要):

(注意:在整页视图中查看代码段,否则它的高度不足以显示所需的结果)

html, body {
  margin: 0;
}
.sidebarleft {
  background-color: rgb(25, 20, 26);
  display: flex;
  flex-direction: column;
  flex: 0 0 50px;
  height: 100vh;
}

.sidebarleft-button {
  display: flex;
  justify-content: center;
  align-items: center;
  width: 100%;
  height: 50px;
  border: none;
  background-color: inherit;
  color: rgb(100, 110, 122);
}
.sidebarleft-button:nth-child(4) {
  margin-top: auto;
}
<div class="sidebarleft">
  <button class="sidebarleft-button">A</button>
  <button class="sidebarleft-button">B</button>
  <button class="sidebarleft-button">C</button>

  <button class="sidebarleft-button">Y</button>
  <!-- this Item should be on the bottom -->
  <button class="sidebarleft-button">Z</button>
  <!-- this Item should be on the bottom -->
</div>

这是一个简单的答案,您可以尝试使用 flexbox 来学习。

您可以播放This Game来增强您的信息。

* {
  margin: 0;
  padding: 0;
}

.sidebarleft {
  background-color: rgb(25, 20, 26);
  position: absolute;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  flex: 0 0 50px;
  height: 100%;
  padding-left: 50px;
  padding-right: 50px;
}

.sidebarleft-button {
  display: flex;
  justify-content: center;
  align-items: center;
  width: 100%;
  height: 50px;
  padding: 15px;
  border: none;
  background-color: inherit;
  color: rgb(100, 110, 122);
}
<div class="sidebarleft">
  <div class="sidebar-upper">
    <button class="sidebarleft-button">A</button>
    <button class="sidebarleft-button">B</button>
    <button class="sidebarleft-button">C</button>
  </div>

  <div class="sidebar-bottom">
    <button class="sidebarleft-button">Y</button>
    <button class="sidebarleft-button">Z</button>
  </div>
</div>