CSS Flexbox 简单易懂的学习教程

CSS Flexbox 是前端开发中用于布局的一种新的技术,它为页面提供了更加灵活和响应式的布局方式。CSS Flexbox 的思想是基于容器和子元素的关系,通过设定容器的属性,实现子元素固定比例、自适应大小、自动对齐等布局效果。本教程将介绍 CSS Flexbox 的基本概念、属性和实现方法,以及一些实战示例。

1. 概念

在 CSS Flexbox 中,一个容器将包含若干个子元素,容器就是 Flexbox 的布局容器,而子元素就是容器中的 Flexbox 项目。Flexbox 权威规范中的定义,是指在一维空间(通常是在水平方向或垂直方向)中布置子项的能力。它是一个强大的工具,可以帮助您轻松地创建复杂的布局。

2. 属性

CSS Flexbox 主要有以下几个属性:

2.1 display

在一个元素上应用 Flexbox 时,首先需要通过设置 display 属性来声明该元素是一个 Flexbox 容器:

---------- -
  -------- -----
-

当元素的 display 属性被设置为 flex 时,它成为弹性容器,并且它的所有直接子元素都成为了容器中的 flex 项目。

2.2 flex-direction

flex-direction 属性是用来控制主轴方向的。主轴是指 Flexbox 布局时的主要方向(即水平或垂直)。

flex-direction 属性有 4 个可能的值:

  • row(默认值):子元素会从左到右排列。
  • row-reverse:子元素会从右到左排列。
  • column:子元素会从上到下排列。
  • column-reverse:子元素会从下到上排列。
---------- -
  -------- -----
  --------------- ----
-

2.3 justify-content

justify-content 属性用于控制沿着主轴方向的对齐方式。

justify-content 属性有 5 个可能的值:

  • flex-start(默认值):子元素向主轴起点对齐。
  • flex-end:子元素向主轴终点对齐。
  • center:子元素在主轴方向上居中对齐。
  • space-between:子元素沿主轴方向均匀分布,首尾元素让边距为零,其他元素之间的边距相等。
  • space-around:子元素沿主轴方向均匀分布,每个元素周围的空间相等。
---------- -
  -------- -----
  ---------------- -------
-

2.4 align-items

align-items 属性用于控制沿着交叉轴(与主轴垂直的方向)的对齐方式。

align-items 属性有 6 个可能的值:

  • stretch(默认值):子元素沿着交叉轴拉伸填充整个容器。
  • flex-start:子元素向交叉轴起点对齐。
  • flex-end:子元素向交叉轴终点对齐。
  • center:子元素在交叉轴方向上居中对齐。
  • baseline:子元素的基线对齐。
  • first baseline:第一行文本的基线对齐。
---------- -
  -------- -----
  ------------ -------
-

2.5 flex-wrap

flex-wrap 属性用于控制项目如何排列,以及是否允许换行。

flex-wrap 属性有三个可能的值:

  • nowrap(默认值):容器里的所有项目都不换行。
  • wrap:容器里的项目会按照一列列的方式进行换行(第一列的高度固定,之后的列会另起一行)。
  • wrap-reverse:容器里的项目会按照一列列的方式进行换行,但是按照与 normally 方向相反的顺序,即从后往前排列。
---------- -
  -------- -----
  ---------- -----
-

2.6 align-content

如果在主轴方向上有剩余空间(即 justify-content 生效),那么 align-content 属性将帮助您控制各行之间的间距。

align-content 属性有 6 个可能的值:

  • stretch(默认值):当所有项目未设置高度或者设置为 auto,容器将使用 stretch 路径对齐项目,并且拉伸来填充剩余空间。
  • flex-start:各行将向交叉轴的起始位置对齐,第一行与容器的起始位置对齐,完全没有留白。
  • flex-end:各行将向交叉轴的结束位置对齐。
  • center:各行将向交叉轴的中间位置对齐。
  • space-between:各行将平均分布。
  • space-around:各行将平均分布且留出两端的留白相等。
---------- -
  -------- -----
  -------------- -------------
-

2.7 order

order 属性用于控制项目的排列顺序,默认为 0。它可以为负数。

----- -
  ------ --
-

2.8 flex-grow

flex-grow 属性是用来控制项目在空间不足时如何拉伸的。它定义了一个比例值,该值表示项目在使用容器中所有剩余空间之前想要占据多少剩余空间。

----- -
  ---------- --
-

2.9 flex-shrink

flex-shrink 属性是定义当空间不足时,项目如何缩小的属性。默认是 1。例如,如果所有项目都设置为 1,则它们将始终拥有相等的尺寸;如果一个项目的值为 0,那么这个项目将不缩小。

----- -
  ------------ --
-

2.10 flex-basis

flex-basis 属性定义了项目在分配任何剩余空间之前,默认大小。可以理解为子元素的初始尺寸。当设置为 auto 时,它会根据元素的宽度和高度来设置大小。

----- -
  ----------- ------
-

3. 实战示例

下面是一些实战示例,来帮助您更好地理解 CSS Flexbox 的使用方法。

3.1 Flexbox 垂直居中

在水平方向上,设置 justify-content:center,使子元素在容器水平居中。在垂直方向上,设置 align-items:center,使子元素在容器垂直居中。

---- ------------------
  ---- ------------------- - -------
  ---- ------------------- - -------
  ---- ------------------- - -------
------
---------- -
  -------- -----
  ---------------- -------
  ------------ -------
  ----------------- ----------
  ------- ------
-
--------
--------
------- -
  ------ ------
  ------- ------
  ----------------- -----
  ------ ------
  ----------- -------
  ------------ ------
-

3.2 Flexbox 左右布局

在给父元素设置 display:flex 的时候,子元素默认方向为横向布局,可使用 justify-content 和 align-items 控制它们的对齐方式。

---- ------------------
  ---- ------------------- - -------
  ---- ------------------- - -------
  ---- ------------------- - -------
------
---------- -
  -------- -----
  ---------------- --------------
  ------------ -------
  ----------------- ----------
  ------- ------
  -------- --- -----
-
--------
--------
------- -
  ------ ------
  ------- ------
  ----------------- -----
  ------ ------
  ----------- -------
  ------------ ------
-

3.3 Flexbox 布局自适应

可以使用 flex-grow 和 flex-basis,通过设置比例和初始大小,来实现自适应布局。

---- ------------------
  ---- ------------------- - -------
  ---- ------------------- - -------
  ---- ------------------- - -------
------
---------- -
  -------- -----
  ---------------- --------------
  ------------ -------
  ----------------- ----------
  ------- ------
  -------- --- -----
-
------- -
  ---------- --
  ----------- ------
  ------- ------
  ----------------- -----
  ------ ------
  ----------- -------
  ------------ ------
-
------- -
  ---------- --
  ----------- ------
  ------- ------
  ----------------- -----
  ------ ------
  ----------- -------
  ------------ ------
-
------- -
  ---------- --
  ----------- ------
  ------- ------
  ----------------- -----
  ------ ------
  ----------- -------
  ------------ ------
-

4. 总结

本文介绍了 CSS Flexbox 的基本概念、属性和实现方法。以及一些实战示例。弹性布局可以很好地适应各种设备,并为 Web 开发工作带来更多灵活性。在 Web 开发中,尝试使用和掌握 CSS Flexbox 将使您的设计更加灵活和适应性。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/6483e3f448841e989431c4c1


猜你喜欢

  • Web Components 如何实现数据双向绑定?

    在 Web 开发中,数据双向绑定是一个极其重要的概念。它使得用户所看到的页面能够随着数据的变化而动态更新,从而极大地增强了交互性和用户体验。 Web Components 是目前最受欢迎的前端组件化技...

    1 年前
  • 在 Angular 中处理 HTTP 错误的最佳实践

    HTTP 错误处理在前端应用中是非常重要的一环。在 Angular 中,我们可以通过一些最佳实践来处理 HTTP 错误,从而提高代码的可维护性和稳定性。本文将介绍 Angular 中处理 HTTP 错...

    1 年前
  • Redux 中的表单处理最佳实践

    表单处理在 Web 开发中是非常常见的任务。在 React 和 Redux 生态系统中,如何处理表单数据一直是一个让人头疼的问题。Redux 中的表单处理最佳实践可以帮助我们更好地管理表单状态,使应用...

    1 年前
  • 使用 Kubernetes 搭建高可用 Docker Registry

    Docker Registry 是 Docker 官方提供的镜像仓库,可以用于存储、发布和管理 Docker 镜像。在实际应用中,我们通常需要搭建一个高可用的 Docker Registry,以保证镜...

    1 年前
  • 如何在 Promise 中使用 Generator 函数?

    前言 随着 JavaScript 语言的发展,Promise 成为 ES6 中新的异步编程解决方案,而 Generator 函数则是 ES6 中另一个强大的语言特性。

    1 年前
  • ES2021 Object.getOwnPropertyNames() 方法详解

    在 JavaScript 中,对象是我们经常使用的一种数据类型,对于对象的操作和属性获取,我们可以使用 Object 类型提供的一系列方法来实现。而在 ES2021 标准中,Object 类型新增了一...

    1 年前
  • 使用 Hapi.js 搭建基于 GraphQL 的 API

    GraphQL 是一种用于 API 的查询语言及其运行时环境,可由客户端定义所需的数据结构。相比传统的 RESTful API,GraphQL 具有更灵活、更高效的数据获取方式。

    1 年前
  • Sequelize ORM 怎么使用?

    什么是 Sequelize ORM? Sequelize 是一款基于 Node.js 的 ORM(Object-Relational Mapping),可以操作 MySQL、PostgreSQL、SQ...

    1 年前
  • Express.js 和 AJAX:使用 XHR 和 jQuery 进行简单的数据获取

    在现代 Web 开发中,前端和后端之间的通信变得越来越重要。AJAX 技术(也称为 XMLHttpRequest 或 XHR)负责处理异步通信,使前端能够在不必重新加载整个页面的情况下向后端发送请求并...

    1 年前
  • 如何使用 GraphQL 构建持久化查询

    GraphQL 是一个由 Facebook 开源的数据查询和操作语言,它提供了一种声明式编程模型,使得前端开发者可以更加灵活、高效地进行数据查询和管理。在 GraphQL 中,我们可以精确地定义我们需...

    1 年前
  • Serverless 如何控制函数访问限制?

    前言 Serverless是一种新兴的云计算构架,它将云服务和代码运行环境进行解耦,使得应用程序的开发和部署变得更加便捷和高效。其中以AWS Lambda和Azure Functions为代表的函数计...

    1 年前
  • Win10 系统中如何启用无障碍模式?

    无障碍模式是指为了帮助视觉、听觉、智力或身体功能受限或障碍的人使用电脑而设计的一种模式。在 Win10 中,启用无障碍模式,可以帮助那些有困难或无法使用标准的输入设备或屏幕,或者需要图形和视觉辅助功能...

    1 年前
  • Docker Compose 与 Dockerfile 的区别与联系

    Docker Compose 和 Dockerfile 是构建和运行 Docker 容器的两个常用工具。但是这两者有着不同的用途和功能。在本文中,我们将探讨 Docker Compose 和 Dock...

    1 年前
  • webpack 模块热替换实战:实时预览页面效果

    在前端开发中,我们经常需要对页面进行调试和修改,随着项目规模的扩大,每一次修改都需要重新刷新页面来查看效果,这无疑浪费了大量的时间,而且在一些特定的场景下(例如表单的输入),还会让我们失去输入的内容。

    1 年前
  • Node.js Server Sent Event(SSE)技术详解

    什么是Server Sent Event SSE(Server Sent Event)指的是一种浏览器与服务器之间的实时通信技术。它允许服务器将实时数据主动推送到客户端。

    1 年前
  • Vue.js 中常见计算属性问题及解决方案

    什么是计算属性 在 Vue.js 中,计算属性是一种能够根据已有的数据计算出新的数据的属性,这些数据可以是纯粹的 JavaScript 表达式或函数。 计算属性主要用于解决模板中过多逻辑或者复杂逻辑的...

    1 年前
  • 如何在 Deno 应用中使用 GraphQL

    如何在 Deno 应用中使用 GraphQL Deno 是一种新型的运行时环境,与 Node.js 相比,它更加安全、高效和易于使用。在 Deno 应用中,我们可以使用 GraphQL 来查询和更新数...

    1 年前
  • 如何在 Chai 中测试浏览器端 Javascript 代码

    在前端开发中,测试是很重要的一环,它可以帮助我们减少 bug,提高代码质量和稳定性。而 Chai 是一个非常流行的 Javascript 测试库,它提供了一套优雅且灵活的断言库,可以用于编写单元测试、...

    1 年前
  • RxJS 中 concatMap 的用法详解

    在 RxJS 中,concatMap 是一个非常有用的操作符。它可以帮助我们将一个 Observable 转换成另一个 Observable,同时还保留原始 Observable 中的顺序和完整性。

    1 年前
  • ES7 实践:使用 Map 数据结构改进代码性能

    在前端开发中,我们经常需要处理大量数据,例如从服务器获取的 JSON 数据。对于大量数据的操作,一个高效的数据结构是至关重要的。在 ES7 中,引入了 Map 数据结构,提供了一种更高效的数据存储和访...

    1 年前

相关推荐

    暂无文章