JavaWeb-CSS

一、什么是CSS

CSS(Cascading Style Sheets,层叠样式表)能够对网页中元素的位置排版进行精确的控制,拥有对网页对象和模型样式的编辑能力,简单来说就是页面美化。
CSS样式代码中的注释需要使用/**/。

二、CSS的引入方式

1.使用style属性

通过开始标签的style属性引入,样式语法为:style_name:style_value;style_name:style_value;

<body>
    <!--
        通过style属性引入CSS
        以按钮为例
    -->
    <input type="button" 
           value="按钮" 
           style="
                display: block;/*display定义该元素显示的类型*/
                width: 50px;/*定义元素的宽*/
                height: 30px;/*定义元素的高*/
                color: black;/*定义字体的颜色*/
                background-color: aquamarine;/*定义背景色*/
                border: 3px solid red;/*定义边框的大小样式和颜色*/
                font-size: 15px;/*定义字体大小*/
                font-family: '宋体';/*定义字体*/
                line-height: 20px;/*定义行间距,影响行框的布局*/
                border-radius: 5px;/*定义边框的圆角*/"
    />
</body>

在这里插入图片描述
缺点:

  • HTML代码和CSS样式代码交杂在一起,增加阅读难度和维护成本。
  • CSS样式代码仅对当前元素有效,代码复用性低。

2.在head中使用style标签

  • 在head标签中使用style标签定义CSS样式。
  • CSS样式的作用范围需要使用选择器控制。
  • 选择器根据标签名确定样式,语法为 tag_name{CSS code}。
  • 多个选择器的定义可以放在一个style标签里,也可以放在多个style标签里。
  • 选择器分为元素选择器、id选择器和class选择器。
  • CSS代码仍在HTML文件中,但是与body标签是分离的。
  • CSS代码只能作用于该文件,复用性仍然有限。

2.1 元素选择器

  • 元素选择器:
    • 元素选择器的样式只能作用在同名标签上,其他标签无法使用。
    • 同名标签未必需要相同的样式,不同名的标签可能需要相同的样式,所以元素选择器仍旧不太方便。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>IntroWayBySelector</title>
    <!--定义CSS样式-->
    <style>
        /*通过选择器控制CSS的作用范围
          选择器是通过指定应用该样式的标签名来控制作用对象的*/
        input{/*作用域inpu标签*/
            display: block;
            width: 50px;
            height: 30px;
            background-color: aquamarine;
            color: black;
            font-size: 10px;
            font-family: '宋体';
            border: 5px solid rebeccapurple;
            border-radius: 5px;
            line-height: 20px;
        }
    </style>
    <style>
        button{/*作用于button标签*/
            display: block;
            width: 50px;
            height: 30px;
            background-color:blanchedalmond;
            color: black;
            font-size: 10px;
            font-family: '宋体';
            border: 5px solid red;
            border-radius: 5px;
            line-height: 20px;
        }
    </style>
</head>
<body>
    <!--
        在head标签中使用style标签定义CSS样式
        CSS样式的作用范围需要使用选择器控制
        CSS代码仍在HTML文件中,但是与body标签是分离的
        CSS代码只能作用于该文件,复用性仍然有限
    -->
    <input type="button" value="按钮1" />
    <input type="button" value="按钮2" />
    <button type="button">按钮3</button>
    <button type="button">按钮4</button>
</body>
</html>

在这里插入图片描述

2.2 id选择器

  • id选择器:
    • id选择器通过元素的id属性确定样式的作用范围,语法为 #id{CSS code}。
    • 元素的id属性在HTML文档中是唯一的,也就是说一个id只能对应一个元素,因此使用id选择器的样式只能作用于一个元素,不够灵活。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>IntroWayBySelector</title>
    <!--定义CSS样式-->
    <style>
        /*通过选择器控制CSS的作用范围
          选择器是通过指定应用该样式的标签名来控制作用对象的*/
        #btn1{
            display: block;
            width: 50px;
            height: 30px;
            background-color: antiquewhite;
            color: black;
            font-size: 10px;
            font-family: '宋体';
            border: 5px solid rebeccapurple;
            border-radius: 5px;
            line-height: 20px;
        }
        #btn2{
            display: block;
            width: 50px;
            height: 30px;
            background-color: aqua;
            color: black;
            font-size: 10px;
            font-family: '宋体';
            border: 5px solid red;
            border-radius: 5px;
            line-height: 20px;
        }
        #btn3{
            display: block;
            width: 50px;
            height: 30px;
            background-color: azure;
            color: black;
            font-size: 10px;
            font-family: '宋体';
            border: 5px solid rebeccapurple;
            border-radius: 5px;
            line-height: 20px;
        }
    </style>
</head>
<body>
    <!--
        在head标签中使用style标签定义CSS样式
        CSS样式的作用范围需要使用选择器控制
        CSS代码仍在HTML文件中,但是与body标签是分离的
        CSS代码只能作用于该文件,复用性仍然有限
    -->
    <input type="button" value="按钮1" id="btn1" />
    <button type="button" id="btn2">按钮2</button>
    <button type="button" id="btn3">按钮3</button>
</body>
</html>

在这里插入图片描述

2.3 class选择器

  • class选择器:
    • 根据元素的class属性值确定样式的作用范围,语法为 .class_name{CSS code}。
    • 元素的class属性值可以有一个或多个,一个class值也可以对应多个元素。
    • class选择器的样式可以用于多个元素,一个元素也可以叠加多个class样式,所以class选择器最为灵活,使用的也最多。
    • 在定义class时,可以参考Java中类的定义,将相似的属性定义在一个class中。
    • 如果两个class选择器中有相同的属性,并且某个元素同时具有这两个class样式,那么相同的属性会实现后定义的那个。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>IntroWayBySelector</title>
    <!--定义CSS样式-->
    <style>
        /*通过选择器控制CSS的作用范围
          选择器是通过指定应用该样式的标签名来控制作用对象的*/
        .fontClass{
            color: red;
            font-size: 10px;
            font-family: '宋体';
            line-height: 20px;
        }
        .colorClass{
            background-color: antiquewhite;
            color: black;
        }
        .shapeClass{
            display: block;
            width: 50px;
            height: 30px;
            border: 3px solid rebeccapurple;
            border-radius: 5px;
        }
    </style>
</head>
<body>
    <!--
        在head标签中使用style标签定义CSS样式
        CSS样式的作用范围需要使用选择器控制
        CSS代码仍在HTML文件中,但是与body标签是分离的
        CSS代码只能作用于该文件,复用性仍然有限
    -->
    <input type="button" class="shapeClass colorClass fontClass" value="按钮1" />
    <button type="button" class="shapeClass colorClass">按钮2</button>
    <button type="button" class="shapeClass">按钮3</button>
</body>
</html>

在这里插入图片描述

3.使用link标签

  • 可以在head标签中使用link标签引入外部的CSS代码
  • 将CSS代码从HTML文件中剥离,有利于代码的维护
  • 可以被多个HTML文件使用,作用范围更广,提高了代码的复用性
  • 外部的CSS代码可以使用三种选择器:元素选择器、id选择器或class选择器。

3.1 元素选择器

input{
    display: block;
    width: 50px;
    height: 30px;
    background-color: aqua;
    color: black;
    font-size: 10px;
    font-family: '宋体';
    border: 5px solid rebeccapurple;
    border-radius: 5px;
    line-height: 5px;
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>ByLinkTagAndAttributeSelector</title>
    <link rel="stylesheet" href="../CSSFile/AttributeSelector.css" type="text/css" />
</head>
<body>
    <input type="button" value="按钮1" />
    <input type="button" value="按钮2" />
    <button type="button">按钮2</button>
</body>
</html>

在这里插入图片描述

3.2 id选择器

#btn1{
    display: block;
    width: 50px;
    height: 30px;
    background-color: antiquewhite;
    color: black;
    font-size: 10px;
    font-family: '宋体';
    border: 5px solid rebeccapurple;
    border-radius: 5px;
    line-height: 20px;
}
#btn2{
    display: block;
    width: 50px;
    height: 30px;
    background-color: aquamarine;
    color: black;
    font-size: 10px;
    font-family: '宋体';
    border: 5px solid rebeccapurple;
    border-radius: 5px;
    line-height: 20px;
}
#btn3{
    display: block;
    width: 50px;
    height: 30px;
    background-color: brown;
    color: black;
    font-size: 10px;
    font-family: '宋体';
    border: 5px solid rebeccapurple;
    border-radius: 5px;
    line-height: 20px;
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>ByLinkTagAndAttributeSelector</title>
    <link rel="stylesheet" href="../CSSFile/IdSelector.css" type="text/css">
</head>
<body>
    <input type="button" value="按钮1" id="btn1" />
    <button type="button" id="btn2">按钮2</button>
    <input type="button" value="按钮3" id="btn3" />
</body>
</html>

在这里插入图片描述

3.3 class选择器

.shapeClass{
    display: block;
    width: 50px;
    height: 30px;
    border: 5px solid rebeccapurple;
    border-radius: 5px;
}
.colorClass{
    background-color: aqua;
    color: black;
}
.fontClass{
    font-size: 10px;
    font-family: '宋体';
    line-height: 20px;
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>ByLinkTagAndClassSelector</title>
    <link rel="stylesheet" href="../CSSFile/ClassSelector.css" type="text/css" />
</head>
<body>
    <input type="button" class="shapeClass colorClass fontClass" value="按钮1" />
    <button type="button" class="shapeClass colorClass">按钮2</button>
    <button type="button" class="shapeClass">按钮3</button>
</body>
</html>

在这里插入图片描述

三、CSS浮动

  • CSS浮动使元素脱离文档流,按照指定方向移动,直到外边缘碰到包含框或另一个浮动框的边框为止。
  • 浮动设计的初衷是为了解决文字环绕图片问题,图片浮动后一定不会将文字挡住。
  • 文档流是文档中可显示对象在排列时所占用的位置或空间,脱离文档流就是在页面中不占位置了。
  • 下面通过代码展示浮动。

1. 向右浮动

假设有三个div块(编号从上到下为1、2、3)上下排列,如果将1号块设置为浮动,那么1号块占据的位置就会释放出来,那么2号块就会占据原来1号的位置,3号会占据原来2号的位置。1号块会向右浮动至边框停止。将2号块设置为浮动,它会向右浮动至1号块的边框停止。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>RightFloat</title>
    <style>
        .shapeClass{
            width: 100px;
            height: 100px;
        }
    </style>
</head>
<body>
    <div class="shapeClass" style="background-color: antiquewhite; float: right;">第一个块</div>
    <div class="shapeClass" style="background-color: aquamarine; float: right;">第二个块</div>
    <div class="shapeClass" style="background-color: brown; float: right;">第三个块</div>
</body>
</html>
未设置浮动

将第一个块设置为浮动

在这里插入图片描述

将三个块都设置为浮动

在这里插入图片描述

2. 向左浮动

假设如上,如果将1号块设置为向左浮动,那么1号块占据的位置会释放出来,2号块会占据1号块的位置,3号块会占据2号块的位置。但是由于1号块是向左浮动,并且初始位置就已经在页面的最左边,所以当2号块占据1号块的位置时,1号块由于浮动会在2号块的上方,覆盖了2号块。并且由于浮动最初是为了解决文字环绕问题,2号块的文字会被挤到下方。当接着设置2号块为浮动时,3号块会占据2号的位置,2号块会位于1号块的右侧(向左浮动碰到了1号块的边框),并且3号块会被1号块覆盖。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>LeftFloat</title>
</head>
<body>
    <div style="width: 100px; height: 100px; background-color: antiquewhite; float: left;">第一个块</div>
    <div style="width: 100px; height: 100px; background-color: aqua; float: left;">第二二二二个块</div>
    <div style="width: 100px; height: 100px; background-color: brown; float: left;">第三个块</div>
</body>
</html>
未设置浮动

在这里插入图片描述

第一个块向左浮动

在这里插入图片描述

三个块都向左浮动

在这里插入图片描述

四、CSS定位

在CSS中,元素可以使用顶部、底部、左侧和右侧属性定位,但如果不设定position属性,position默认为static方式,这些定位属性无法生效。position属性有五种定位方式:static、fixed、relative、absolute和sticky。注意在设置位置属性时,top和bottom只用设置一个,因为上方位置确定,下方位置也就确定了,left和right也是同理。元素的定位与文档流无关,因此它们可以覆盖到其他元素上。本节不讨论sticky定位。

4.1 static

静态定位(默认定位方式),元素不会受到top等定位属性的影响。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>NoPosition</title>
</head>
<body>
    <div style="top: 0px; left: 0px; width: 100px; height: 100px; background-color: antiquewhite;"></div>
    <div style="top: 100px; left: 100px; width: 100px; height: 100px; background-color: aquamarine; position: static;"></div>
</body>
</html>

在这里插入图片描述

4.2 fixed

元素的位置相对于浏览器窗口是固定的,可以覆盖在其他元素之上,窗口的广告就可以用这种定位方式。会使元素脱离文档流。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>FixedPosition</title>
</head>
<body>
    <div style="width: 1000px; height: 1000px;">
        <div style="width: 100px; height: 100px; background-color: antiquewhite; position: fixed; top: 100px; left: 100px;">第一个块</div>
        <div style="width: 100px; height: 100px; background-color: aqua;">第二个块</div>
        <div style="width: 100px; height: 100px; background-color: brown;">第三个块</div>
    </div>
</body>
</html>

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

4.3 relative

元素的定位是相对于其正常位置。元素正常的位置不会空出来。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>RelativePosition</title>
</head>
<body>
    <div style="width: 1000px; height: 1000px;">
        <div style="width: 100px; height: 100px; background-color: antiquewhite;">第一个块</div>
        <div style="width: 100px; height: 100px; background-color: aquamarine; position: relative; top: 100px; left: 100px;">第二个块</div>
        <div style="width: 100px; height: 100px; background-color: brown;">第三个块</div>
    </div>
</body>
</html>

在这里插入图片描述

4.4 absolute

绝对定位的元素的位置相对于其最近的父元素,如果没有已定位的父元素,那么它的位置就是相对于HTML页面的。会使元素脱离文档流。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>AbsolutePosition</title>
</head>
<body>
    <div style="width: 100px; height: 100px; background-color: antiquewhite; position: absolute; top: 100px; left: 300px;">第一个块</div>
    <div style="width: 100px; height: 100px; background-color: brown;">第二个块</div>
</body>
</html>

在这里插入图片描述

五、CSS盒子模型

所有HTML元素可以看作盒子,盒子模型可以封装周围的HTML元素:边距、边框、填充和实际内容。

  • margin:外边距,清楚边框外特定区域的内容,外边距是透明的。四个参数代表上右下左,两个参数表示上下(为一组)、左右(为一组),一个参数表示四个方向都为此大小。
  • border:边框,围绕在内边距外的边框。
  • padding:内边距,清楚内容周围的区域,内边距是透明的。参数用法与margin一致。
  • content:盒子的内容,显示文本和图像。内边距、外边距和边框都不会占用内容区域的空间,也就是说,在指定了width和height之后,内容区域的大小就是不变的。
  • 在浏览器中使用F12可以查看盒子模型。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>BoxModel</title>
    <style>
        .contentClass{
            width: 100px;
            height: 100px;
        }
        .colorClass{
            background-color: antiquewhite;
        }
        .boxModelClass{
            margin: 100px auto;
            border: 5px solid red;
            padding: 10px 20px 30px 40px;
        }
    </style>
</head>
<body>
    <div style="width: 100px; height: 100px; background-color: aqua; margin: auto;">第一个块</div>
    <div class="contentClass colorClass boxModelClass">第二个块</div>
</body>
</html>

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Notion汉化

Notion真无语&#xff0c;汉化版都没有。真的无力吐槽。 2023.11.7汉化经历 教程链接&#xff1a;github Reamd7/notion-zh_CN at 2.4.20-handmade (github.com) 网页版&#xff1a; 油猴下载插件。 Notion中文汉化 浏览器插件下载 windows&#xff1a; github realse 这…

Latex如何消除并自定义算法标识

正常&#xff1a; 修改后&#xff1a; 正常代码&#xff1a; \documentclass{article} \usepackage[ruled]{algorithm2e} \begin{document} \begin{algorithm} \caption{Hi} My name is XXX. \end{algorithm} \end{document}修改后代码&#xff1a; \documentclass{articl…

C++运算符重载详解(日期类实操)

前言&#xff1a;为什么要实现运算符重载&#xff1f; 在C语言中&#xff0c;对于内置类型&#xff0c;我们可以根据符号>、<、等去直接比较大小&#xff0c;但是对于自定义来说&#xff0c;肯定不能直接比较大小&#xff0c;例如下面的日期类&#xff0c;想要比较两个两…

移动机器人路径规划(三)--- 基于采样的路径规划Sample-basedpath finding

目录 1 基于采样的路径规划的优点和一些重要概念 2 概率路图 Probabilistic Road Map 3 快速搜索随机树Rapidly-exploring Random Tree 3.1 RRT 3.2 RRT Connect 4 RRT算法的优化 4.1 RRT* 4.2 Kinodynamic-RRT* 4.3 Anytime-RRT* 5 Advanced Sampling-based Methods…

PCL 点云超体素分割-SupervoxelClustering

一、概述 原始文档与点云 Clustering of Pointclouds into Supervoxels - Theoretical primer — Point Cloud Library 0.0 documentation 超像素 Superpixels Segmentation algorithms aim to group pixels in images into perceptually meaningful regions which conform…

【Linux】文件系统中inode与软硬链接以及读写权限问题

文章目录 前言一、 简单理解文件系统二、文件操作具体步骤1.新建文件2.删除文件3.查找文件 三、目录的重新理解1.目录下没有w权限&#xff0c;无法对其下的文件进行创建与删除2.目录下没有r权限&#xff0c;无法对其下的文件进行查看3.目录下没有x权限&#xff0c;无法进入这个…

空调能量表

数字化应用场景&#xff1a;空调能量监测 定义 空调能量表产品又被称为冷量积算仪、冷量积分仪、能量积分仪、能量积算仪、空调冷热量表、冷量表、能量表等&#xff0c;现阶段行业内没有统一的名称。 作用 用于计量中央空调能耗的仪表&#xff0c;它通过和空调管道流量计和温…

numpy数据库

numpy中的数组 0、导包 import numpy as np 1、创建数组 >>> # 创建数组&#xff0c;得到darray类型 >>> t1 np.array([1, 2, 3]) >>> t2 np.array(range(8)) >>> t3 np.arange(1, 9, 2) 2、数组为 numpy.ndarray 类型 >>…

基于单片机C51全自动洗衣机仿真设计

**单片机设计介绍&#xff0c; 基于单片机C51全自动洗衣机仿真设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机C51的全自动洗衣机仿真设计是一个复杂的项目&#xff0c;它涉及到硬件和软件的设计和实现。以下是对这…

redis常见问题及解决方案

缓存预热 定义 缓存预热是一种优化方案&#xff0c;它可以提高用户的使用体验。 缓存预热是指在系统启动的时候&#xff0c;先把查询结果预存到缓存中&#xff0c;以便用户后面查询时可以直接从缓存中读取&#xff0c;节省用户等待时间 实现思路 把需要缓存的方法写在初始化方…

Linux三剑客:grep的基本使用

目录 grep介绍 什么是grep和egrep 使用grep 命令格式 命令功能 命令参数 grep配合正则表达式使用 认识正则 基本正则表达式 匹配字符 配置次数 位置锚定&#xff1a;定位出现的位置 分组和后向引用 作为学习一名计算机专业的学生&#xff0c;我想Linux应该需要了解…

HTML5学习系列之实用性标记

HTML5学习系列之实用性标记 前言实用性标记高亮显示进度刻度时间联系信息显示方向换行断点标注 总结 前言 学习记录 实用性标记 高亮显示 mark元素可以进行高亮显示。 <p><mark>我感冒了</mark></p>进度 progress指示某项任务的完成进度。 <p…

Python基础教程之模块介绍及用法,适合新手小白的入门教程~

文章目录 什么是模块&#xff1f;创建模块使用模块模块中的变量为模块命名重命名模块内建模块使用 dir() 函数从模块导入 什么是模块&#xff1f; 请思考与代码库类似的模块。 模块是包含一组函数的文件&#xff0c;希望在应用程序中引用。 创建模块 如需创建模块&#xff…

(C++类的初始化和清理)构造函数与析构函数

目录 1. 类的六个默认成员函数2. 构造函数&#xff08;Constructor&#xff09;2.1 概念2.2 特性 3. 析构函数&#xff08;Destructor&#xff09;3.1 概念3.2 特性 1. 类的六个默认成员函数 一个类中如果什么成员都没有&#xff0c;称为空类 class Date {};但是这并不代表空…

Windows 系统彻底卸载 SQL Server 通用方法

Windows 系统彻底卸载 SQL Server 通用方法 无论什么时候&#xff0c;SQL Server 的安装和卸载都是一件让我们头疼的事情。因为不管是 SQL Server 还是 MySQL 的数据库&#xff0c;当我们在使用数据库时因为未知原因出现问题&#xff0c;想要卸载重装时&#xff0c;如果数据库…

如何分析伦敦金的价格走势预测?

伦敦金作为国际黄金市场的重要指标&#xff0c;其价格走势一直备受投资者关注。但是&#xff0c;黄金市场的价格变化受到多种因素的影响&#xff0c;因此要准确预测伦敦金的价格走势并非易事。在本文中&#xff0c;将介绍一些常用的方法和工具&#xff0c;帮助您分析伦敦金的价…

Docker-compose 下载安装测试完成

源文件-http://t.csdnimg.cn/7NxHchttp://t.csdnimg.cn/7NxHc 1 docker-compose说明 Docker Compose 是Docker的组装工具&#xff0c;用于创建和调试多个Docker容器&#xff0c;并在同一个Docker主机上运行它们。Docker Compose基于YAML文件&#xff0c;描述多个容器之间的相…

在Spring Boot中使用Redis的发布订阅功能

Redis的发布订阅模式是一种消息传递模式&#xff0c;它允许多个订阅者订阅一个或多个频道&#xff0c;同时一个发布者可以将消息发布到指定的频道。这种模式在分布式系统中非常有用&#xff0c;可以解决以下问题&#xff1a; 实时消息传递&#xff1a;发布订阅模式可以用于实时…

django——公众号服务开发

开发过程 项目背景&#xff1a;功能描述&#xff1a;参考文档以及调试链接&#xff1a;技术架构&#xff1a;准备工作公众号的注册以及设置域名的准备服务器的租赁内网穿透微信支付的注册 功能开发细节微信公众号自定义菜单获取access_token创建菜单查询菜单删除菜单 个性化菜单…

Nginx反向代理与负载均衡与504错误

Nginx反向代理与负载均衡概念简介 关于代理 什么是代理 类似中介 在没有代理模式的情况下&#xff0c;客户端和Nginx服务端&#xff0c;都是客户端直接请求服务端&#xff0c;服务端直接响应客户端。 那么在互联网请求里面&#xff0c;客户端往往无法直接向服务端发起请求…