• Web前端—移动Web第四天(媒体查询、Bootstrap、综合案例-alloyTeam)


    版本说明

    当前版本号[20231122]。

    版本修改说明
    20231122初版

    目录

    移动 Web 第五天

    响应式布局方案

    • 媒体查询
    • Bootstrap框架

    01-媒体查询

    基本写法

    1682667975274

    • max-width:最大宽度(小于等于)
    • min-width:最小宽度(大于等于)

    书写顺序

    • min-width(从
    • max-width(从

    如果不按顺序去写,按css的特性来说,后面的css就会重叠前面的css样式,致使前面的无法生效。

    案例-左侧隐藏

    需求:网页宽度小于等于768px则隐藏左侧区域

    1682668088236

    • HTML 结构
    "box">
    "left">left
    "main"> 响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果响应式网页效果
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • CSS 样式
    .box {
      display: flex;
    }
    
    .left {
      width: 300px;
      height: 500px;
      background-color: pink;
    }
    
    .main {
      flex: 1;
      height: 500px;
      background-color: skyblue;
    }
    
    @media (max-width: 768px) {
      .left {
        display: none;
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    1、先建立初步的模型,同时放了一段800字左右的文章作为测试。

    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>媒体查询title>
        <style>
            *{
                margin: 0;
                padding: 0;
            }
        style>
    head>
    <body>
        <div class="box">
            <div class="left">leftdiv>
            <div class="main">
                余华,中国当代著名作家,代表作品有《活着》、《许三观卖血记》等。以下是一段来自余华的《活着》的原文段落:
    
    那天,我去看福贵。他正在田里干活,看到我,就放下手里的锄头,走过来跟我打招呼。他的脸上挂着笑容,那是一种发自内心的笑容,让我想起了我们小时候一起玩耍的日子。
    
    福贵告诉我,他现在的生活虽然艰苦,但他已经很满足了。他说:“我现在有地种,有饭吃,还有老婆孩子陪着我,这就够了。”我看着他那张布满皱纹的脸,心里不禁感叹:这个曾经的富家子弟,如今已经变成了一个勤劳朴实的农民。
    
    我们一起走在乡间的小路上,福贵一边走,一边给我讲述着他的故事。他说,自从他的父亲去世后,他就开始了艰难的生活。他先是卖掉了家里的地和房子,后来又把妻子和孩子送到了城里去打工。他自己则留在了乡下,靠种地为生。
    
    福贵说:“那时候,我真的觉得活着没有什么意义。每天辛辛苦苦地干活,却换来的只是一碗稀饭。可是,我不能死,我要活下去,为了我的家人。”他的话让我想起了那些年我们在城里的日子,那时候我们总是抱怨生活的艰辛,却从未想过要放弃。
    
    我们走到了一片麦田前,福贵指着那片金黄的麦子说:“你看,这就是我现在的生活。虽然辛苦,但我觉得很幸福。因为我知道,这片麦子是我辛勤劳动的结果,它们会让我的家人吃饱穿暖。”我看着他那充满自信的眼神,心里不禁为他感到骄傲。
    
    夕阳西下,我们站在田埂上,看着远处的山峦和田野。福贵说:“你知道吗?我觉得我现在过得比那些有钱人还要幸福。因为他们虽然有钱,但他们失去了生活的意义。而我呢?虽然穷,但我活得充实。”我听着他的话,心里不禁为他的豁达和乐观感到敬佩。
    
    临别时,福贵紧紧地握住我的手,说:“谢谢你来看我,希望我们以后还能常常见面。”我点点头,心里默默地祝愿他的生活越来越好。
    
    那天,我从福贵那里学到了很多。他让我明白了生活的真谛不在于物质的丰富,而在于心灵的满足。只要我们用心去感受生活的美好,那么,无论我们身处何地,都能找到幸福的源泉。
            div>
        div>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    image-20231121190838694

    2、加入左侧栏区域。

    .left{
                width: 300px;
                height: 500px;
                background-color: pink;
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    image-20231121190924602

    3、给文字区域添加高,并定好这个元素作为弹性容器,其子元素将按照弹性布局进行排列。

     .box{
                display: flex;
            }
    
    .main{
                height: 500px;
                background-color: skyblue;
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    image-20231121191149167

    4、给予固定宽高,让flex为1,把left的宽度满足后,剩下的区域均由main来占据。

    .main{
                flex: 1;
                height: 500px;
                background-color: skyblue;
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    image-20231121191336699

    5、实现了当网页宽度小于等于768px,就隐藏左侧区域。

     @media (max-width : 768px) {
                .left{
                    display: none;
                }
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    image-20231121191725728

    image-20231121191747090

    媒体查询-完整写法

    1682668186585

    关键词 / 逻辑操作符
    • and
    • only
    • not
    媒体类型

    媒体类型用来区分设备类型

    • screen:屏幕设备
    • 打印预览:print
    • 阅读器:speech
    • 不区分类型:all
    媒体特性
    • 视口宽高:width / height
    • 视口最大宽高:max-width ;max-height
    • 视口最小宽高:min-width;min-height
    • 屏幕方向:orientation
      • protrait:竖屏
      • landscape:横屏

    媒体查询-外部CSS

    1682668446411

    02-Bootstrap

    简介

    Bootstrap 是由 Twitter 公司开发维护的前端 UI 框架,它提供了大量编写好的 CSS 样式,允许开发者结合一定 HTML 结构及JavaScript,快速编写功能完善的网页及常见交互效果。

    中文官网: https://www.bootcss.com/

    想查看更多配置可点击Bootstrap中文文档:[Bootstrap中文文档](Bootstrap 入门 · Bootstrap v5 中文文档 v5.3 | Bootstrap 中文网 (bootcss.com))

    嫌上面中文少的可以点这个:Bootstrap中文网

    使用步骤

    下载

    下载:Bootstrap V5中文文档 → 进入中文文档 → 下载 →下载 Bootstrap 生产文件

    1682668529209

    使用
    1. 引入 Bootstrap CSS 文件

      注:记得是:/Bootstrap/css/bootstrap.min.css!!!不要一下子tab就选了/Bootstrap/css/bootstrap-grid.min.css.

    <link rel="stylesheet" href="./Bootstrap/css/bootstrap.min.css">
    
    • 1
    1. 调用类名: container 响应式布局版心类
    <div class="container">测试div>
    
    • 1

    1、做个案例来侧试 Bootstrap 的使用方法。

    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>bootstrap使用title>
        <link rel="stylesheet" href="/Bootstrap/css/bootstrap.min.css">
        <style>
            div{
                height: 50px;
                background-color: pink;
            }
        style>
    head>
    <body>
        <div class="container">1div>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    image-20231121195151964

    2、且还是响应式,根据不同的宽度,div盒子也能呈现不同的形状:

    image-20231121195334605

    image-20231121195353405

    栅格系统

    作用:响应式布局

    栅格化是指将整个网页的宽度分成12等份,每个盒子占用的对应的份数

    例如:一行排4个盒子,则每个盒子占 3份 即可(12 / 4 = 3)

    1682668611644

    • row 类:行,可以让内容在一行排(flex布局)

    完整网格示例如下:

    image-20231121200812778

    在不同的视口区间,版心宽度要不同,才能做到不同的响应效果。子集排列方式也要不一样,调用类名就能实现。

    全局样式

    按钮

    1682668666364

    image-20231121201353604

    类名

    • btn:默认样式
    • btn-success:成功
    • btn-warning:警告
    • ……
    • 按钮尺寸:btn-lg / btn-sm
    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Documenttitle>
        <link rel="stylesheet" href="../Bootstrap/css/bootstrap.min.css">
    head>
    <body>
        <button class="btn btn-danger">按钮1button>
        <button class="btn btn-success">按钮2button>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    image-20231121204433633

    表格

    1682668706851

    表格类:

    • table:默认样式
    • table-striped:隔行变色
    • table-success:表格颜色
    • ……

    组件

    1.引入样式表

    2.引入 js 文件

    3.复制结构,修改内容

    字体图标

    下载

    导航 / Extend:图标库 → 安装 → 下载安装包 → bootstrap-icons-1.X.X.zip

    使用
    1. 复制 fonts 文件夹到项目目录
    2. 网页引入 bootstrap-icons.css 文件
    3. 调用 CSS 类名(图标对应的类名)
    4. 前面加上“ bi- ”。
    <i class="bi-android2">i>
    
    • 1

    image-20231121211229935

    03-综合案例-alloyTeam

    image-20231121233516051

    准备工作

    1682668919871

    • HTML 结构

      注:这里引用的css顺序不得调换位置!先是bootstrap.min.css,再是bootstrap-icons.css ,最后才是index.css.

    <title>腾讯全端title>
    <link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
    
    <link rel="stylesheet" href="./Bootstrap/css/bootstrap.min.css">
    <link rel="stylesheet" href="./Bootstrap/font/bootstrap-icons.css">
    <link rel="stylesheet" href="./css/index.css">
    
    
    
    <script src="./Bootstrap/js/bootstrap.min.js">script>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • less 样式
    // out: ../css/
    
    • 1

    头部导航

    • HTML 结构
    
    <nav class="navbar navbar-expand-lg bg-body-tertiary fixed-top">
      <div class="container">
        <a class="navbar-brand" href="#"><img src="./assets/images/logo.png" alt="">a>
        <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
          <span class="navbar-toggler-icon">span>
        button>
        <div class="collapse navbar-collapse" id="navbarNav">
          <ul class="navbar-nav">
            <li class="nav-item">
              <a class="nav-link active" aria-current="page" href="#">首页a>
            li>
            <li class="nav-item">
              <a class="nav-link" href="#">博客a>
            li>
            <li class="nav-item">
              <a class="nav-link" href="#">Githuba>
            li>
            <li class="nav-item">
              <a class="nav-link" href="#">TWeb Confa>
            li>
            <li class="nav-item">
              <a class="nav-link" href="#">SuperStara>
            li>
            <li class="nav-item">
              <a class="nav-link" href="#">Web前端导航a>
            li>
            <li class="nav-item">
              <a class="nav-link" href="#">关于a>
            li>
          ul>
        div>
      div>
    nav>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • less 样式
    // 导航
    .bg-body-tertiary {
      background-color: transparent !important;
      .navbar-collapse {
        flex-grow: 0;
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    1、引入导航栏,修改背景颜色。

    .bg-light{
        background-color: pink !important;
    }
    
    • 1
    • 2
    • 3

    image-20231121234941259

    image-20231121235844837

    轮播图图片

    • HTML 结构
    
    <div id="carouselExampleIndicators" class="carousel slide">
      <div class="carousel-indicators">
        <button type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide-to="0" class="active" aria-current="true" aria-label="Slide 1">button>
        <button type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide-to="1" aria-label="Slide 2">button>
        <button type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide-to="2" aria-label="Slide 3">button>
        <button type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide-to="3" aria-label="Slide 4">button>
      div>
      <div class="carousel-inner">
        <div class="carousel-item active">
          
        div>
        <div class="carousel-item">
          
        div>
        <div class="carousel-item">
          
        div>
        <div class="carousel-item">
          
        div>
      div>
      <button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide="prev">
        <span class="carousel-control-prev-icon" aria-hidden="true">span>
        <span class="visually-hidden">Previousspan>
      button>
      <button class="carousel-control-next" type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide="next">
        <span class="carousel-control-next-icon" aria-hidden="true">span>
        <span class="visually-hidden">Nextspan>
      button>
    div>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • less 样式
    .carousel {
      .carousel-item {
        height: 500px;
        background-size: cover;
        background-position: center 0;
      }
      .carousel-item:nth-child(1) {
        background-image: url(../assets/uploads/banner_1.jpg);
      }
      .carousel-item:nth-child(2) {
        background-image: url(../assets/uploads/banner_2.jpg);
      }
      .carousel-item:nth-child(3) {
        background-image: url(../assets/uploads/banner_3.jpg);
      }
      .carousel-item:nth-child(4) {
        background-image: url(../assets/uploads/banner_4.jpg);
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    1、插入轮播图所需图片。

     <div class="carousel-item active">
            div>
            <div class="carousel-item">
            div>
            <div class="carousel-item">
            div>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    // 轮播图
    .carousel{
    
        .carousel-item{
            height: 500px;
            background-image: url(../assets/uploads/banner_1.jpg);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    image-20231122000915563

    2、将四张照片均放进去,并把下面的轮播按钮设为四个。

    <button type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide-to="0" class="active" aria-current="true" aria-label="Slide 1">button>
            <button type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide-to="1" aria-label="Slide 2">button>
            <button type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide-to="2" aria-label="Slide 3">button>
            <button type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide-to="3" aria-label="Slide 4">button>
            div>
            <div class="carousel-inner">
            <div class="carousel-item active">
            div>
            <div class="carousel-item">
            div>
            <div class="carousel-item">
            div>
            <div class="carousel-item">
            div>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    // 轮播图
    .carousel{
    
        .carousel-item{
            height: 500px;
        }
         .carousel-item:nth-child(1){
             background-image: url(../assets/uploads/banner_1.jpg);
        }
    
        .carousel-item:nth-child(2){
            background-image: url(../assets/uploads/banner_2.jpg);
        }
    
        .carousel-item:nth-child(3){
            background-image: url(../assets/uploads/banner_3.jpg);
        }
    
        .carousel-item:nth-child(4){
            background-image: url(../assets/uploads/banner_4.jpg);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    image-20231122001445302

    3、图片太大,要记得缩放。

    .carousel-item{
            height: 500px;
            background-size: cover;
            background-position: center 0;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    image-20231122001702106

    轮播图响应式

    • less 样式
    // 轮播图: 小于768图片高度250 max;大于等于768图片高度400 min;大于等于992图片高度500
    .carousel {
      // 响应式 → 媒体查询
      @media (max-width: 768px) {
        .carousel-item {
          height: 250px;
        }
      }
    
      @media (min-width: 768px) {
        .carousel-item {
          height: 400px;
        }
      }
      @media (min-width: 992px) {
        .carousel-item {
          height: 500px;
        }
      }
    
    
      .carousel-item {
        // height: 500px;
        background-size: cover;
        background-position: center 0;
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    开源项目响应式

    • HTML 结构
    
    <div class="project container">
      <div class="title">
        <h2>OpenSource / 开源项目h2>
        <p>种类众多的开源项目,让你爱不释手p>
      div>
      <div class="content">
        <div class="row">
          <div class="col-lg-3 col-md-6">1div>
          <div class="col-lg-3 col-md-6">2div>
          <div class="col-lg-3 col-md-6">3div>
          <div class="col-lg-3 col-md-6">4div>
        div>
      div>
    div>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • less 样式
    // 开源项目
    // 视口宽度大于992;一行排4个盒子  col-lg-3
    // 视口宽度大于768;一行排2个盒子  col-md-6
    .project {
      margin-top: 60px;
      text-align: center;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    1、设置中间文字。

        
        <div class="project container">
            <div class="title">
                <h2>OpenSource / 开源项目h2>
                <p>种类众多的开源项目,让你爱不释手p>
            div>
        div>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    // 开源项目
    .project{
        margin-top: 60px;
        text-align: center;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    image-20231122002916134

    2、进一步修改细节。

    1
    2
    3
    4
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    开源项目内容布局

    • HTML 结构
    
    <div class="project container">
      <div class="title">
        <h2>OpenSource / 开源项目h2>
        <p>种类众多的开源项目,让你爱不释手p>
      div>
      <div class="content">
        <div class="row">
          <div class="col-lg-3 col-md-6"><a href="#">1a>div>
          <div class="col-lg-3 col-md-6"><a href="#">1a>div>
          <div class="col-lg-3 col-md-6"><a href="#">1a>div>
          <div class="col-lg-3 col-md-6"><a href="#">1a>div>
        div>
      div>
    div>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • less 样式
    .project {
      margin-top: 60px;
      text-align: center;
      .row {
        div {
          margin-bottom: 10px;
          height: 200px;
          // background-color: pink;
          a {
            // 块级的宽度和父级一样大
            display: block;
            height: 200px;
            background-color: green;
            border-radius: 4px;
          }
    
          &:nth-child(1) a {
            background-color: #70c3ff;
          }
          &:nth-child(2) a {
            background-color: #fd6a7f;
          }
          &:nth-child(3) a {
            background-color: #7f8ea0;
          }
          &:nth-child(4) a {
            background-color: #89d04f;
          }
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    1、分为四个部分,后续只需要把图片上传完即可。

    // 开源项目
    .project{
        margin-top: 60px;
        text-align: center;
    
        .row {
            div {
              margin-bottom: 10px;
              height: 200px;
              // background-color: pink;
              a {
                // 块级的宽度和父级一样大
                display: block;
                height: 200px;
                background-color: green;
                border-radius: 4px;
              }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    image-20231122003649366

  • 相关阅读:
    【Python实战】听书就用它了:海量资源随便听,内含几w书源,绝对精品哦~(好消息好消息)
    【python实用教程】 print()函数用法总结
    事件总线及插槽
    larvel 中的api.php_Laravel 开发 API
    【算法】使数组有序的最小交换次数
    汽车称重软件系统配置(一)
    某红书旋转滑块验证码分析与协议算法实现(高通过率)
    python绘图系统27:matplotlib中平面坐标、极坐标和三维坐标的所有绘图函数
    12.4-测试与质量保证 12.5-测试用例 12.6-测试策略 12.7-软件测试的原则 12.8-软件测试模型
    分享5个良心好用的PC软件,免费无广告
  • 原文地址:https://blog.csdn.net/weixin_65106708/article/details/134562877