Flexbox 和 Grid 布局 —— 让你的布局更高级

前言

在前端开发过程中,布局是最基础和重要的部分。为了让页面布局更灵活和适应不同终端设备的尺寸,CSS3 新增了很多布局方式。本篇文章将着重介绍 Flexbox 与 Grid 布局。

Flexbox 布局

什么是 Flexbox 布局

Flexbox(Flexible Box)是一种一维布局模型,即将一行或一列中的元素进行排列。 它最初的目的是为了解决布局问题,使得在不同屏幕尺寸的设备上显示的页面都能够自适应。Flexbox 的主要思想是将容器分割为一个个弹性(flex)的行和列,通过设置弹性的属性和比例达到元素的控制。

如何使用 Flexbox 布局

通过以下代码段,我们可以在容器中配置 Flexbox 布局:

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

接下来,每个容器内的子元素默认会排列在同一行上,且子元素之间的间距均等。 如果希望它们垂直排列,可以设置如下代码:

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

Flexbox 的主要属性

Flexbox 布局有很多的属性值(mdn文档),下文会重点介绍几个核心属性。

  • flex-direction : 定义了容器内的元素是按横轴方向排列还是按纵轴方向排列。 可以选的值有:row、row-reverse、column、column-reverse
  • justify-content :用于控制子元素在 主轴方向(即flex-direction设置的方向) 上的对齐方式。 可以选的值有:flex-start、flex-end、center、space-between、space-around、space-evenly
  • align-items :用于控制子元素在 交叉轴方向(即flex-direction相反的方向) 上的对齐方式。可以选的值有:flex-start、flex-end、center、baseline、stretch
  • flex-grow : 设置子元素的放大比例。
  • flex-shrink :设置子元素的缩小比例。
  • flex-basis :定义了一个弹性盒子或弹性盒子组件的初始大小。

下面是一个 Flexbox 布局的示例代码:

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

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

在以上代码中,.container作为一个容器,内部包含三个.item元素。首先通过display: flex设置容器为 Flexbox 布局,在此基础上,我们还设置了flex-wrap: wrap,以便让子元素换行。然后我们设置了justify-content: space-around,该属性值表示控制子元素在主轴方向上的对齐方式。最后我们单独为.item元素设置了其占据父容器的 1/3 空间,并 设置了一些其他的 CSS 属性。

Grid 布局

什么是 Grid 布局

CSS Grid Layout 网格布局是一个二维布局模型,它在容器内创造一个网格布局(跟一个表格很类似),然后可以将子元素放置在任意的单元格中。Grid 布局可以轻松处理一些常见而又复杂的布局问题,同时还可以支持响应式设计,因而也是前端中不可或缺的布局方式。

如何使用 Grid 布局

通过以下代码段,我们可以在容器中配置 Grid 布局:

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

以上代码指定了我们想要创建有三列的 Grid 网格布局。

接下来,我们就可以在内部子元素定义哪些行应该被跨越,哪些列应该被跨越,还可以定义元素与其他元素之间的间隔。

Grid 的主要属性

  • grid-template-columns :定义网格容器列的数量、大小和间隔。
  • grid-column-start :指定一个单元格的水平起始位置。
  • grid-column-end :指定一个单元格的水平结束位置。
  • grid-row-start :指定一个单元格的垂直起始位置。
  • grid-row-end :指定一个单元格的垂直结束位置。
  • grid-template-rows :定义网格容器的行数、大小和间隔。
  • grid-template-areas :定义网格模板中的命名区域。

以下是一个 Grid 布局的示例代码:

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

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

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

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

首先我们设置了一个包含了 6 个元素的 .container 容器,通过display: grid 可以让容器启动网格布局。然后我们通过grid-template-columns 设置了三列,并通过repeat()函数声明了每个区域的大小以及边距。在元素定义中,我们使用grid-column-startgrid-column-endgrid-row-startgrid-row-end 分别指定了不同元素在网格中的位置。最后我们为元素添加了一些其他的 CSS 属性。

总结

通过这篇文章的介绍,我们对 Flexbox 和 Grid 布局有了更深刻的认识,它们可以轻松解决常见的布局问题,也能够支持响应式设计。在实际开发过程的中我们可以根据场景灵活使用,可以通过其灵活的属性来控制元素的位置、大小和对齐方式等。

附注: 如果想要更深入了解 Grid 布局,建议阅读 w3school Grid布局教程

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


猜你喜欢

  • nginx 负载均衡性能优化之 keepalive

    前言 随着互联网应用的不断增多,对于大型 web 站点来说,负载均衡已经是必不可少的组成部分。而 Nginx 作为主流的负载均衡服务器,其作用越来越重要。而本文将详细介绍 Nginx 负载均衡性能优化...

    1 年前
  • Next.js 部署到 Now.sh 上失败解决方法

    Next.js 是一个基于 React 的服务器渲染应用框架,由于其易用性和高度可定制性,越来越多的前端开发者开始使用它来构建自己的 web 应用程序。而 Now.sh 则是一个现代的静态网站部署平台...

    1 年前
  • PM2 如何使用 Cluster 模块启动多进程?

    背景 在很多前端项目中,我们需要处理大量的请求并保证服务的高可用性,这时就需要使用多进程来提高性能和稳定性。在 Node.js 中,使用 Cluster 模块可以方便地启动多个子进程,然后将请求分发给...

    1 年前
  • Koa 配置安全防护

    Koa 是一款优秀的 Node.js 服务端框架,由 Express 的原班人马打造而成,拥有极高的性能和灵活的中间件机制,成为前端开发者的首选框架。然而,由于 Koa 的灵活性,如果不进行适当的配置...

    1 年前
  • CSS Grid 中如何实现 “断行” 的效果

    CSS Grid 是现代前端布局中的一种重要技术手段,它可以方便地实现复杂的网格布局。但是,在实现某些特殊效果时,可能会遇到一些问题。本文将为大家介绍如何在 CSS Grid 中实现 “断行” 的效果...

    1 年前
  • Custom Elements 应用于图表组件

    在前端开发中,我们经常面临需要定制化的需求,特别是在图表组件方面。往往我们需要根据需求,自定义一种适应于业务场景的图表组件。而这时,Custom Elements 可以为我们提供一种很好的解决方案。

    1 年前
  • Fastify 验证器:快速构建数据验证 API

    Fastify 是一个快速、低开销和体积小的 Node.js Web 框架。它强调了快速和低开销,并提供了许多优化性能的特性,如异步编程,只需安装所需的插件等。 Fastify 验证器是用于数据验证的...

    1 年前
  • 如何在 Express.js 应用程序中使用 Cookie

    在 Web 开发中,Cookie 是一种非常重要的机制,可以用来存储用户信息,实现用户登陆,以及进行网站数据的统计分析等任务。在 Express.js 应用程序中,使用 Cookie 也非常简单,只需...

    1 年前
  • Material Design Android 实例:状态栏与导航栏

    什么是 Material Design? Material Design 是一套谷歌提出的设计规范,旨在为移动设备和 Web 应用程序提供更加一致、直观的用户界面体验。

    1 年前
  • MongoDB 中通过 TTL 索引自动删除过期数据

    在我们的 Web 应用程序中,经常需要处理一些过期数据。例如用户令牌、密码重置令牌、电子邮件确认链接等。这些数据的生命周期有限,一旦过期,它们就不再有任何用处。在传统的关系型数据库中,我们必须编写一些...

    1 年前
  • 如何在 Mongoose 中使用 async/await 进行异常处理

    如何在 Mongoose 中使用 async/await 进行异常处理 Mongoose 是一款在 Node.js 中操作 MongoDB 数据库的 ORM 框架,它提供了许多方便的抽象和模型定义方法...

    1 年前
  • 做到更加高级的 Object Literal Property 定义方法

    做到更加高级的 Object Literal Property 定义方法 在前端开发中,我们经常需要使用对象字面量来定义对象。对象字面量是一种非常方便的方法,可以帮助我们快速创建对象。

    1 年前
  • Docker 私有镜像仓库配置方法

    Docker 是一种流行的容器化工具,可以帮助开发人员更加轻松地构建、打包、部署应用程序。然而,大多数人使用的是公共 Docker 镜像库,这意味着你需要依赖于互联网上的第三方服务来管理镜像。

    1 年前
  • 如何在 Deno 中实现错误和日志记录

    在前端开发中,错误和日志记录是非常重要的一环。它能够帮助开发者迅速定位问题,从而更快地解决问题。而在 Deno 中,实现错误和日志记录也是非常简单的。下面将介绍如何在 Deno 中进行错误和日志记录的...

    1 年前
  • 使用 Jest 和 Mongoose 进行 Node.js 应用程序测试的实例

    在开发 Node.js 应用程序时,测试是非常重要的一步,它可以帮助我们发现潜在的问题,在代码部署到生产环境之前,确保它的质量以及减少金钱和时间的浪费. 在本文中,我们将使用 Jest 和 Mongo...

    1 年前
  • 如何使用 Chai-as-Promise 优化异步测试

    如何使用 Chai-as-Promise 优化异步测试? 在前端开发中,测试是不可或缺的一部分。而针对异步操作的测试,更是需要我们特别关注。使用 Chai-as-Promise 可以有效地解决这一问题...

    1 年前
  • CSS Flexbox 实现导航栏布局的技巧

    前言 在前端开发中,导航栏的布局是一个非常基础的技术。虽然很多开发者可能通过传统的 float 和 position 等技术来实现导航栏的布局,但这些技术在处理多样化的布局时会变得非常不便。

    1 年前
  • RESTful API 中数据的可扩展性处理方法

    随着互联网的快速发展,RESTful API 已经成为开发者们经常使用的一种 API 设计风格。在 RESTful API 设计中,数据的可扩展性处理是非常重要的一点。

    1 年前
  • ES6 中 Promise 实践与优化

    什么是 Promise? 在传统的 JavaScript 中,我们使用回调函数来处理异步操作。这种方式虽然能够解决问题,但是嵌套多了代码就会变得难以维护和阅读。而 Promise 是一种更为优雅的异步...

    1 年前
  • RxJS 操作符:withLatestFrom

    RxJS 是一个流式编程库,提供了丰富的操作符,可以帮助开发者轻松处理数据流。其中,withLatestFrom 操作符是比较常用的一个。它可以让我们从多个数据流中获取最新的数据,并组合成一个新的数据...

    1 年前

相关推荐

    暂无文章