完整的 Flexbox CSS 指南

正在学习如何使用 Flexbox?想知道如何用 CSS 实现 Flexbox 布局?不了解 Flexbox 的工作原理?欢迎来到完整的 Flexbox CSS 指南!

FlexboxFlexible Box Layout 的缩写。它是 CSS 编程语言的一项功能。但这些细节我们并不关心。最重要的是要理解如何使用它。

要理解Flexbox的工作原理如何使用它,我们需要理解一切都依赖于的基本原则:轴。

但在开始之前,这里是这本Flexbox完整指南的目录:

元素周期表

Table of Contents

Flexbox 来自哪里?

Flexbox 起源于 W3C(负责制定未来网络标准的联盟)于 2009 年发布的首个公开草案。直到 4 年后的 2012 年,Flexbox 才晋升为“候选推荐标准”。

自此之后,Flexbox迅速成为全球最常用的CSS布局方法之一。这一新特性也在2013年被《Net》杂志评为“最佳新网络技术”。

为什么要使用Flexbox?

在2012年之前,开发者用于构建网站结构的手段非常有限。

排列元素仅有两种方式:

  • 使用浮动(float)
  • 使用inline-block元素

而这种方式并不总是令人愉快的。

幸运的是,随着Flexbox的出现,一切都变得简单得多:在页面中央居中或简单地将两个元素并排放置都变得异常轻松。

如何使用 Flexbox?

使用 Flexbox 只需理解一个 简单原则。一切围绕以下两点展开:

  • 一个 容器(父元素)
  • 以及 子元素

让我们从一个基本示例开始。以下是经典的 HTML 代码:

HTML

<div id="container">
    <div class="child"></div>
    <div class="child"></div>
    <div class="child"></div>
</div>

这段 HTML 代码没什么新奇之处。我们有一个父元素,其 ID 为 container,该父元素包含三个具有类名 child 的子元素。

让我们添加一些颜色,以便更清楚地看到不同元素。接下来处理 CSS:

CSS

.child {
  background-color: blue;
  padding: 100px;
  border-radius: 50px;
}

因此我们得到以下结果:

图0:完整的 Flexbox CSS 指南

Flexbox 示例

我们的目标很简单:我们希望将三个元素并排排列

将元素并排排列

要将元素并排排列,我们需要使用一个新属性

这个新属性将允许我们在浏览器中启用 Flexbox。它应用于父元素

CSS

#container {
    display: flex;
}

以下是结果:

图1:完整的 Flexbox CSS 指南

display: flex 属性的结果

仅通过一个属性,我们就将元素并排对齐了!过去,我们可能需要使用 inline-block 等属性。这将变得冗长且复杂。而使用 Flexbox,则快速

元素间距

我们的元素现在并排排列,但它们仍然太过靠近。

我们可以使用 margin 属性调整外部边距,但还有更简单的方法。

那么,如何使用 Flexbox CSS 调整元素间距?感谢 gap 属性!

以下是我们要添加到 container 元素中的内容:

CSS

#container {
  display: flex;
  gap: 10px;
}

以下是 Flexbox 中 gap 属性的效果:

图2:完整的 Flexbox CSS 指南

使用 Flexbox 的间距属性示例

这样看起来更漂亮,对吧? 😬

在本指南的剩余部分中,我们将对 Flexbox CSS 中的元素进行 编号

以下是我们的全新 HTML 代码:

HTML

<div id="container">
    <div class="child">1</div>
    <div class="child">2</div>
    <div class="child">3</div>
</div>

我们还为 .child 类添加了 color: white 属性,以获得以下效果:

图3:完整的 Flexbox CSS 指南

带编号的 Flexbox 元素示例

现在我们的元素已经 编号,让我们一起看看 如何使用 Flexbox 为元素指定方向

为元素指定方向

根据具体场景和情况,有时需要 反转 元素的顺序。如果你为阿拉伯国家设计界面,可能需要反转元素顺序以适应其书写方向。

借助 Flexbox,我们可以利用 flex-direction 属性选择元素的方向

使用方法如下:

CSS

#container {
  display: flex;
  gap: 10px;
  flex-direction: row-reverse;
}

结果如下:

图4:完整的 Flexbox CSS 指南

使用 flex-direction 的 Flexbox 示例

如我们所见,元素已被反转

我们通过在 flex-direction 属性上设置 row-reverse 值实现这一点。该值允许我们(如其名称所示)反转行,使第一个元素成为最后一个,依此类推。

flex-direction 属性有 四个不同值。以下是它们的解释:

  • row(默认)- 元素在行中从左到右排列
  • row-reverse – 元素在行中从右到左排列
  • column – 元素在列中从上到下排列
  • column-reverse – 元素沿列从下到上排列

到目前为止,我们看到元素沿同一行从左到右(使用 row)或从右到左(使用 row-reverse)排列。但我们也可以将元素 排列在列中。让我们仔细看看。

列与行

在 Flexbox 中,一切都由行和列定义。元素实际上是相对于这两个轴之一对齐的:水平轴(横坐标)和垂直轴(纵坐标)。

可以通过更改 flex-direction 属性的值来改变这些元素的对齐方向。以下是使用值 column 的示例。

CSS

#container {
  display: flex;
  gap: 10px;
  flex-direction: column;
}

结果如下:

图5:完整的 Flexbox CSS 指南

使用 flex-direction: column 的示例

修改元素的大小

可以修改元素的大小,即它们在页面上占用的空间。

具体来说,我们可以让元素仅占用其内容(或 CSS 样式)的宽度。

具体操作如下:只需指定元素类型为inline-flex而非block

为此,我们通过CSS代码进行设置。

CSS

#container {
  display: inline-flex;
  gap: 10px;
  flex-direction: column;
}

结果如下:

图6:完整的 Flexbox CSS 指南

inline-flex示例

指定元素顺序

使用 Flexbox,我们可以指定元素的位置

为此,我们可以使用 order 属性。该属性接受我们希望元素显示的位置作为值。

我们将此属性添加到要定位的元素上。例如,要定位第 1 个元素,我们可以这样做:

HTML

<div id="container">
    <div class="child child-1">1</div>
    <div class="child child-2">2</div>
    <div class="child child-3">3</div>
</div>

为每个子元素添加另一个类(child-1 / child-2 / child-3)。

CSS

.child-1 {
  order: 2;
}

.child-2 {
  order: 1;
}

.child-3 {
  order: 3;
}

对于这些类中的每一个,我们然后添加 order 属性。

为了使该属性生效,必须为每个元素指定 顺序。如果你只为 child-1 类指定 order,它将被放置在最后——除非你给它指定一个小于 1 的位置。

水平和垂直居中

水平居中

借助 Flexbox,我们还可以将页面上的任何元素进行 水平居中垂直居中

如果你也曾花費數小時來居中元素:那些日子已經一去不復返了!

讓我們一起看看如何使用 Flexbox 進行水平居中。為此,你只需使用 justify-content 屬性。

CSS

#container {
  display: flex;
  gap: 10px;
  justify-content: center;
}

以下是結果。

图7:完整的 Flexbox CSS 指南

示例:使用 Flexbox 实现水平居中

仔细观察,我们可以将元素在所有方向上居中:

  • start(默认)- 允许元素居中对齐到左侧(或在阿拉伯国家居中对齐到右侧)
  • center – 允许元素居中对齐到中心
  • space-between – 允许元素被 推开,并在 中间留有空间
  • space-around – 允许元素被 推开,并在元素之间留有 比例空间,其中一半空间位于第一个元素的左侧和最后一个元素的右侧
  • space-evenly – 允许元素以 相同间距 分开,且所有侧面间距相等

例如,以下是 space-around 的效果(因为它不太直观)

图8:完整的 Flexbox CSS 指南

示例:space-around 弹性布局

如您所见,每个侧边都有一个比例间距。两个元素之间的间距等于元素 1 的右侧间距与元素 2 的左侧间距之和,从而形成两倍大的间距。

垂直居中

要使用 Flexbox 实现垂直居中,您只需使用一个属性:align-items

它允许你为容器内的所有元素(即所有子元素)定义对齐方式。更具体地说,它允许你为每个元素定义 align-self 的值。

align-self 属性可应用于子元素,而 align-items 则可定义在父元素上。

图9:完整的 Flexbox CSS 指南

示例:align-items Flexbox

在此示例中,我们设置背景为黑色,并添加了 height: 100vh,使父元素占据页面高度的 100%(这更清晰地展示了 align-items: center 的效果)。

CSS

#container {
  display: flex;
  gap: 10px;
  justify-content: center;
  align-items: center;
  height: 100vh
}

我们可以看出,三个元素在垂直方向上居中。它们在水平方向上也居中,因为我们设置了 justify-content: center 属性。

如我们所见,我们还可以结合多个 align-self 属性来独立居中元素。

以下是一个小示例。

CSS

#container {
  display: flex;
  gap: 10px;
  justify-content: center;
  height: 100vh
}

.child-1 {
  align-self: start;
}

.child-2 {
  align-self: center;
}

.child-3 {
  align-self: end;
}

以下是结果。

图10:完整的 Flexbox CSS 指南

示例 align-self Flexbox

每个元素具有不同的 align-self 值:

  • start(默认)- 元素对齐于 顶部左侧(取决于行或列方向)
  • center – 元素对齐于 中心
  • end – 元素对齐于 底部右侧(取决于行或列方向)

在多行中使用 Flexbox

到目前为止,我们一直在 单行 中使用 Flexbox:

  • 从上到下(行)
  • 从左到右(列)

实际上,完全可以在多行中使用Flexbox。当当前行没有更多空间时,元素会被推到新行。目前情况并非如此。

例如,如果元素有9个,它们看起来如下:

HTML

<div id="container">
    <div class="child">1</div>
    <div class="child">2</div>
    <div class="child">3</div>
    <div class="child">4</div>
    <div class="child">5</div>
    <div class="child">6</div>
    <div class="child">7</div>
    <div class="child">8</div>
    <div class="child">9</div>
</div>

CSS

.child {
  background-color: blue;
  padding: 100px;
  border-radius: 50px;
  color: white;
}

#container {
  display: flex;
  gap: 10px;
}

body {
  background: #0E0E0E;
}

以下是结果。

图11:完整的 Flexbox CSS 指南

多个 Flexbox 元素的示例

如您所见,元素相互挤压,在水平轴上产生偏移(带有滚动条)。

要让元素在当前行空间不足时换行到新行,我们可以使用 CSS 属性 flex-wrap

让我们尝试为 #container ID 添加属性 flex-wrap: wrap

CSS

#container {
  display: flex;
  gap: 10px;
  flex-wrap: wrap;
}

以下是结果。

图12:完整的 Flexbox CSS 指南

使用 flex-wrap 的 Flexbox 示例

需要注意的是,这个新属性 flex-wrap 可以有以下值:

  • nowrap(默认)- 元素被推到同一行
  • wrap – 不再适合的元素被移动到 下一行
  • wrap-reverse – 不再适合的元素被移动到 上一行

使用简写属性加快速度

我们发现了两个属性:flex-directionflex-wrap。这两个属性允许我们 指定 Flexbox 的整体布局,即是否使用 ,以及是否为溢出的元素创建新列或新行。

通过使用所谓的简写属性,我们可以进一步加快操作速度。

正如其名,它允许在单个属性中指定flex-directionflex-wrap的值:flex-flow。以下是一个示例。

CSS

#container {
    flex-direction: row;
    flex-wrap: wrap;
}

使用flex-flow属性:

CSS

#container {
    flex-flow: row wrap;
}

轻而易举!我们首先指定了 flex-direction 的值,然后指定了 flex-wrap 的值。

重要的是要遵守这个顺序。你必须始终首先指定 flex-direction 的值,然后再指定 flex-wrap 的值。

浏览器兼容性表格

Flexbox 是 CSS 语言的一项功能,彻底改变了开发者的工作方式。自 2012 年发布以来,它已在日常使用的 浏览器 中广泛支持。以下是 兼容性表格,用于指定从哪个 版本 开始可以使用 Flexbox:

图13:完整的 Flexbox CSS 指南

Flexbox兼容性表格

如果您想了解特定浏览器的最新版本,所有信息均可在caniuse网站上查阅。如您所见,Flexbox现已与全球最常用的浏览器完全兼容。因此您可以放心使用。

你也许感兴趣的:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注