0基础学前端系列 -- 深入理解 HTML 布局

在现代网页设计中,布局是至关重要的一环。良好的布局不仅能提升用户体验,还能使内容更具可读性和美观性。HTML(超文本标记语言)结合 CSS(层叠样式表)为我们提供了多种布局方式。本文将详细介绍流式布局、Flex 布局与 Grid 布局,并结合图表和丰富的代码实例,以便读者更好地理解这些布局方式。


文章目录

        • 一、流式布局
          • 优点:
          • 缺点:
          • 示例代码:
          • 图示:
        • 二、Flex 布局
          • 优点:
          • 缺点:
          • flex属性
          • justify-content属性
          • 示例代码:
          • 图示:
    • Flex 布局的 key 属性包括 `justify-content` 和 `align-items`,它们可以轻松让我们在主轴和交叉轴上对齐和分配空间。例如,上述代码中的 `justify-content: space-between;` 使得每个项之间有平分的空间。
        • 三、Grid 布局
          • 优点:
          • 缺点:
          • Grid 属性的详细介绍
          • 实际应用示例
        • 四、总结

一、流式布局

流式布局(Fluid Layout)是一种自适应布局,通常使用百分比单位来定义元素的宽度和高度。这种布局方式确保页面在不同的屏幕尺寸上都能保留良好的可读性。

优点:
  • 响应式设计:能在各种屏幕上良好显示,适应不同的设备。
  • 内容为王:元素的大小依据内容而变化,增强可读性。
缺点:
  • 控制较差:在某些情况下,元素由于窗口大小过小可能会变形或重叠。
示例代码:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>流式布局示例</title><style>.container {width: 100%;background-color: lightgray;text-align: center;}.item {width: 50%;background-color: lightblue;margin: 10px auto;padding: 20px;box-sizing: border-box;}</style>
</head>
<body><div class="container"><div class="item">这是一个流式布局的示例。</div></div>
</body>
</html>
图示:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

流式布局通过设置元素的宽度为百分比值,使其能够随着父容器的宽度变化而变化,保持内容访问的清晰性和可读性。


二、Flex 布局

Flex 布局(Flexible Box Layout)是一种一维布局模型,它提供了更加灵活且高效的方式来排列、对齐和分配空间。Flex 布局可用于水平或垂直方向的布局,简单易用。

优点:
  • 简单易用:通过设置 display: flex; 很容易启用。
  • 灵活性高:子元素能够自动伸缩,适应父容器的尺寸。
  • 适应性强:Flex 布局对于响应式设计非常友好,能够根据浏览器窗口的大小自动调整元素的大小和位置。
  • 对齐能力:通过属性如 align-itemsjustify-content,开发者可以轻松实现复杂的对齐需求,而无需使用分页符或其他布局技巧。
  • 性能优化:Flex 布局是现代浏览器的标准,性能上与其他布局相比通常会有更好的表现,尤其是当涉及到大量元素进行排列时。
缺点:
  • 不适合复杂的多维布局:对于需要同时处理行和列的复杂布局,Grid 布局可能更适合;Flex 布局主要设计为一维布局。
flex属性

在 CSS Flexbox 中,flex 属性是一个综合性属性,用于控制可伸缩(flexible)元素的大小和布局。flex: 1; 是一个简写形式,它实际上是 flex-grow, flex-shrinkflex-basis 三个属性的组合。让我们逐个了解这三个属性的含义:
1. flex-grow

  • 定义:表示该元素相对于同一容器中其他 flex 元素的可伸缩比例。
  • :如果是 1,表示该元素在父容器中有均等的空间分配权,可以扩展以填充可用的空间;如果是 0,则表示不扩展。
  • 示例:如果容器有多个子元素,它们的 flex-grow 属性为 1,那么它们会平分剩余的空间。
  • 详细说明flex-grow 的默认值为 0。如果所有子元素都有 flex-grow: 1,则它们在父容器中平分剩余空间。
  • 使用实例:设定某个元素的 flex-grow2,而其他元素为 1,那么当父容器中有剩余空间时,flex-grow: 2 的元素将占用两倍于其他元素的空间。

2. flex-shrink

  • 定义:表示该元素在空间不足的情况下的收缩能力。
  • 1 表示该元素可以根据需要收缩;0 则表示不允许收缩。
  • 示例:如果多个子元素的 flex-shrink 都是 1,那么在空间不足时,它们会按比例收缩。
  • 详细说明flex-shrink 的默认值也是 1,表示容器空间不足时会正常收缩。收缩的比例根据元素的 flex-shrink 值进行分配。
  • 使用实例:若第一个元素的 flex-shrink 值为 0,即使空间不足也不会收缩,其他元素将根据它们的 flex-shrink 值进行收缩。

3. flex-basis

  • 定义:定义了在分配空间之前,子元素的初始主尺寸(即宽度或高度,取决于主轴方向)。
  • :可以是一个具体的大小值(比如 100px 或者 20%),也可以是 auto,表示使用内容的大小。
  • 示例:如果 flex-basis0,则元素会根据 flex-grow 的比例来确定大小。
  • 详细说明flex-basis 的默认值为 auto,表示元素的初始大小将根据其内容的大小自动调整。如果设置为具体值,例如 100px,则在空间分配时会从这个大小出发进行扩展或收缩。
  • 使用实例:将 flex-basis 设置为 0,可使元素的大小完全依赖于 flex-grow,适用于均分空间的场景。

在这里插入图片描述

flex: 1; 的完整含义

如前所述,flex: 1; 实际上是 flex-grow: 1; flex-shrink: 1; flex-basis: 0; 的缩写形式。这是 Flex 布局中非常常见的用法,用于创建均匀分布的元素。相当于:

flex: 1 1 0;
  • flex-grow: 1; - 该元素会占据可用空间的一部分,平分空间。
  • flex-shrink: 1; - 该元素可以收缩,以适应父容器的空间。
  • flex-basis: 0; - 初始大小为 0,表示在计算空间时,不会占用额外的空间。
justify-content属性

justify-content 是 CSS Flexbox 和 CSS Grid 布局中的一个属性,用于定义沿主轴(Main Axis)对齐项目的方式。它控制了子元素在容器中如何分配剩余空间,适用于水平(默认主轴)或垂直(当主轴是垂直时)对齐。

justify-content 可以使用多个不同的值,每个值将影响子元素在容器中的排列方式。以下是常用的 justify-content 的值及其含义:

  1. flex-start

    • 含义:将所有子元素靠近主轴的起始位置(左侧或顶部)。
    • 效果:子元素在容器的一侧对齐。
    • 示例:如果容器是水平的,子元素会靠左对齐。
    • 典型用途:用于左对齐或顶部对齐。适合需要固定起始位置时的布局。
  2. flex-end

    • 含义:将所有子元素对齐到主轴的结束位置(右侧或底部)。
    • 效果:子元素在容器的另一侧对齐。
    • 示例:如果容器是水平的,子元素会靠右对齐。
    • 典型用途:用于右对齐或底部对齐。适合布局中需要聚焦右侧或底部元素的情景。
  3. center

    • 含义:将所有子元素居中对齐。
    • 效果:子元素将在主轴的中间位置。
    • 示例:所有子元素都会在容器的中心位置同等分布。
    • 典型用途:适合需要在容器中均匀分布所有元素的情况,如导航条或按钮组。
  4. space-between

    • 含义:在子元素之间平均分配空间。第一个元素靠近主轴的起始位置,最后一个元素靠近主轴的结束位置。
    • 效果:子元素之间会有等量的空间,但是两端不会有额外的空间。
    • 示例:如果有 3 个元素,它们会在整个容器宽度内平均分配空间,之间有间距,但两端没有。
    • 典型用途:用于需要在多个元素之间均匀分空间的布局,例如产品展示或列表项。
  5. space-around

    • 含义:在每个子元素周围平均分配空间。
    • 效果:每个子元素前后都有间距,两端会有一半的空间等于各个子元素之间的空间。
    • 示例:如果有 3 个元素,元素之间的间距相等,并且两端也有相等的空间。
    • 典型用途:适用于需要在每个元素之间留出间隔,同时保留两端也有空间的情况,例如在视觉上希望更为紧凑的内容展示。
  6. space-evenly

    • 含义:在子元素之间和两端平均分配相同的空间。
    • 效果:每个子元素之间的间距是相同的,包括两端的空间。
    • 示例:若容器宽度为 600px,3 个元素之间的间距和两边的间距总是相同。
    • 典型用途:在需要确保两端和元素之间的间隔完全一致的布局中可以使用,如等距离摆放的按钮或图标。
示例代码:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Flex 布局示例</title><style>.flex-container {display: flex;justify-content: space-between;background-color: lightgray;padding: 10px;}.flex-item {flex: 1;margin: 10px;background-color: lightcoral;padding: 20px;box-sizing: border-box;}</style>
</head>
<body><div class="flex-container"><div class="flex-item">项1</div><div class="flex-item">项2</div><div class="flex-item">项3</div></div>
</body>
</html>
图示:

在这里插入图片描述
在这里插入图片描述

Flex 布局的 key 属性包括 justify-contentalign-items,它们可以轻松让我们在主轴和交叉轴上对齐和分配空间。例如,上述代码中的 justify-content: space-between; 使得每个项之间有平分的空间。

三、Grid 布局

Grid 布局(Grid Layout)是一个二维布局系统,能够在行和列中排列元素。Grid 布局适合需要复杂结构的网页设计。

优点:
  1. 灵活的布局控制

    • Grid 布局允许开发者同时操控行和列,使得设计更为灵活。与传统布局方式相比,Grid 布局能够提供更精确的网格控制。
  2. 清晰的布局结构

    • 通过定义网格的行和列,可以轻松理解和维护布局。元素在网格中的位置通过简单的行和列编号表示,便于后期的修改和调整。
  3. 自适应设计

    • Grid 布局允许使用相对单位,如百分比(%)和 fr 单位(分数单位),从而实现响应式设计。这使得布局可以自适应不同的屏幕尺寸和分辨率。
  4. 对齐和间距的简单处理

    • Grid 提供了丰富的对齐选项,开发者可以轻松控制元素的对齐方式(例如,水平中心、垂直顶部等)以及元素之间的间距。
缺点:
  1. 学习曲线

    • 对于初学者,Grid 布局的概念可能会比较复杂,尤其是在定义较大网格时。理解和运用 Grid 的高级功能需要更深入的学习。
  2. 浏览器兼容性

    • 尽管主流浏览器大多支持 Grid 布局,但在某些老旧版本的浏览器中可能存在不完全支持的情况,因此在使用时需要考虑兼容性。
Grid 属性的详细介绍
  1. grid-template-rowsgrid-template-columns

grid-template-rowsgrid-template-columns 属性分别用于设置 CSS Grid 布局中网格的行高和列宽。这两个属性的灵活性与相似性使得开发者可以根据具体设计需求创建多样的布局。以下将详细探讨这两个属性的使用。

1.1. 固定的列宽和行高

通过直接指定具体数值,可以创建具有固定宽度和高度的网格。这样的方式简单明了,尤其适用于对尺寸要求严格的场景。

.container {display: grid;/* 定义三列,具体宽度为 250px、150px 和 250px */grid-template-columns: 250px 150px 250px;grid-gap: 10px; /* 行列间隙 *//* 定义两行,行高均为 60px */grid-template-rows: 60px 60px;
}

在上述代码中,grid-template-columns 设置为 250px 150px 250px,第一列和第三列宽度为 250px,第二列宽度为 150px。grid-template-rows 表示两行的高度均为 60px。

1.2. 使用 repeat() 函数简化设置

当存在重复值的情况时,可以利用 repeat() 函数来简化样式代码。此函数接收两个参数:重复的次数和所需的值。

.container-1 {display: grid;grid-template-columns: 250px 150px 250px;grid-gap: 10px;/* 创建两行,每行高度均为 60px */grid-template-rows: repeat(2, 60px);
}

此代码依旧定义了两行的行高为 60px,但使用 repeat(2, 60px) 使得代码结构更为简洁。

1.3. auto-fill 关键字的应用

auto-fill 关键字用于自动填充元素,使得列或行在空间允许的情况下尽可能地增加数量。

.container-2 {display: grid;grid-template-columns: repeat(auto-fill, 250px);grid-gap: 10px;grid-auto-rows: 60px;
}

在这个示例中,定义的列宽为 250px,具体的列数量则由浏览器决定,会根据容器的宽度自动填充更多列。

1.4. fr 单位助力灵活布局

fr 是 Grid 布局的新单位,表示在容器中可用空间的比例。这种单位允许创建灵活的响应式设计。

.container-3 {display: grid;grid-template-columns: 250px 1fr 3fr;grid-gap: 10px;grid-auto-rows: 60px;
}

此代码中,第一列宽度为 250px,第二列将占用剩余空间的 1fr,第三列占用 3fr。这样,第二列与第三列的宽度会根据容器内剩余空间的比例进行分配。

1.5. minmax() 函数用以设定边界

minmax() 函数允许为网格元素设置最小和最大尺寸,从而实现更好的布局控制。

.container-4 {display: grid;grid-template-columns: 1fr 1fr minmax(350px, 3fr);grid-gap: 10px;grid-auto-rows: 60px;
}

在这个示例中,第三列宽度的最小值为 350px,最大值为剩余空间的三倍。这样做提高了在各种屏幕尺寸下的灵活性。

1.6. auto 关键字的使用

使用 auto 关键字可以让浏览器根据内容自动调整列的宽度,这种方式适合不确定的内容尺寸。

.container-5 {display: grid;grid-template-columns: 120px auto 120px;grid-gap: 10px;grid-auto-rows: 60px;
}

在该代码中,第一和第三列的宽度为 120px,而中间列的宽度则由内容决定,自动适应。

  1. grid-gapgap

    • 用于设置网格项之间的间距。通过设置该属性可以定义行和列之间的间距。 grid-row-gap 属性、 grid-column-gap 属性分别设置行间距和列间距。 grid-gap 属性是两者的简写形式
  2. grid-area

    • 用于在网格中确定某个元素所占的区域。可以指定元素在网格中的开始和结束行与列。

    示例:

    .grid-item {grid-area: 1 / 1 / 3 / 3; /* 占据第一行到第二行,第一列到第二列的区域 */
    }
    
  3. justify-itemsalign-items

    • 这两个属性用于定义网格中每个子元素在定义的单元格内的对齐方式。
    • justify-items:控制元素在水平方向上的对齐方式。
    • align-items:控制元素在垂直方向上的对齐方式。
  4. grid-template-areas

    • 允许你通过命名区域创建更明确的布局。通过给特定的区域命名,提供了非常直观的视觉方式去理解和维护布局。

    示例:

    .grid-container {grid-template-areas:'header header header''main aside aside''footer footer footer';
    }
    
实际应用示例

以下是一个更复杂的应用示例,展示如何结合上述属性创建一个简单的网页布局:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Grid 布局示例</title><style>.grid-container {display: grid;grid-template-columns: 1fr 2fr; /* 第一列宽度为第二列的一半 */grid-template-rows: 100px auto 100px; /* 三行,高度不同 */grid-gap: 10px; /* 行列间距 */height: 100vh; /* 视口高度 */background-color: lightgray;}.header {grid-column: 1 / 3; /* 跨越两列 */grid-row: 1; /* 第一行 */background-color: lightblue;}.main {grid-column: 1; /* 第一列 */grid-row: 2; /* 第二行 */background-color: lightcoral;}.aside {grid-column: 2; /* 第二列 */grid-row: 2; /* 第二行 */background-color: lightgreen;}.footer {grid-column: 1 / 3; /* 跨越两列 */grid-row: 3; /* 第三行 */background-color: lightyellow;}</style>
</head>
<body><div class="grid-container"><div class="header">头部</div><div class="main">主要内容</div><div class="aside">侧边栏</div><div class="footer">底部</div></div>
</body>
</html>

在这个示例中,网格布局定义了一个包含头部、主要内容、侧边栏和底部的网页结构。grid-template-columnsgrid-template-rows 允许开发者灵活地为每部分指定大小和位置。
在这里插入图片描述


四、总结

在网页设计中,选择合适的布局方式可以极大提升网页的用户体验。流式布局适合于自适应内容的场景,Flex 布局适用于一维排列,而 Grid 布局则是处理复杂二维布局的理想选择。了解这些布局特点后,我们可以根据需求选择最合适的布局方式,从而构建出更加美观且功能丰富的网页。

希望这篇博文能帮助您更好地理解 HTML 中的布局方式,如有更多问题,欢迎交流讨论!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/481022.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Springboot集成通义大模型

1.先到阿里云平台开头阿里云白炼账号&#xff0c;创建apiKey 2. 引入maven依赖 <dependency><groupId>com.alibaba</groupId><artifactId>dashscope-sdk-java</artifactId><version>2.8.3</version></dependency><!-- htt…

哈希表算法题

目录 题目一——1. 两数之和 - 力扣&#xff08;LeetCode&#xff09; 1.1.暴力解法1 1.2.暴力解法2 1.2.哈希表解法 题目二——面试题 01.02. 判定是否互为字符重排 - 力扣&#xff08;LeetCode&#xff09; 2.1.哈希表解法 2.2.排序解法 题目三——217. 存在重复元…

Cookie跨域

跨域&#xff1a;跨域名&#xff08;IP&#xff09; 跨域的目的是共享Cookie。 session操作http协议&#xff0c;每次既要request&#xff0c;也要response&#xff0c;cookie在创建的时候会产生一个字符串然后随着response返回。 全网站的各个页面都会带着登陆的时候的cookie …

个人博客接入github issue风格的评论,utteranc,gitment

在做个人博客的时候&#xff0c;如果你需要评论功能&#xff0c;但是又不想构建用户体系和评论模块&#xff0c;那么可以直接使用github的issue提供的接口&#xff0c;对应的开源项目有utteranc和gitment&#xff0c;尤其是前者。 它们的原理是一样的&#xff1a;在博客文章下…

React第十节组件之间传值之context

1、Context 使用creatContext() 和 useContext() Hook 实现多层级传值 概述&#xff1a; 在我们想要每个层级都需要某一属性&#xff0c;或者祖孙之间需要传值时&#xff0c;我们可以使用 props 一层一层的向下传递&#xff0c;或者我们使用更便捷的方案&#xff0c;用 creatC…

JVM_垃圾收集器详解

1、 前言 JVM就是Java虚拟机&#xff0c;说白了就是为了屏蔽底层操作系统的不一致而设计出来的一个虚拟机&#xff0c;让用户更加专注上层&#xff0c;而不用在乎下层的一个产品。这就是JVM的跨平台&#xff0c;一次编译&#xff0c;到处运行。 而JVM中的核心功能其实就是自动…

RPA:电商订单处理自动化

哈喽&#xff0c;大家好&#xff0c;我是若木&#xff0c;最近闲暇时间较多&#xff0c;于是便跟着教程做了一个及RPA&#xff0c;谈到这个&#xff0c;可能很多人并不是很了解&#xff0c;但是实际上&#xff0c;这玩意却遍布文末生活的边边角角。话不多说&#xff0c;我直接上…

字符型注入‘)闭合

前言 进行sql注入的时候&#xff0c;不要忘记闭合&#xff0c;先闭合再去获取数据 步骤 判断是字符型注入 用order by获取不了显位&#xff0c;select也一样 是因为它是’)闭合&#xff0c;闭合之后&#xff0c;就可以获取数据了 最后就是一样的步骤

springboot车辆管理系统设计与实现(代码+数据库+LW)

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了车辆管理系统的开发全过程。通过分析车辆管理系统管理的不足&#xff0c;创建了一个计算机管理车辆管理系统的方案。文章介绍了车辆管理系统的系统分析部分&…

C#.Net筑基 - 常见类型

01、结构体类型Struct 结构体 struct 是一种用户自定义的值类型&#xff0c;常用于定义一些简单&#xff08;轻量&#xff09;的数据结构。对于一些局部使用的数据结构&#xff0c;优先使用结构体&#xff0c;效率要高很多。 可以有构造函数&#xff0c;也可以没有。因此初始化…

Unity项目性能优化列表

1、对象池 2、检查内存是否泄露。内存持续上升(闭包、委托造成泄露) 3、检查DrawCall数量&#xff0c;尽量减少SetPassCall 4、尽量多的利用四种合批 动态合批(Dynamic Batching)静态合批(Static Batching)GPUInstancingSRP Batcher 动态合批消耗内存把多个网格组合在一起合并…

ComfyUI | ComfyUI桌面版发布,支持winmac多平台体验,汉化共享等技巧!(内附安装包)

ComfyUI 桌面版正式推出&#xff0c;支持 Windows 与 macOS 等多平台&#xff0c;为 AI 绘画爱好者带来全新体验。其安装包便捷易用&#xff0c;开启了轻松上手之旅。汉化共享功能更是一大亮点&#xff0c;打破语言障碍&#xff0c;促进知识交流与传播。在操作上&#xff0c;它…

贪心-区间问题——acwing

题目一&#xff1a;最大不相交区间数量 908. 最大不相交区间数量 - AcWing题库 分析 跟区间选点一样。区间选点&#xff1a;贪心——acwing-CSDN博客 代码 #include<bits/stdc.h> using namespace std;const int N 1e510;struct Range {int l, r;// 重载函数bool op…

【C语言】字符串左旋的三种解题方法详细分析

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C语言 文章目录 &#x1f4af;前言&#x1f4af;题目描述&#x1f4af;方法一&#xff1a;逐字符移动法&#x1f4af;方法二&#xff1a;使用辅助空间法&#x1f4af;方法三&#xff1a;三次反转法&#x1f4af;方法对…

肿瘤微环境中单细胞的泛癌分类

scRNA-seq可以揭示肿瘤微环境 (TME) 内细胞异质性的宝贵见解&#xff0c;scATOMIC是一种用于恶性和非恶性细胞的注释工具。在 300,000 个癌症、免疫和基质细胞上训练了 scATOMIC&#xff0c;为 19 种常见癌症定义了一个泛癌症参考&#xff0c;scATOMIC优于当前的分类方法。在 2…

《算法导论》英文版前言To the teacher第3段研习录:题海战术有没有?

【英文版】 We have included 957 exercises and 158 problems. Each section ends with exercises, and each chapter ends with problems. The exercises are generally short questions that test basic mastery of the material. Some are simple self-check thought exer…

docker使用(镜像、容器)

docker基础使用 文章目录 前言1.镜像操作1.1命令介绍1.2.案例实操1.2.1查找镜像1.2.2下载镜像1.2.3查看当前镜像 2.容器操作2.1命令2.1.1容器创建与启动2.1.2. 容器查看2.1.3. 容器操作2.1.4. 容器删除2.1.5. 容器日志2.1.6. 容器内文件操作2.1.7. 容器内命令执行2.1.8. 其他常…

自编码器(二)

自编码器到底好在哪里&#xff1f;当我们把一个高维度的图片&#xff0c;变成一个低维度的向量的时候&#xff0c;到 底带来什么样的帮助呢&#xff1f;我们来设想一下&#xff0c;自编码器这件事情它要做的&#xff0c;是把一张图片压缩 又还原回来&#xff0c;但是还原这件事…

springboot旅游管理系统的设计与实现

springboot旅游管理系统的设计与实现 如需源码pc端&#x1f449;&#x1f449;&#x1f449;资源 手机端&#x1f449;&#x1f449;&#x1f449;资源 摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于…

SQL进阶——子查询与视图

在SQL中&#xff0c;子查询和视图是两种强大的技术&#xff0c;用于处理复杂的查询、提高代码的重用性以及优化查询性能。子查询允许开发者在查询中嵌套其他查询&#xff0c;而视图则是对复杂查询的封装&#xff0c;可以简化开发工作并提高代码的可维护性。 本章将深入探讨如何…