深度学习 Flexbox 布局 —— 一篇极致总结

Flexbox 布局可以说是现代前端开发中最常用的布局方式之一,它提供了一种非常便捷的方式来对于元素进行定位、分布及对齐等操作。但是,很多开发者对于 Flexbox 布局还是比较陌生的,或者只是停留在表面了解的程度上。本篇文章旨在为您深度讲解 Flexbox 布局的常见用法,让你从表面了解进入到深度学习的阶段,并通过实际案例帮助你更好的掌握。

什么是 Flexbox 布局

Flexbox 布局是一种新的 CSS 布局方式,它提供了一种更加灵活的方式来实现容器中的元素的布局以及对齐等操作。Flexbox 布局中的每个元素都被称为弹性盒子(flexbox),它们可以被轻松的控制其尺寸、对齐以及顺序等属性。

主轴和交叉轴

在使用 Flexbox 布局中,我们需要了解两个重要的概念,即主轴(main axis)和交叉轴(cross axis)。主轴和交叉轴的方向是由 Flexbox 容器的主轴方向和交叉轴方向决定的。在默认情况下,Flexbox 容器的主轴方向是从左到右,交叉轴方向是从上到下。在 Flexbox 布局中,主轴用来控制项目的排列方向,交叉轴用来控制项目的对齐方式。

Flexbox 属性详解

容器相关属性

display

该属性用来定义 Flexbox 容器(即父级元素)的类型,取值可以为 flex 和 inline-flex。默认值为 flex,表示容器为块级容器。

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

flex-direction

该属性用来设置 Flexbox 容器中弹性盒子沿主轴方向的排列顺序。

取值有以下 4 种:

  • row:默认值,表示弹性盒子沿着水平方向排列,起点在左侧。
  • row-reverse:表示弹性盒子沿着水平方向反向排列,起点在右侧。
  • column:表示弹性盒子沿着垂直方向排列,起点在上侧。
  • column-reverse:表示弹性盒子沿着垂直方向反向排列,起点在下侧。
---------- -
  -------- -----
  --------------- -------
-

flex-wrap

该属性用来设置弹性盒子是否可以换行。

取值有以下 3 种:

  • nowrap:默认值,表示不换行。
  • wrap:表示弹性盒子可以换行。
  • wrap-reverse:表示弹性盒子可以换行,但是反向排列。
---------- -
  -------- -----
  ---------- -----
-

flex-flow

该属性是 flex-direction 和 flex-wrap 两个属性的缩写,用来定义 Flexbox 容器中弹性盒子的排列方向以及是否可以换行。

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

justify-content

该属性用来设置弹性盒子在主轴方向上的对齐方式。

取值有以下 6 种:

  • flex-start:默认值,表示弹性盒子靠主轴起点对齐。
  • flex-end:表示弹性盒子靠主轴终点对齐。
  • center:表示弹性盒子在主轴方向上居中对齐。
  • space-between:表示弹性盒子沿主轴方向平均分布,首尾两个弹性盒子分别靠起点和终点对齐。
  • space-around:表示弹性盒子沿主轴方向平均分布,各个弹性盒子之间的间距相等。
  • space-evenly:表示弹性盒子沿主轴方向平均分布,各个弹性盒子之间的间距也相等。
---------- -
  -------- -----
  ---------------- -------
-

align-items

该属性用来设置弹性盒子在交叉轴方向上的对齐方式。

取值有以下 5 种:

  • stretch:默认值,表示弹性盒子沿交叉轴方向拉伸以适应容器高度。
  • flex-start:表示弹性盒子靠交叉轴起点对齐。
  • flex-end:表示弹性盒子靠交叉轴终点对齐。
  • center:表示弹性盒子在交叉轴方向上居中对齐。
  • baseline:表示弹性盒子沿着基线对齐。
---------- -
  -------- -----
  ------------ -------
-

align-content

该属性用来设置弹性盒子在交叉轴方向上的排列方式,只有当容器中有多行弹性盒子时才会生效。

取值有以下 6 种:

  • stretch:默认值,表示弹性盒子沿交叉轴方向拉伸以适应容器高度。
  • flex-start:表示所有弹性盒子在交叉轴起点处排列。
  • flex-end:表示所有弹性盒子在交叉轴终点处排列。
  • center:表示所有弹性盒子在交叉轴方向居中排列。
  • space-between:表示弹性盒子沿交叉轴方向平均分布,首尾两个弹性盒子分别靠起点和终点对齐。
  • space-around:表示弹性盒子沿交叉轴方向平均分布,各个弹性盒子之间的间距相等。
---------- -
  -------- -----
  --------------- ----
  ---------- -----
  -------------- -------
-

子元素相关属性

order

该属性用来设置弹性盒子的排列顺序,取值为整数类型,数值越小的弹性盒子排列越靠前,默认值为 0。

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

flex-grow

该属性用来设置弹性盒子在主轴方向上的伸展比率,当容器中的空间有剩余时,弹性盒子会按照 flex-grow 的比例进行分配,默认值为 0。

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

flex-shrink

该属性用来设置弹性盒子在主轴方向上的收缩比率,当弹性盒子超出容器的空间时,弹性盒子会按照 flex-shrink 的比例进行收缩,默认值为 1。

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

flex-basis

该属性用来设置弹性盒子在主轴方向上的初始尺寸,默认值为 auto。

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

flex

该属性是 flex-grow、flex-shrink 和 flex-basis 三个属性的缩写,用来快捷设置弹性盒子的伸展比率、收缩比率和初始尺寸。

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

align-self

该属性用来设置单个弹性盒子在交叉轴方向上的对齐方式。

取值有以下 5 种,与 align-items 的取值相同:

  • auto:默认值,表示使用父元素的 align-items 属性。
  • stretch:表示弹性盒子沿交叉轴方向拉伸以适应容器高度。
  • flex-start:表示弹性盒子靠交叉轴起点对齐。
  • flex-end:表示弹性盒子靠交叉轴终点对齐。
  • center:表示弹性盒子在交叉轴方向上居中对齐。
  • baseline:表示弹性盒子沿着基线对齐。
---------- ---------------- -
  ----------- ---------
-

主流布局应用实例

水平垂直居中

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

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

等高布局

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

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

左右等宽

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

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

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

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

总结

本篇文章对于常用的 Flexbox 布局属性进行了详细的介绍,并通过实际案例帮助读者更好的了解和掌握 Flexbox 布局的使用方法。不管是对于刚开始接触 Flexbox 布局的初学者,还是有一定经验的开发者,本文都能为你提供帮助并指引你进入到深度学习的阶段。当然,了解了 Flexbox 布局以后,你还可以更深入地学习 Grid 布局,这将为你更加全面的掌握现代前端布局奠定基础。

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


猜你喜欢

  • ES12 中的新数据类型:Record、Tuple 和 DateOnly

    近年来,随着 JavaScript 应用不断发展壮大,前端开发人员对于语言规范的要求也越来越高。为了满足开发人员的需求,JavaScript 也不断更新迭代。ES12 中推出了许多新特性,其中包括一些...

    1 年前
  • ESLint 错误:no-undef

    ESLint 错误:no-undef 在前端开发中,我们经常会使用一些 JavaScript 的库、框架和工具,比如 React、Vue、jQuery等等。但是在使用过程中,我们也经常会遇到一些问题,...

    1 年前
  • Docker 学习笔记:容器间有多少网络可用?

    在 Docker 技术中,容器(Container)是指一种轻量级的操作系统虚拟化技术。它允许在同一台物理机上运行多个独立的应用程序,每个应用程序运行在一个独立的操作系统环境(容器)中。

    1 年前
  • ES6 中类的继承及其常见问题

    随着前端开发的迅猛发展,ES6 成为了前端开发的重要标准之一。ES6 中引入了类的概念,这让前端开发更加面向对象。在这篇文章中,我们将讨论 ES6 中类的继承及其常见问题。

    1 年前
  • SASS 中使用循环创建多个重复样式的教程

    SASS 中使用循环创建多个重复样式的教程 引言 SASS 是一种流行的 CSS 预处理器,它提供了很多让开发者更容易编写和维护 CSS 样式的功能,其中之一就是使用循环来批量创建样式。

    1 年前
  • Serverless 的运维工作

    简介 Serverless 是一种基于云计算的解决方案,在 Serverless 应用中,开发者不需要关注底层服务器的细节,只需要编写 Lambda 函数,并使用云服务商提供的 API Gateway...

    1 年前
  • # 一个 bug 严重困扰小白,我是怎么解决它的

    一个 bug 严重困扰小白,我是怎么解决它的 作为前端开发者,我们时常会遇到各种各样的 bug,其中有些是非常难以解决的,甚至可能困扰我们很长一段时间。在我刚开始接触前端开发的时候,我也遇到了一个非常...

    1 年前
  • 基于 Angular 实现 Excel 导出功能的解决方案

    Excel 是广泛使用的电子表格软件,许多企业和组织都需要将数据导出为 Excel 文件以便进行分析和处理。在前端开发中,我们经常需要将网页上的表格数据导出为 Excel 文件。

    1 年前
  • 在 Angular 应用中使用 RxJS

    什么是 RxJS? RxJS 是 JavaScript 中响应式编程的一种实现方式,可以用于处理异步数据流和事件流。它使用一些基本的概念,如观察者、可观察对象和操作符,来处理数据流。

    1 年前
  • Redux 编写中间件进行日志记录

    在日常的前端开发中,我们经常需要处理各种复杂的业务逻辑。为了有效地跟踪这些复杂逻辑和调试错误,我们通常会使用日志记录技术。Redux 应用程序也不例外。Redux 提供了一种简单但功能强大的方式来记录...

    1 年前
  • ES9 新增的 Object.fromEntries() 方法

    在 ES9 中,新增了一个非常实用的方法 Object.fromEntries(),它可以将一个由键值对组成的数组转换成一个对象。本文将详细介绍这个新方法的应用场景及其用法。

    1 年前
  • RESTful API 如何进行性能测试

    RESTful API 是一种灵活、可扩展、易于管理和维护的 API 设计形式,被广泛应用于前后端分离的应用中。性能测试是测试 RESTful API 的重要步骤之一,以确保 API 接口的稳定性和可...

    1 年前
  • 使用 Socket.IO 实现直播推流的完整教程

    在现今网络流媒体逐渐成为主流的趋势下,直播已成为互联网的一大热门话题。作为直播的核心技术之一,推流技术也成为了前端工程师必须学会的重要技能。本文将介绍如何使用 Socket.IO 实现直播推流,并附有...

    1 年前
  • 如何在 Angular 中使用 LESS

    LESS 是一种流行的 CSS 预处理器,它使得编写 CSS 更加容易和灵活。在 Angular 中使用 LESS 可以大大简化样式管理和主题切换,同时提高代码的可维护性和可复用性。

    1 年前
  • 聊聊 Flexbox 布局(1)

    前言 在 Web 前端开发中,经常会遇到要用到不同布局方式来组织页面的情况。传统的布局方式主要是使用浮动和定位,但它们存在一些问题:容易出现样式冲突、难以垂直居中、不能轻松地改变布局方向等。

    1 年前
  • Vue.js2.0 : 让你的 Vue 组件支持异步加载

    Vue.js是一款流行的JavaScript框架,用于构建用户界面和SPA。Vue.js拥有众多支持库和插件,其中Vue-Loader就是一款非常有用的工具。在本文中,我们将探讨如何使用Vue-Loa...

    1 年前
  • Sequelize 中如何处理 PostgreSQL 中的 ENUM 字段类型

    Sequelize 中如何处理 PostgreSQL 中的 ENUM 字段类型 在 PostgreSQL 中,ENUM 是一种非常常见的数据类型,它允许您指定一组可以用于特定字段的常量值列表。

    1 年前
  • 构建基于 Express.js 和 WebSocket 的 Web 聊天室

    Web 聊天室是一个非常常见的互联网应用程序,它可以让用户在一个在线环境中进行实时的文字聊天。在本文中,我们将介绍如何使用 Express.js 和 WebSocket 构建一个简单的 Web 聊天室...

    1 年前
  • Cypress 如何处理页面加载缓慢的问题

    在进行前端自动化测试时,页面加载速度往往是一个重要的问题。如果页面加载过慢,那么测试用例的运行速度也会变得非常缓慢,影响开发效率。本文将介绍如何使用 Cypress 处理页面加载缓慢的问题,提高测试用...

    1 年前
  • 使用 Mongoose 连接 MongoDB 的技巧和注意事项

    Mongoose 是一个用于管理 MongoDB 的工具,让你可以直接通过 JavaScript 操作 MongoDB 数据库。在前端开发中,连接 MongoDB 数据库是必不可少的一项工作,下面我们...

    1 年前

相关推荐

    暂无文章