9_less教程 --[CSS预处理]

LESS(Leaner Style Sheets)是一种CSS预处理器,它扩展了CSS语言,增加了变量、嵌套规则、混合(mixins)、函数等功能,使得样式表的编写更加灵活和易于维护。下面是一些LESS的基础教程内容:

1. 安装

安装 LESS 预处理器通常需要通过 Node.js 的包管理工具 npm (Node Package Manager) 来完成。以下是安装步骤:

在本地计算机上安装 LESS

  1. 确保已安装 Node.js 和 npm

    在安装 LESS 之前,你需要确保你的计算机上已经安装了 Node.js 和 npm。你可以通过在命令行(或终端)中输入以下命令来检查是否已安装以及它们的版本:

    node -v
    npm -v
    

    如果没有安装,请前往 Node.js 官方网站下载并安装适合你操作系统的版本。Node.js 的安装程序会自动包含 npm。

  2. 全局安装 LESS

    打开命令行界面(Windows 上是命令提示符或 PowerShell,macOS 或 Linux 上是终端),然后使用 npm 安装 LESS:

    npm install -g less
    

    -g 参数表示全局安装,这意味着 LESS 将可以在任何项目中使用,而不需要为每个项目单独安装。

  3. 验证安装

    安装完成后,可以通过运行以下命令来验证 LESS 是否安装成功:

    lessc -v
    

    这将显示 LESS 编译器的版本信息,如果安装正确的话。

  4. 使用 LESS 编译 CSS

    安装后,你可以使用 lessc 命令来编译 .less 文件为 .css 文件。例如,如果你有一个名为 styles.less 的文件,你可以用下面的命令编译它:

    lessc styles.less styles.css
    

    这将会把 styles.less 文件编译成 styles.css 文件。

使用在线编译器或IDE插件

除了在命令行安装和使用 LESS 编译器之外,还有很多在线编译器和集成开发环境(IDE)的插件可以直接处理 LESS 文件的编写和编译,无需手动安装 LESS。这些工具对于快速测试代码或者不想配置开发环境的用户来说非常方便。

2. 变量

当然可以。下面我将给出两个关于如何在 LESS 中使用变量的示例,包括基础的颜色变量定义和更复杂的变量用法。

示例 1: 基础颜色变量

这是最简单的变量用法,主要用于存储重复使用的颜色值。通过这种方式,如果你需要更改网站的主题颜色,你只需要在一个地方修改变量的值即可。

// 定义变量
@primary-color: #4D926F;
@secondary-color: #79BD8F;// 使用变量
body {background-color: @primary-color;color: @secondary-color;
}a {color: @primary-color;
}

在这里插入图片描述

在这个例子中,@primary-color@secondary-color 是两个颜色变量。它们分别被用来设置 body 的背景色和文本颜色,以及链接的颜色。

示例 2: 更复杂的变量用法

除了简单的颜色定义,LESS 变量还可以用于存储任何 CSS 属性值,比如尺寸、字体系列等。此外,你可以根据变量进行运算。

// 定义变量
@base-font-size: 16px;
@font-family-sans-serif: "Helvetica Neue", Helvetica, Arial, sans-serif;
@border-radius: 5px;
@padding-base-vertical: 10px;
@padding-base-horizontal: 15px;// 使用变量并结合算术运算
.button {font-size: @base-font-size + 2; // 按钮字体比基础字体大2pxfont-family: @font-family-sans-serif;border-radius: @border-radius;padding: @padding-base-vertical @padding-base-horizontal;
}// 继续使用相同的变量定义其他样式
.input {font-size: @base-font-size;font-family: @font-family-sans-serif;border-radius: @border-radius;padding: @padding-base-vertical - 2 @padding-base-horizontal;
}

在这里插入图片描述

在这个复杂一点的例子中,我们定义了多个不同类型的变量,并且展示了如何在 .button.input 类中使用这些变量。注意,我们不仅直接使用了变量值,还进行了简单的数学运算来调整按钮和输入框的内边距(padding)和字体大小(font-size)。这样做的好处是保持了代码的一致性和可维护性。如果以后需要调整字体大小或圆角半径,只需修改变量的定义即可,所有使用该变量的地方都会相应更新。

3. 嵌套

当然,LESS 的嵌套功能是它的一个强大特性,可以使 CSS 代码更加简洁和直观。下面我将给出两个示例来展示如何使用 LESS 的嵌套。

示例 1: 简单的 HTML 元素嵌套

在这个例子中,我们将创建一个简单的导航栏样式,其中 ul(无序列表)包含多个 li(列表项),每个 li 又包含一个 a(链接)。通过 LESS 的嵌套规则,可以更清晰地反映这些 HTML 元素之间的层次关系。

nav {background-color: #333;ul {margin: 0;padding: 0;list-style: none;display: flex;li {display: inline-block;a {display: block;padding: 10px 20px;color: white;text-decoration: none;&:hover { // 使用 &:hover 直接添加伪类background-color: #575757;}}}}
}

在这里插入图片描述

编译后的 CSS 将会正确反映上述元素的嵌套结构,同时保持了代码的整洁性和可读性。

示例 2: 组件级别的嵌套与扩展

这个例子展示了如何为一个按钮组件编写样式,并且包括一些额外的状态,比如 :hover:active。此外,我们还将定义一个带有图标的按钮变体,通过嵌套进一步简化代码。

// 定义基本按钮样式
.button {display: inline-block;padding: 10px 20px;font-size: 16px;cursor: pointer;text-align: center;text-decoration: none;outline: none;color: #fff;background-color: #4CAF50;border: none;border-radius: 15px;box-shadow: 0 9px #999;// 添加悬停状态&:hover {background-color: #3e8e41;}// 添加按下状态&:active {background-color: #3e8e41;box-shadow: 0 5px #666;transform: translateY(4px);}
}// 定义带图标的按钮变体
.button.icon {padding-left: 40px; // 为图标留出空间position: relative;// 图标定位&::before {content: "";position: absolute;left: 10px;top: 50%;transform: translateY(-50%);width: 24px;height: 24px;background-image: url('icon.png'); // 假设这里有一个图标图片background-size: cover;}
}

在这里插入图片描述

在这个例子中,.button 类定义了一个通用按钮的样式,而 .button.icon 则是在此基础上增加了一些特定于带有图标的按钮的样式。注意,:hover:active 伪类以及 ::before 伪元素都直接在相应的选择器内部定义,这使得代码组织得更好,也更容易维护。

通过这两个示例,你应该能感受到 LESS 的嵌套功能是如何帮助你写出更加结构化和易于管理的 CSS 代码的。

4. 混合(Mixins)

LESS 的混合(mixins)功能允许你将一组样式封装到一个类中,并在其他规则中复用这些样式。这不仅提高了代码的可维护性,还能避免重复代码。下面是两个使用 LESS 混合的示例:

示例 1: 基本混合

在这个简单的例子中,我们将创建一个用于设置圆角边框的混合,然后在不同的选择器中使用它。

// 定义一个混合来设置圆角边框
.rounded-corners (@radius: 5px) {border-radius: @radius;-webkit-border-radius: @radius;-moz-border-radius: @radius;
}// 使用这个混合
.box {.rounded-corners(10px); // 应用带参数的混合background-color: #eee;padding: 20px;margin-bottom: 10px;
}.button {.rounded-corners(); // 不提供参数时使用默认值background-color: #4CAF50;color: white;padding: 10px 20px;text-align: center;text-decoration: none;display: inline-block;
}

在这里插入图片描述

编译后的 CSS 将包含 .box.button 类的样式,并且它们都会应用 border-radius 属性。.box 类会使用传入的 10px 参数,而 .button 类则使用默认的 5px

示例 2: 带有参数和条件的复杂混合

在这个更复杂的例子中,我们将创建一个带有参数和条件判断的混合,以根据不同的状态(如正常、悬停、激活等)应用不同的背景颜色。

// 定义一个带有参数和条件的混合
.button-style (@bg-color: #4CAF50, @hover-bg-color: darken(@bg-color, 10%), @active-bg-color: darken(@bg-color, 20%)) {background-color: @bg-color;color: white;padding: 10px 20px;text-align: center;text-decoration: none;display: inline-block;border-radius: 5px;&:hover {background-color: @hover-bg-color;}&:active {background-color: @active-bg-color;}
}// 使用这个混合并传递参数
.success-button {.button-style(#4CAF50);
}.warning-button {.button-style(#FFC107, darken(#FFC107, 8%), darken(#FFC107, 15%));
}.danger-button {.button-style(#F44336);
}

在这里插入图片描述

在这个例子中,.button-style 混合接收三个参数:默认背景颜色、悬停时的背景颜色以及按下时的背景颜色。我们还定义了几个按钮类(.success-button, .warning-button, .danger-button),每个都调用了 .button-style 混合,并根据需要提供了不同的颜色参数。此外,混合内部还包括了对 :hover:active 状态的支持,通过 LESS 的颜色函数(如 darken)动态计算出不同的背景颜色。

这两个示例展示了如何利用 LESS 的混合功能来简化和优化 CSS 样式的编写。如果你有更多问题或需要进一步的帮助,请随时提问!

5. 继承

在 LESS 中,继承(extend)允许一个选择器继承另一个选择器的所有样式规则。这有助于减少重复代码,并且使得维护更加容易。下面我将给出两个使用 LESS 继承的示例。

示例 1: 基本继承

在这个简单的例子中,我们将创建一个基本的消息框样式,然后让错误消息框和成功消息框继承这个基本样式,并添加各自特有的样式。

// 定义一个基础的消息框样式
.message {border: 1px solid #ccc;padding: 10px;color: #333;
}// 错误消息框继承 .message 并添加特定样式
.error {&:extend(.message); // 继承 .message 的所有样式border-color: red;background-color: #fdd;color: red;
}// 成功消息框继承 .message 并添加特定样式
.success {&:extend(.message); // 继承 .message 的所有样式border-color: green;background-color: #dfd;color: green;
}

在这里插入图片描述

编译后的 CSS 将包含 .error.success 类的样式,并且它们都会继承自 .message 类的基础样式。这意味着如果将来需要更改消息框的基本样式,只需修改 .message 类即可,而无需分别调整每个具体的类。

示例 2: 复杂的选择器继承与多重继承

在这个更复杂的例子中,我们将展示如何在一个复杂的选择器中使用继承,以及如何进行多重继承。这里我们将定义一个按钮的基本样式,然后为不同类型的按钮(如主要按钮、次要按钮)提供额外的样式,最后还将展示如何同时继承多个选择器。

// 定义一个基础按钮样式
.button {display: inline-block;padding: 10px 20px;font-size: 16px;cursor: pointer;text-align: center;text-decoration: none;outline: none;border-radius: 5px;transition: all 0.3s ease;
}// 主要按钮继承 .button 并添加特定样式
.primary-button {&:extend(.button);background-color: #4CAF50;color: white;border: 2px solid #4CAF50;&:hover {background-color: darken(#4CAF50, 10%);}
}// 次要按钮继承 .button 并添加特定样式
.secondary-button {&:extend(.button);background-color: transparent;color: #4CAF50;border: 2px solid #4CAF50;&:hover {background-color: lighten(#4CAF50, 10%);}
}// 禁用按钮状态,同时继承主要按钮和次要按钮的样式
.disabled-button {&:extend(.primary-button, .secondary-button); // 多重继承opacity: 0.6;cursor: not-allowed;&:hover {background-color: initial; // 取消悬停效果}
}

在这里插入图片描述

在这个例子中:

  • .primary-button.secondary-button 分别继承了 .button 的所有样式,并添加了各自的颜色方案。
  • .disabled-button 展示了多重继承的概念,它同时继承了 .primary-button.secondary-button 的样式,并添加了一个禁用状态的效果(例如降低透明度和改变光标样式),并且移除了悬停时的背景颜色变化。

通过这两个示例,你可以看到 LESS 的继承功能如何帮助你组织和简化 CSS 样式表,使代码更加模块化和易于维护。

6. 运算

LESS 支持多种运算,允许你在样式表中进行数学计算,从而动态地生成 CSS 属性值。这使得 LESS 代码更加灵活和强大。以下是两个使用 LESS 运算的示例:

示例 1: 基础尺寸运算

在这个例子中,我们将展示如何使用 LESS 来计算元素的宽度、内边距(padding)等属性,以确保布局的一致性和灵活性。

// 定义基础变量
@base-font-size: 16px;
@base-line-height: 24px;
@container-width: 960px;
@gutter-width: 20px;// 使用运算来创建响应式容器
.container {width: (@container-width - @gutter-width * 2); // 减去两边的内边距margin: 0 auto; // 居中对齐padding: 0 @gutter-width; // 应用左右内边距
}// 使用运算来设置字体大小和行高
.text-block {font-size: @base-font-size + 2; // 比基础字体大2pxline-height: @base-line-height / @base-font-size; // 计算行高比率
}

在这里插入图片描述

在这个例子中,我们首先定义了一些基础变量,然后通过这些变量进行了简单的加减乘除运算,以计算出合适的宽度、内边距、字体大小和行高等属性。这样做不仅保持了代码的一致性,还使得调整全局样式变得非常容易——只需要修改几个变量即可影响整个网站的设计。

示例 2: 颜色运算与渐变背景

这个例子展示了如何使用颜色运算来创建不同的色调,并结合渐变背景来增强视觉效果。

// 定义颜色变量
@primary-color: #4CAF50;
@secondary-color: lighten(@primary-color, 20%);
基本按钮样式
// 创建按钮样式,使用颜色运算和渐变背景
.button {background-image: linear-gradient(to bottom,darken(@primary-color, 5%), // 按钮顶部颜色稍微深一点@primary-color // 按钮底部颜色为原始颜色);color: white;padding: 10px 20px;border-radius: 5px;transition: background 0.3s ease;&:hover {background-image: linear-gradient(to bottom,darken(@secondary-color, 5%), // 悬停时顶部颜色基于次要颜色@secondary-color // 悬停时底部颜色为次要颜色);}
}// 使用颜色运算创建不同状态下的按钮变体
.success-button {.button; // 继承基本按钮样式background-image: linear-gradient(to bottom,darken(green, 5%), // 绿色按钮顶部颜色稍微深一点green // 绿色按钮底部颜色);&:hover {background-image: linear-gradient(to bottom,darken(lighten(green, 20%), 5%), // 悬停时绿色按钮顶部颜色稍微深一点lighten(green, 20%) // 悬停时绿色按钮底部颜色);}
}

在这里插入图片描述

在这个例子中,我们使用了 darkenlighten 函数来进行颜色运算,以创建不同的色调,并且将这些颜色应用于线性渐变背景。此外,.success-button 类展示了如何通过继承 .button 类并覆盖特定属性来创建按钮的不同变体。这种方法可以让你轻松创建一组外观一致但又略有不同的按钮样式。

这两个示例说明了如何利用 LESS 的运算功能来编写更智能、更动态的 CSS 样式表。

7. 函数

LESS 提供了一系列内置函数,用于操作颜色、尺寸、字符串等,这使得样式表的编写更加灵活和动态。下面我将给出两个使用 LESS 内置函数的示例。

示例 1: 颜色函数

在第一个例子中,我们将展示如何使用颜色函数来创建不同色调的颜色,并应用于样式规则中。这些函数可以帮助你轻松地调整颜色的亮度、饱和度等属性。

// 定义基础颜色变量
@base-color: #4CAF50; // 绿色// 使用颜色函数生成不同的颜色变体
body {background-color: lighten(@base-color, 20%); // 背景颜色比基础颜色更亮
}header {color: darken(@base-color, 30%); // 文本颜色比基础颜色更深
}a {color: saturate(@base-color, 20%); // 链接颜色比基础颜色更饱和&:hover {color: desaturate(@base-color, 20%); // 悬停时链接颜色比基础颜色更不饱和}
}.button {background-color: spin(@base-color, 10); // 旋转色相角度,创建按钮背景颜色
}

在这里插入图片描述

在这个例子中,我们定义了一个基础颜色 @base-color,然后通过 lightendarkensaturatedesaturatespin 函数生成了不同版本的颜色。这样做可以确保整个网站的颜色主题保持一致的同时,又能够根据不同元素的需求进行细微调整。

示例 2: 尺寸和数学函数

在第二个例子中,我们将展示如何使用尺寸和数学函数来计算布局中的间距、宽度等值。这对于创建响应式设计或需要根据某些条件动态调整大小的情况非常有用。

// 定义一些基础尺寸变量
@base-font-size: 16px;
@container-width: 960px;
@gutter-width: 20px;// 使用数学运算和尺寸函数创建响应式布局
.container {width: percentage((@container-width - @gutter-width * 2) * 0.001); // 计算容器宽度百分比margin: 0 auto; // 居中对齐padding: 0 @gutter-width; // 应用左右内边距
}.text-block {font-size: ceil(@base-font-size * 1.2); // 字体大小向上取整line-height: floor(@base-font-size * 1.5); // 行高向下取整margin-bottom: round(@base-font-size * 1.75); // 底部外边距四舍五入
}.grid-item {width: (@container-width / 4) - @gutter-width; // 假设每行有4个网格项,减去内边距float: left;margin-right: @gutter-width; // 右边距为内边距宽度&:nth-child(4n) {margin-right: 0; // 每行最后一个项目右边距为0}
}

在这里插入图片描述

在这个例子中:

  • percentage() 函数用于将像素值转换成相对于某个基准值(这里是1000px)的百分比。
  • ceil()floor()round() 函数分别用于向上取整、向下取整和四舍五入数值,以确保尺寸符合预期。
  • 数学运算直接用于计算 .grid-item 的宽度,以适应一个包含四个项目的网格布局。

这两个示例展示了 LESS 内置函数的强大功能,它们可以帮助你更智能地处理颜色和尺寸,从而写出更加灵活和动态的 CSS 样式表。

8. 导入

在 LESS 中,@import 规则用于导入其他 LESS 文件的内容。这有助于将样式表模块化,便于维护和重用代码。以下是两个使用 @import 的示例,展示了如何有效地组织和导入 LESS 文件。

示例 : 基础导入

在这个简单的例子中,我们将展示如何从一个主 LESS 文件中导入变量、混合(mixins)和其他样式规则。假设我们有一个项目结构如下:

styles/
├── variables.less
├── mixins.less
└── main.less
variables.less
// 定义颜色变量
@primary-color: #4CAF50;
@secondary-color: #79BD8F;
@base-font-size: 16px;
mixins.less
// 定义一个圆角边框的混合
.rounded-corners (@radius: 5px) {border-radius: @radius;-webkit-border-radius: @radius;-moz-border-radius: @radius;
}
main.less
// 导入变量文件
@import "variables";
// 导入混合文件
@import "mixins";body {background-color: @primary-color;font-size: @base-font-size;
}.button {.rounded-corners(10px);background-color: @secondary-color;color: white;padding: 10px 20px;
}

在这里插入图片描述

在这个例子中,main.less 文件通过 @import 规则引入了 variables.lessmixins.less 文件中的定义,然后在样式规则中使用这些定义。这样做可以保持每个文件专注于特定的任务(如定义变量或混合),同时在主文件中组合使用它们。

以上就是LESS的一些基础特性介绍。随着你对LESS的深入学习,你会发现它还有很多高级特性和最佳实践可以帮助你更有效地开发网站或Web应用的样式。

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

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

相关文章

JVM 双亲委派模型以及垃圾回收机制

目录 1. JVM 内存区域划分 2. JVM 中类加载的过程 1) 类加载的基本流程 2) 双亲委派模型 3. JVM 中垃圾回收机制 1) 找到垃圾 a) 引用计数 b) 可达性分析 2) 释放垃圾 1. JVM 内存区域划分 一个运行起来的 Java 进程,其实就是一个 JVM 虚拟机。 而进程是…

leetcode-73.矩阵置零-day5

class Solution {public void setZeroes(int[][] mat) {int m mat.length, n mat[0].length;// 1. 扫描「首行」和「首列」记录「首行」和「首列」是否该被置零boolean r0 false, c0 false;for (int i 0; i < m; i) {if (mat[i][0] 0) {r0 true;break;}}for (int j …

C++11语法解析(二)

可变参数模板 基本语法及原理 ・C11 支持可变参数模板&#xff0c;也就是说支持可变数量参数的函数模板和类模板&#xff0c;可变数目的参数被称为参数包&#xff0c;存在两种参数包&#xff1a;模板参数包&#xff0c;表示零或多个模板参数&#xff1b;函数参数包&#xff1…

opencv——图片矫正

图像矫正 图像矫正的原理是透视变换&#xff0c;下面来介绍一下透视变换的概念。 听名字有点熟&#xff0c;我们在图像旋转里接触过仿射变换&#xff0c;知道仿射变换是把一个二维坐标系转换到另一个二维坐标系的过程&#xff0c;转换过程坐标点的相对位置和属性不发生变换&a…

BatchNorm 与 LayerNorm

文章目录 1. BatchNorm批量归一化2. LayerNorm层归一化3. BatchNorm 和 LayerNorm 对比4. BatchNorm 和 LayerNorm 怎么选择References 今天重看Transformer&#xff0c;发现里面提到了BatchNorm和LayerNorm两种归一化方法&#xff0c;在这儿做一下总结和整理。 1. BatchNorm批…

OpenCV相关函数

一、二值化函数&#xff08;threshold&#xff09; 功能&#xff1a;将灰度图像转换为二值图像&#xff0c;通常用于图像分割。通过设置阈值&#xff0c;把图像中低于阈值的像素设为0&#xff0c;高于阈值的像素设为1。 参数&#xff1a; src&#xff1a;输入图像。 thresh&a…

[传智杯 #6 省赛] 小红劈字符串

一、题目 二、代码解析 首先&#xff0c;input() 函数用于获取用户从控制台输入的内容&#xff0c;在这里用户输入的应该是一个仅由小写字母组成的字符串&#xff0c;然后将这个输入的字符串赋值给变量 xh。接着&#xff0c;使用 len(xh) 函数来计算字符串 xh 的长度&#xff…

【跨库查询、多库查询】.NET开源 ORM 框架 SqlSugar 系列

文章目录 一、跨库方式1&#xff1a;跨库导航二、手动跨库查询三、同服务器&#xff1a;自动查询跨库查询3.1 Mysql和SqlServer自动3.2 自动: PgSql跨Scheme查询3.3 其他库同服务器 四、跨服务器&#xff1a;自动跨库查询4.1 配置SqlServer dblink4.2 配置 Oracle dblink4.3 配…

数据可视化大屏UI组件库:B端科技感素材PSD

在数据可视化领域&#xff0c;一个出色的大屏UI设计不仅能够准确传达数据背后的信息&#xff0c;更能提升用户的视觉体验。然而&#xff0c;对于UI设计师而言&#xff0c;设计这样一款界面往往面临着寻找合适设计素材的挑战。为了应对这一难题&#xff0c;我们推出了这款数据可…

QT数据库(四):QSqlRelationalTableModel 类

关系数据库概念 例如下列departments、majors、studInfo 这 3 个数据表之间存在关系。 主键与外键 标记“**”的是主键字段&#xff0c;标记“*”的是外键字段。主键字段是一个数据表中表示记录唯一性的字段&#xff0c;例如 studInfo 数据表中的 studID 字段。外键字段是与其…

人工智能原理实验四:智能算法与机器学习

一、实验目的 本实验课程是计算机、智能、物联网等专业学生的一门专业课程&#xff0c;通过实验&#xff0c;帮助学生更好地掌握人工智能相关概念、技术、原理、应用等&#xff1b;通过实验提高学生编写实验报告、总结实验结果的能力&#xff1b;使学生对智能程序、智能算法等…

免费生成AI PPT产品推荐?

要完全免费几乎是没有的&#xff0c;要知道AI还是非常烧钱的。 不过免费蹭还是有很多方法的&#xff0c;这里收集了一些&#xff1a; 下面分享我自己免费蹭过的几款AI制作PPT的工具。 1 金山-WPS PPT对我们来说并不陌生&#xff0c;而微软的PowerPoint与金山的WPS也是我们最常…

WPF 消息循环(二)

们已经知道&#xff0c;win32/MFC/WinForm/WPF 都依靠消息循环驱动&#xff0c;让程序跑起来。 这里就介绍 WPF 中是如何使用消息循环来驱动程序的。 1. 背景 只听说过 Dispatcher &#xff0c;哪里来的消息循环&#xff1f; WPF 启动运行堆栈&#xff1a; > WpfApp1.…

PostgreSQL 常用运维SQL整理

一、查询并杀会话 -- 查询会话 select pid,usename,client_addr,client_port,query_start,query,wait_event from pg_stat_activity; -- 杀会话 select pg_terminate_backend(pid号); -- 使用如下命令自动生成杀会话语句 select datid,datname,pid,usesysid,usename,applicat…

JS中的Promise用法大全

目录 一、相关概念介绍1.什么是Promise2.Promise状态3.创建Promise4.then()方法5.catch方法6.链式调用7.异步编程 二、使用1.构造Promise2.executor 函数3.then() 方法4.then() 方法返回的Promise的状态 三、Async/Await语法糖四、Promise应用场景五、总结 一、相关概念介绍 1…

【新界面】基于卷积神经网络的垃圾分类(Matlab)

基于CNN的垃圾识别与分类GUI【新界面】 有需要可直接联系我&#xff0c;基本都在在线&#xff0c;能秒回&#xff01;可加我看演示视频&#xff0c;不懂可以远程教学 1.此项目设计包括两份完整的源代码&#xff0c;有GUI界面的代码和无GUI界面系统的代码。 &#xff08;以下部…

pytorch bilstm crf的教程,注意 这里不支持批处理,要支持批处理 用torchcrf这个。

### Bi-LSTM Conditional Random Field ### pytorch tutorials https://pytorch.org/tutorials/beginner/nlp/advanced_tutorial.html ### 模型主要结构&#xff1a; ![title](sources/bilstm.png) pytorch bilstm crf的教程&#xff0c;注意 这里不支持批处理 Python version…

bugku-simple MQTT-wp解析

1.下载题目打开题目&#xff0c;是一个流量包&#xff0c;题目说是MQTT&#xff0c;然后打开流量之后的流量都是MQTT&#xff0c;我们来搜一下MQTT是什么流量 MQTT流量&#xff1a; 是一种基于发布订阅模式的轻量级的通讯协议&#xff0c;并且该协议构建于TCP/IP协议之上&…

HCIA-Access V2.5_2_2网络通信基础_TCP/IP协议栈报文封装

TCP/IP协议栈的封装过程 用户从应用层发出数据先会交给传输层&#xff0c;传输层会添加TCP或者UDP头部&#xff0c;然后交给网络层&#xff0c;网络层会添加IP头部&#xff0c;然后交给数据链路层&#xff0c;数据链路层会添加以太网头部和以太网尾部&#xff0c;最后变成01这样…

Windows 与 Linux 下 Ping IPv6 地址 | 常用网络命令

注&#xff1a;本文为网络命令相关文章合辑。 未整理去重。 一、IPv6 概述 IPv6 即 “Internet 协议版本 6”&#xff0c;因 IPv4 地址资源面临耗尽问题而被引入以替代 IPv4。IPv6 则提供了理论上多达 2 128 2^{128} 2128 个地址&#xff0c;有效解决地址不足困境。 IPv6 具…