CSS Flexbox 布局的使用技巧和优化实例

简介

Flexbox 是 CSS3 新增的一种布局方式,通过对容器和子元素的属性设置,可以实现灵活、响应式的布局。它的出现解决了传统布局方式的痛点,如水平垂直居中、等高布局等等问题。本文将介绍 Flexbox 的常见属性和使用技巧,以及优化实例。

常见属性

容器属性

  • display: 设置为 flexinline-flex 来定义成为一个 Flexbox 布局。默认为 flex

  • flex-direction: 定义 Flexbox 主轴的方向,可以是 row(水平方向)、column(竖直方向)、row-reverse(反向水平方向)、column-reverse(反向竖直方向)。

  • flex-wrap: 控制 Flexbox 是否换行,可以是 nowrap(不换行)、wrap(换行,第一行在上面)、wrap-reverse(换行,第一行在下面)。

  • justify-content: 控制子元素在主轴上对齐方式。可以是 flex-start(靠左对齐)、center(居中对齐)、flex-end(靠右对齐)、space-between(分散对齐,首尾不留空)、space-around(分散对齐,首尾留空)。

  • align-items: 控制子元素在副轴上对齐方式,可以是 flex-start(顶部对齐)、center(居中对齐)、flex-end(底部对齐)、baseline(按文本基线对齐)、stretch(高度撑满容器)。

  • align-content: 仅在存在换行情况下,控制多行子元素在副轴上对齐方式,可以是 flex-start(顶部对齐)、center(居中对齐)、flex-end(底部对齐)、space-between(分散对齐,首尾不留空)、space-around(分散对齐,首尾留空)、stretch(高度撑满容器)。

子元素属性

  • order: 控制子元素排布顺序,数值越小越靠前,默认为 0

  • flex-grow: 控制子元素放大比例,值为 0 时不放大,为正数时按比例放大。

  • flex-shrink: 控制子元素缩小比例,值为 0 时不缩小,为正数时按比例缩小。

  • flex-basis: 初始宽度,可以是一个固定值或百分比。

  • flex: 以上三个属性的缩写,值为 flex-growflex-shrinkflex-basis 的组合值。默认值为 0 1 auto

  • align-self: 为单个子元素定义对齐方式,覆盖了 align-items 中的设置,可以是 auto(继承父元素的 align-items)、flex-start(顶部对齐)、center(居中对齐)、flex-end(底部对齐)、baseline(按文本基线对齐)、stretch(高度撑满父元素)。

使用技巧

1. 水平垂直居中

使用 Flexbox 最常见的用途就是实现元素的水平垂直居中。我们可以将容器的 display 设为 flex,然后通过 justify-contentalign-items 属性来设置对齐方式。

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

2. 均分剩余空间

有时候我们需要将子元素均分剩余空间,这时我们可以使用 flex-grow 属性。将子元素的 flex-grow 设为一个正数即可均分剩余空间,如果有多个子元素需要进行均分,则需要保证它们的 flex-grow 值相等。

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

3. 排序

使用 order 属性可以调整子元素的排布顺序。数值越小越靠前,默认为 0

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

4. 等高布局

传统的等高布局需要通过 JavaScript 等方式来处理,使用 Flexbox 可以轻松实现。

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

5. 响应式布局

由于 Flexbox 可以轻松实现元素的自适应,因此它非常适合应用于响应式布局中。根据不同的屏幕尺寸,我们可以通过媒体查询来设置容器的宽度和 flex-wrap 属性。

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

优化实例

1. 使用 Flexbox を优化网页头部

在网页的头部通常会有一个导航栏,我们可以使用 Flexbox 对其进行优化。

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

2. 使用 Flexbox 优化图片画廊

图片画廊通常需要展示同时具备等高和等宽两个特性的图片,使用 Flexbox 可以轻松实现。

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

总结

Flexbox 是一种非常灵活的布局方式,可以实现多种繁琐的布局效果。通过本文的介绍,相信读者已经对 Flexbox 的常见属性和使用技巧有了一定的了解,可以在实际开发中灵活运用。

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


猜你喜欢

  • ES11 新特性总结

    ES11(ECMAScript 2020)是 Javascript 的一个大版本更新,它包括了一些新的特性,这些特性将会在前端开发中有很重要的作用。本文将总结一下 ES11 中的几个重要特性,并且给出...

    1 年前
  • GraphQL 的错误处理和异常信息

    GraphQL 作为一种用于构建 API 的新型查询语言,具有很多优势。然而,当我们在使用过程中遇到错误时,如何快速地定位、修复和防范错误,这是一个非常重要且必要的问题。

    1 年前
  • Docker 运行时容器卡死的解决方法

    背景和问题描述 Docker 是一个流行的轻量级容器化技术,它通过将应用程序、依赖项、运行时环境和系统配置打包在一起,以便在任何地方进行部署。然而,有时候 Docker 容器可能会卡死或者停止响应时,...

    1 年前
  • 运用 ES8 静态对象方法之 Object.entries()、Object.values()

    ES8 引入了许多新的特性和静态对象方法,其中 Object.entries() 和 Object.values() 是其中两个值得我们深入学习的方法之一。 Object.entries() Obje...

    1 年前
  • ES6 中的 Map 与 Set 的使用及其差异

    ES6 中的 Map 与 Set 的使用及其差异 随着前端技术的不断更新和发展,ES6 带来了很多新的特性和 API,其中的 Map 和 Set 数据结构也是其中之一。

    1 年前
  • Angular 解决 Input 处理用户输入时循环调用的问题

    在 Angular 中,我们经常会遇到要对组件中的输入属性(Input)进行处理的情况,例如对用户输入的值进行格式化、验证等操作。然而,在处理输入属性时,我们很容易遇到一个问题:每次对输入属性进行修改...

    1 年前
  • SASS 中使用 @function 创建自定义函数的教程

    SASS 中使用 @function 创建自定义函数的教程 SASS 是一种 CSS 预处理器,它可以让我们用更简洁的方式编写 CSS,提高我们的开发效率。其中,@function 是 SASS 中一...

    1 年前
  • ESLint 和 JSHint,选择哪个?

    在前端开发中,代码质量是非常重要的。为了确保代码规范和可读性,前端开发人员通常使用代码检查工具。在这个领域中,ESLint 和 JSHint 是非常知名的两个工具。

    1 年前
  • 关于 ES10 Top Level Await(顶层等待)的使用

    ES10 引入了一项新特性 Top Level Await(顶层等待),它允许在模块的顶层使用 await 关键字,以等待一个 Promise。 理解 Top Level Await 在旧的 Java...

    1 年前
  • RxJS 折叠操作符 scan

    在 RxJS 中,折叠操作符 scan 是一个非常强大的工具,它可以将一个流中所有的值归纳成一个单一的值。与 reduce 类似,但是 scan 的结果流不是一个单独的值,而是一个包含每个中间计算值的...

    1 年前
  • Mongoose 如何使用 Virtuals?

    虽然 Mongoose 的模型定义通常对应 MongoDB 的文档结构,但有时需要通过模型的属性来间接获取其它属性的值,Mongoose 的虚拟属性(Virtuals)就可以实现这一需求。

    1 年前
  • # JAMstack 与 Headless CMS 的完美结合

    JAMstack 与 Headless CMS 的完美结合 随着互联网技术的发展,前端领域也在不断涌现出各种新的技术和概念。其中较为流行的两个技术是 JAMstack 和 Headless CMS。

    1 年前
  • 如何优化 Lambda 函数运行时间

    在实际开发过程中,我们会经常需要使用 AWS Lambda 构建一些简单的应用或处理数据。然而,在大规模数据处理时,Lambda 函数的运行时间非常重要,因为这会直接影响应用程序的性能和用户体验。

    1 年前
  • 如何在 Fastify 中实现文件上传与下载

    Fastify 是一个快速、开源、低开销且松耦合的Node.js Web应用程序框架。它提供了易于使用的API来开发高效的Web服务,是一款非常适合前端使用的框架。

    1 年前
  • Socket.IO 如何处理服务器崩溃的问题

    随着 WebSocket 技术的不断发展,Web 应用中的实时通信需求也越来越强烈。而 Socket.IO 作为一款开源 JavaScript 库,能够轻松地实现实时通信功能,因此被广泛应用于前端开发...

    1 年前
  • Webpack 如何解决 ESLint 报错问题?

    前端开发过程中,我们经常会使用 ESLint 来规范我们的代码,保证代码的可读性和可维护性。但是当我们在使用 Webpack 进行打包的时候,有些情况下会遇到 ESLint 报错的问题,导致我们无法进...

    1 年前
  • 看图学 Flexbox 布局

    Flexbox 布局是一种能够快速解决页面布局难题的 CSS 技巧。无论是面对移动端、PC 端,或是响应式布局,Flexbox 布局都能够帮助开发者快速构建出符合设计要求的页面布局。

    1 年前
  • 如何在 Node.js 中使用 GraphQL 查询语言

    GraphQL 是一种由 Facebook 开源的查询语言和运行时环境。它允许客户端指定要返回的数据,并且只返回客户端请求的数据,这可以提高性能并减少数据传输量。GraphQL 还是一种类型化的查询语...

    1 年前
  • 使用 Redis 管理用户会话状态

    简介 在现代 web 应用程序中,需要对用户进行身份验证、授权以及跟踪其操作状态。为了达到这些目的,我们会使用会话状态机制。会话状态可以帮助我们追踪用户的登陆情况、购物车内容、语言偏好等信息。

    1 年前
  • 如何处理 CSS Grid 中多余的空白格

    CSS Grid 是一种强大的布局系统,它允许我们以一种高效的方式创建复杂的页面布局。然而,在使用 CSS Grid 进行布局时,我们有时会遇到多余的空白格问题,这些空白格可能会破坏我们的布局并浪费空...

    1 年前

相关推荐

    暂无文章