6_Sass 选择器函数 --[CSS预处理]
Sass 提供了一系列的选择器函数,用于操作和组合CSS选择器。这些函数可以帮助你更灵活地创建样式规则,并且可以减少重复代码。以下是几个常用的选择器函数及其用法:
1. selector-append($selector1, $selector2...)
selector-append($selector1, $selector2...)
是 Sass 中的一个选择器函数,它将多个选择器连接在一起,但不会添加空格或逗号。这意味着它适合创建后代选择器、类的组合等,但不适合用于兄弟选择器或子选择器(因为这些需要特定的符号来分隔)。
下面是两个使用 selector-append($selector1, $selector2...)
函数的例子:
示例 1:创建后代选择器
假设你有一个基础类 .button
和一个修饰符类 .primary
,你想创建一个新的选择器 .button.primary
来应用样式。
$base-selector: ".button";
$modifier-selector: ".primary";// 使用 selector-append 创建组合选择器
#{selector-append($base-selector, $modifier-selector)} {background-color: blue;color: white;
}
编译后的 CSS 将会是:
.button.primary {background-color: blue;color: white;
}
在这个例子中,selector-append()
函数被用来将两个选择器 .button
和 .primary
连接成一个单一的选择器 .button.primary
。
示例 2:动态生成选择器
如果你想要根据变量动态地生成一系列类似的选择器,比如为不同的尺寸创建按钮样式,你可以这样做:
$sizes: ".small" ".medium" ".large";
$base-button: ".btn";@each $size in $sizes {// 动态构建每个尺寸的按钮选择器#{selector-append($base-button, #{$size})} {padding: if($size == '.small', 5px, if($size == '.medium', 10px, 15px));font-size: if($size == 'small', 12px, if($size == '.medium', 14px, 16px));}
}
编译后的 CSS 将会是:
.btn.small {padding: 5px;font-size: 12px;
}.btn.medium {padding: 10px;font-size: 14px;
}.btn.large {padding: 15px;font-size: 16px;
}
在这个例子中,我们使用了 @each
循环和 selector-append()
函数来动态创建三个不同尺寸的按钮选择器,并且根据尺寸的不同设置了不同的内边距和字体大小。
这两个示例展示了如何利用 selector-append()
函数来简化代码,减少重复,并保持良好的可维护性。请注意,当使用 selector-append()
时,确保所连接的选择器之间不需要额外的空间或特殊符号,如 >
或 +
,因为该函数不会自动插入这些符号。
2. selector-nest($selector...)
selector-nest($selector...)
是 Sass 中的一个选择器函数,它允许你以嵌套的方式书写选择器,然后编译成正确的CSS输出。这使得你可以更直观地组织代码,并且更容易维护。以下是两个使用 selector-nest()
函数的例子:
示例 1:嵌套后代选择器
假设你有一个 HTML 结构,其中 .header
包含一个 .nav
和多个链接(a
标签)。你想为这些元素编写样式,但希望在 SCSS 文件中保持结构化的布局。
$header: ".header";
$nav: "nav";
$link: "a";// 使用 selector-nest 创建嵌套的选择器
#{selector-nest($header, $nav, $link)} {color: blue;text-decoration: none;
}// 编译后的 CSS 将会是:
.header nav a {color: blue;text-decoration: none;
}
在这个例子中,我们使用了 selector-nest()
函数来创建一个后代选择器链,即 .header nav a
。这意味着所有位于 .header
内部的 <nav>
元素中的 <a>
链接都将应用这些样式。
示例 2:组合多种类型的选择器
有时候你需要同时处理不同种类的选择器,例如类选择器、ID选择器和伪类。selector-nest()
可以帮助你轻松实现这一点。
$container: ".container";
$button: ".button";
$active: ":active";// 使用 selector-nest 创建复杂的嵌套选择器
#{selector-nest($container, $button, $active)} {background-color: red;
}// 编译后的 CSS 将会是:
.container .button:active {background-color: red;
}
在这个例子中,我们创建了一个更为复杂的选择器 .container .button:active
,它将应用于任何处于激活状态(:active
)的 .button
按钮,前提是该按钮位于 .container
容器内。
通过 selector-nest()
,你可以简化你的 SCSS 代码,使其更加贴近实际的 HTML 结构,同时也提高了代码的可读性和可维护性。请注意,虽然这个函数非常有用,但在实际项目中应当根据需要合理使用,避免过度嵌套导致难以理解和调试的代码。
3. selector-unify($selector1, $selector2...)
selector-unify($selector1, $selector2...)
是 Sass 中的一个选择器函数,它尝试将两个或多个选择器统一为一个单一的选择器。如果这些选择器可以被统一,则返回统一后的新选择器;否则返回 null
。这在处理复杂的继承关系或者需要确保某些样式只应用于特定组合的情况下非常有用。
以下是两个使用 selector-unify()
函数的例子:
示例 1:统一基础类和修饰符类
假设你有一个基础按钮类 .btn
和一个修饰符类 .btn-primary
,你想创建一个新的选择器来应用特定的样式,但仅当两者都存在时才有效。
$base: ".btn";
$modifier: ".btn-primary";// 使用 selector-unify 统一两个选择器
#{selector-unify($base, $modifier)} {background-color: blue;color: white;
}// 编译后的 CSS 将会是:
.btn.btn-primary {background-color: blue;color: white;
}
在这个例子中,selector-unify()
函数成功地将 .btn
和 .btn-primary
统一成了 .btn.btn-primary
。这意味着只有当 HTML 元素同时拥有这两个类时,才会应用这些样式。
示例 2:结合伪类进行统一
有时候你可能想要基于某种状态(如:hover
、:active
)对元素进行样式化,而不仅仅是基于静态类。我们可以用 selector-unify()
来实现这一点。
$button: ".btn";
$state: ":hover";// 使用 selector-unify 统一类选择器和伪类
#{selector-unify($button, $state)} {background-color: lightblue;
}// 编译后的 CSS 将会是:
.btn:hover {background-color: lightblue;
}
这里我们创建了一个新的选择器 .btn:hover
,它会在用户悬停在按钮上时改变背景颜色。通过 selector-unify()
,我们可以很容易地组合类选择器与伪类,从而创建更加灵活和动态的样式规则。
注意事项
- 返回
null
的情况:如果提供的选择器不能被统一,selector-unify()
会返回null
。因此,在使用此函数时应该考虑到这种情况,并根据需要添加逻辑来处理可能的null
值。 - 选择器优先级:当你使用
selector-unify()
组合选择器时,请注意最终生成的选择器可能会有不同的优先级,这取决于所组合的选择器类型(例如ID、类、标签等)。
通过合理运用 selector-unify()
函数,你可以更灵活地控制样式的应用条件,同时保持代码的简洁性和可维护性。
4. selector-replace($selector, $original, $replacement)
selector-replace($selector, $original, $replacement)
是 Sass 中的一个选择器函数,它允许你在给定的选择器字符串中替换特定的部分。这个函数非常适合用于动态修改选择器,例如从一个基础类创建多个变体,或者基于某种逻辑更改选择器中的某个部分。
以下是两个使用 selector-replace()
函数的例子:
示例 :创建按钮大小变体
假设你有一个基础按钮类 .btn
,并且想要为不同尺寸的按钮创建样式变体(如 .btn-small
、.btn-medium
和 .btn-large
)。你可以利用 selector-replace()
来动态生成这些变体。
$base-selector: ".btn";
$sizes: (small, medium, large);@each $size in $sizes {// 使用 selector-replace 创建不同尺寸的按钮选择器#{selector-replace('.btn', '.btn', '.btn-#{$size}')} {padding: if($size == small, 5px, if($size == medium, 10px, 15px));font-size: if($size == small, 12px, if($size == medium, 14px, 16px));}
}// 编译后的 CSS 将会是:
.btn-small {padding: 5px;font-size: 12px;
}.btn-medium {padding: 10px;font-size: 14px;
}.btn-large {padding: 15px;font-size: 16px;
}
在这个例子中,我们使用了 @each
循环和 selector-replace()
函数来动态创建三种不同尺寸的按钮选择器,并根据尺寸的不同设置了不同的内边距和字体大小。
5. selector-parse($string)
selector-parse($string)
是 Sass 中的一个选择器函数,它解析一个字符串形式的选择器表达式,并将其转换为 Sass 可以理解的选择器结构。这个函数主要用于高级用途,比如当你需要动态地处理或生成选择器时。
以下是两个使用 selector-parse()
函数的例子:
示例 1:解析并组合选择器
假设你有一个基础类 .module
和一个修饰符类 .module-item
,并且你想要动态创建一个新的选择器来应用样式。你可以先使用 selector-parse()
来解析这些选择器,然后使用其他选择器函数(如 selector-append()
或 selector-nest()
)来构建新的选择器。
// 定义选择器字符串
$base-selector-string: ".module";
$modifier-selector-string: ".module-item";// 使用 selector-parse 解析选择器字符串
$base-selector: selector-parse($base-selector-string);
$modifier-selector: selector-parse($modifier-selector-string);// 动态创建组合选择器
#{selector-append($base-selector, $modifier-selector)} {background-color: lightblue;
}// 编译后的 CSS 将会是:
.module.module-item {background-color: lightblue;
}
在这个例子中,我们首先定义了两个选择器字符串,然后使用 selector-parse()
将它们解析为 Sass 的选择器结构。接着,我们使用 selector-append()
函数将这两个选择器连接起来,创建了一个新的组合选择器 .module.module-item
。
示例 2:解析复杂的选择器表达式
有时候你需要处理更复杂的选择器表达式,例如包含伪类、后代选择器等。selector-parse()
可以帮助你正确解析这些表达式,以便进一步操作或验证。
// 定义复杂的原始选择器字符串
$complex-selector-string: ".nav > ul li:first-child a:hover";// 使用 selector-parse 解析复杂的选择器字符串
$parsed-selector: selector-parse($complex-selector-string);// 直接使用解析后的选择器来应用样式
#{$parsed-selector} {color: red;text-decoration: underline;
}// 编译后的 CSS 将会是:
.nav > ul li:first-child a:hover {color: red;text-decoration: underline;
}
在这个例子中,我们定义了一个包含多个部分的复杂选择器字符串,包括后代选择器 (>
)、子元素选择器 (li:first-child
) 和伪类 (a:hover
)。通过 selector-parse()
,我们可以确保这个复杂的字符串被正确解析成 Sass 的选择器结构,从而可以在后续的Sass代码中安全地使用它。
注意事项
- 调试和验证:
selector-parse()
对于调试和验证选择器非常有用,特别是在处理动态生成的选择器时。 - 结合其他函数使用:通常你会将
selector-parse()
结合其他选择器函数一起使用,以实现更强大的功能,如动态构建选择器、条件性扩展等。 - 编译性能:虽然
selector-parse()
提供了强大的灵活性,但在大量使用时可能会影响编译性能,因此应谨慎使用。
通过合理运用 selector-parse()
,你可以更灵活地处理和生成选择器,从而编写出更加动态和模块化的 Sass 代码。
6.is-superselector(super, sub)
is-superselector($super, $sub)
是 Sass 中的一个选择器函数,用于判断一个选择器是否是另一个选择器的超级选择器(即更通用的选择器)。如果 $super
是 $sub
的超级选择器,则返回 true
;否则返回 false
。这个函数在需要验证选择器关系或进行条件性样式应用时非常有用。
示例:验证选择器关系并有条件地应用样式
假设我们有一个基础类 .card
和它的变体 .card.large
。我们想要确保只有当 .card.large
确实是 .card
的子集时才应用特定的样式。我们可以使用 is-superselector()
来实现这一点。
// 定义两个选择器
$base-selector: ".card";
$variant-selector: ".card.large";// 使用 is-superselector 检查选择器关系
@if is-superselector($base-selector, $variant-selector) {// 如果 .card.large 是 .card 的子集,则应用样式#{$variant-selector} {padding: 20px;font-size: 1.2em;}
} @else {// 如果不是,则可以提供备用样式或者警告信息body::after {content: "Warning: .card.large is not a subset of .card.";color: red;}
}// 编译后的 CSS 将会是:
.card-large {padding: 20px;font-size: 1.2em;
}
在这个例子中,is-superselector(".card", ".card.large")
返回 true
,因为 .card.large
是 .card
的一种特殊情况(即它总是包含 .card
的所有属性,并可能添加更多自己的属性)。因此,编译后的 CSS 会为 .card.large
应用指定的样式。
注意事项:
- 选择器特异性:
is-superselector()
只检查选择器的关系,而不考虑它们的具体性(specificity)。例如,.container .card
和.card
之间的关系会被正确识别,但.container .card
和.card.special
之间则不会。 - 伪类和伪元素:该函数也可以处理包含伪类(如
:hover
)和伪元素(如::before
)的选择器。 - 动态逻辑:
is-superselector()
在编写动态或条件性的 Sass 代码时特别有用,可以帮助你确保只在适当的情况下应用某些样式规则。
通过这种方式,你可以利用 is-superselector()
函数来增强你的 Sass 代码逻辑,确保样式规则的应用更加严谨和准确。
7.simple-selectors(selectors)
simple-selectors($selectors)
是 Sass 中的一个选择器函数,它将一个复杂的选择器字符串分解为简单的选择器列表。这个函数可以帮助你分析和处理复杂的选择器,特别是在你需要对选择器进行进一步操作或验证时非常有用。
示例:分解复杂选择器并应用样式
假设我们有一个复杂的选择器 div.myInput:before
,并且我们想要分别对每个简单选择器部分应用样式或者进行逻辑判断。我们可以使用 simple-selectors()
函数来分解这个复杂的选择器。
// 定义一个复杂的选择器字符串
$complex-selector: "div.myInput:before";// 使用 simple-selectors 函数拆解选择器
$simple-selectors-list: simple-selectors($complex-selector);// 遍历每个简单选择器并输出它们(仅用于演示)
@each $selector in $simple-selectors-list {.debug-#{$selector} {content: "#{$selector}";display: block;margin: 5px 0;padding: 5px;background-color: lightgray;border: 1px solid gray;}
}// 编译后的 CSS 将会是:
.debug-div {content: "div";display: block;margin: 5px 0;padding: 5px;background-color: lightgray;border: 1px solid gray;
}.debug-.myInput {content: ".myInput";display: block;margin: 5px 0;padding: 5px;background-color: lightgray;border: 1px solid gray;
}.debug-:before {content: ":before";display: block;margin: 5px 0;padding: 5px;background-color: lightgray;border: 1px solid gray;
}
正确的应用场景
simple-selectors()
的典型应用场景包括但不限于:
- 选择器验证:确保某个复杂选择器包含特定的简单选择器。
- 调试工具:帮助开发者理解复杂选择器的实际组成部分。
- 自动化测试:编写脚本来自动检测和修复不正确或不符合规范的选择器。
总之,虽然 simple-selectors()
提供了强大的选择器解析能力,但在实际编写样式规则时应当谨慎使用,确保其用途符合预期。对于大多数情况来说,直接编写明确的选择器通常更加直观和安全。
使用注意事项
- 性能考虑:虽然选择器函数提供了强大的功能,但是过度使用可能会导致编译时间增加以及难以维护的代码。
- 可读性:确保你的代码仍然易于理解和阅读。过多依赖选择器函数可能导致复杂的选择器链,降低代码的清晰度。
通过合理运用这些选择器函数,你可以编写更加模块化和可维护的Sass代码,同时保持高效的开发流程。请根据具体的项目需求来决定何时何地应用这些工具。
相关文章:
6_Sass 选择器函数 --[CSS预处理]
Sass 提供了一系列的选择器函数,用于操作和组合CSS选择器。这些函数可以帮助你更灵活地创建样式规则,并且可以减少重复代码。以下是几个常用的选择器函数及其用法: 1. selector-append($selector1, $selector2...) selector-append($select…...
系列2:基于Centos-8.6Kubernetes 集成GPU资源信息
每日禅语 自省,就是自我反省、自我检查,自知己短,从而弥补短处、纠正过失。佛陀强调自觉觉他,强调以达到觉行圆满为修行的最高境界。要改正错误,除了虚心接受他人意见之外,还要不忘时时观照己身。自省自悟之…...
C# 探险之旅:第三十五节 - 类型class之抽象类 (Abstract Class) 和 抽象方法 (Abstract Method)
👋 嗨,勇敢的探险家们!欢迎再次踏上C#的神秘之旅。今天,我们要进入一片既神秘又充满无限可能的领域——抽象类与抽象函数的奇幻森林。想象一下,你是一名勇敢的骑士,要在这片森林里寻找传说中的“编程之宝”…...
npm内存溢出
项目过大运行项目内存溢出 报错代码 运行内存溢出 increase-memory-limit ‘“node --max-old-space-size8192”’ 不是内部或外部命令,也不是可运行的程序 FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of m…...
CSS|08 浮动清除浮动
浮动 需求: 能够实现让多个元素排在同一行,并且给这些元素设置宽度与高度! 让多个元素排在同一行:行内元素的特性 给这些元素设置宽高:块级元素的特性 在标准文档流中的元素只有两种:块级元素和行内元素。如果想让一些元素既要有块级元素的特点也要有行内元素的特…...
【学习笔记】反向传播到底是如何进行的?
文章目录 一、写在前面二、举个例子三、混合损失函数如何进行呢? 一、写在前面 不知道小伙伴们有没有考虑过这种感觉,在最开始学习深度学习的时候,一定都了解过前向传播,反向传播等等,但是在实际的操作过程中却“几乎…...
利用cnocr库完成中文扫描pdf文件的文字识别
很多pdf文件文字识别软件都会收费,免费的网页版可能会带来信息泄露,还有一些类似于腾讯AI和百度AI的接口都有调用次数限制,因此,利用识别正确率极高且免费的cnocr库来自己动手做个pdf文件文字识别程序就是一个很不错的选择。以下程…...
el-table ToggleRowSelection实现取消选中没效果(virtual-scroll)
场景: 就是在虚拟列表el-table选中之后 点击查询 默认之前选中的 现象: 就是实现选中, 但是无法去除勾选等等 问题发现: 看定位的数据 有多个一样的,我想着勾选之前 先去掉勾选 ,但是没效果或者说“相同的…...
Vue入门到精通:运行环境
Vue入门到精通:运行环境 Vue3的运行环境搭建主要有两种方法:一种是直接在页面中引入Vue库,另一种是通过脚手架工具创建Vue项目。 (一)页面直接引入Vue库 页面直接引入Vue库的方法,是指在HTML网页中通过s…...
LNK2001: virtual struct QMetaObject const 错误的解决方法和原因
目录 1.现象 2.原因分析 3.解决方法 3.1.方法1 3.2.方法2 1.现象 今天调整了下工程目录结构(环境是VS2019Qt5.12.12),重新编译突然出现以下错误: 没有修改代码,怎么就出现这个错误了呢?从上面的错误来看,其实就是…...
电脑win11家庭版升级专业版和企业版相关事项
我的是零刻ser9,自带win11家庭版,但是我有远程操控需求,想用windows系统自带的远程连接功能,所以需要升级为专业版。然后在系统激活页面通过更改序列号方式,淘宝几块钱买了个序列号升级成功专业版了。但是,…...
用户认证系统登录界面
下面是使用HTML和JavaScript实现的一个中文版登录界面,包含登录、注册和修改密码功能。注册成功后会显示提示信息,在登录成功后进入一个大大的欢迎页面。 1.代码展示 <!DOCTYPE html> <html lang"zh-CN"> <head><meta …...
深圳国威HB1910数字IP程控交换机 generate.php 远程命令执行漏洞复现
0x01 产品描述: 深圳国威主营国威模拟、数字、IP 交换机、语音网关、IP 电话机及各种电话机。深圳国威电子有限公司HB1910是一款功能强大的网络通信设备,适用于各种企业通信需求。 0x02 漏洞描述: 深圳国威电子有限公司HB1910数字IP程控交换机generate.php存在远程命令执行…...
客户端(浏览器)vue3本地预览txt,doc,docx,pptx,pdf,xlsx,csv,
预览文件 1、入口文件preview/index.vue2、预览txt3、预览doc4、预览pdf5、预览pptx6、预览xlsx7、预览csv 1、入口文件preview/index.vue 预览样式,如pdf 文件目录如图所示: 代码如下 <template><div class"preview-wrap" ref&…...
(八)机器学习 - 线性回归
线性回归(Linear Regression)是一种统计学方法,用于建立一个或多个自变量(解释变量)与因变量(响应变量)之间的线性关系。线性回归的目的是通过最小化预测误差来找到最佳的线性拟合模型ÿ…...
Springboot 整合 Java DL4J 打造金融风险评估系统
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程,高并发设计,Springboot和微服务,熟悉Linux,ESXI虚拟化以及云原生Docker和K8s…...
CSDN博客:如何使用Python的`datasets`库转换音频采样率
CSDN博客:如何使用Python的datasets库转换音频采样率 什么是采样率?代码用途:调整音频数据的采样率完整代码示例代码详解运行结果(示例)总结 在这篇文章中,我们将学习如何使用Python的datasets库对音频数据…...
geoserver(1) 发布sql 图层 支持自定义参数
前提使用postgis 数据库支持关联 join 支持 in,not in,like,及其他sql原生函数 新增sql图层 编写自定义sql 编辑sql语句必须输出带有geom数据 正则表达式去除 设置id以及坐标参考系 预览sql图层效果 拼接sql参数 http://xxx.com/geoserver/weather/wms?SERVICEWMS&VERSI…...
从 Router 到 Navigation:HarmonyOS 路由框架的全面升级与迁移指南
在本教程中,我们深入探讨了 Router 和 Navigation 在 HarmonyOS 中的用法差异及如何从 Router 切换到 Navigation 的方法。重点涵盖了页面跳转、转场动画、生命周期管理以及跨包路由的实现。 页面结构对比 Router 页面结构 每个页面需要使用 Entry 注解。 页面需要…...
http1.1 vs http2.0 速度对比实测
首先对比一下http1.1 vs http2.0 区别: 1. 连接管理: HTTP/1.1: 每个请求/响应都需要一个独立的 TCP 连接,虽然可以使用持久连接(keep-alive)来复用连接,但仍然存在请求队头阻塞(Head-of-Line…...
uniappp配置导航栏自定义按钮(解决首次加载图标失败问题)
1.引入iconfont的图标,只保留这两个文件 2.App.vue引入到全局中 import "./static/fonts/iconfont.css"3.pages.json中配置text为图标对应的unicode {"path": "pages/invite/invite","style": {"h5": {"…...
vue运行项目时local有显示 但是network却显示unavailable
问题描述 日常开发中 和后端本地调试时 后端需要使用你的本地去访问页面 可运行项目时会出现network显示unavailable的情况 解决方式 1.其实这只是vue脚手架对于ip地址获取的方式兼容上有一些问题 但其实是不影响ip访问本地的 你可以直接cmd内ipconfig去查看自己的ip然后…...
【Java学习笔记】JUnit
一、为什么需要 JUnit 二、基本介绍 三、实现方法 第一次添加: 在需要测试的方法处输入 Test注解,快捷键AltInsert选择添加版本(常用JUnit5.4) 出现绿色箭头可进行测试和编译...
Next.js配置教程:构建自定义服务器
更多有关Next.js教程,请查阅: 【目录】Next.js 独立开发系列教程-CSDN博客 目录 前言 1. 什么是自定义服务器? 2. 配置自定义服务器 2.1 基础配置 2.2 集成不同的服务器框架 使用Fastify 使用Koa 3. 自定义服务器的高级功能 3.1 路…...
el-table 动态计算合并行
原始表格及代码 <el-table:data"tableData"class"myTable"header-row-class-name"tableHead" ><el-table-column prop"date" label"日期"> </el-table-column><el-table-column prop"name" …...
【杭州电商商城系统开发建设】
杭州电商商城系统开发建设是一项综合性的工程,它涉及到多个方面的内容。以下是对杭州电商商城系统开发建设的详细分析: 需求分析:深入了解用户需求,包括用户群体特征、购物习惯、支付偏好等,为系统设计提供基础。明确…...
架构实践05-互联网架构模板
零、文章目录 架构实践05-互联网架构模板 1、技术演进的方向 (1)技术演进的方向判断 潮流派:热衷于新技术,紧跟技术潮流,但可能面临技术不成熟的风险和学习成本。保守派:强调稳定,对新技术持…...
家校通小程序实战教程10部门管理前后端连接
目录 1 加载后端的数据2 为什么不直接给变量赋值3 保存部门信息4 最终的效果5 总结 现在部门管理已经完成了后端功能和前端开发,就需要在前端调用后端的数据完成界面的展示,而且在录入部门信息后需要提交到数据库里,本篇我们介绍一下前后端如…...
【前端面试题】书、定位问题、困难
看过什么书 《JavaScript 高级程序设计(第 4 版)》(作者:Matt Frisbie) 这是一本深入学习 JavaScript 语言的经典书籍。它详细地涵盖了 JavaScript 的高级特性,包括原型链、闭包、异步编程等复杂概念。以闭…...
VSCode设置字体
参考文章:【面向小白】vscode最佳实践(2)—— 字体设置(fira code更纱黑体),这篇文章末尾给了安装字体的链接。 配置的字体还是很好看的。 ‘Fira Code Retina’, ‘Sarasa Mono Sc’ 需要注意的一个点&am…...
《机器学习》2.4假设检验 t分布 F分布
目录 t发布 注意是这个东西服从t分布 数据服从t分布通常是在以下情况下: 以下是一些具体的例子,说明在何种情况下数据会服从t分布: t检验 交叉验证t检验 样本方差编辑 F分布(fisher Friedman检验是一种非参数统计方法&a…...
Mysql之视图
MySQL 视图(View) 1. 概念 视图是一个虚拟的表,它是基于 SELECT 查询的结果集。视图不存储实际数据,而是动态地从基表中提取数据。视图可以简化复杂查询、提高数据安全性(限制访问特定列或行)以及提供数据…...
kafka学习笔记
kafka消息中间件精讲 - B站动力节点 JDK17在Windows安装及环境变量配置超详细的教程 Windows 多版本java 装多个版本jdk Windows同时安装多个JDK jdk17下载与安装教程(win10),超详细 jdk17-archive-downloads 如何在IDEA中配置指定JDK版…...
【保姆级教程】基于OpenCV+Python的人脸识别上课签到系统
【保姆级教程】基于OpenCVPython的人脸识别上课签到系统 一、软件安装及环境配置1. 安装IDE:PyCharm2. 搭建Python的环境3. 新建项目、安装插件、库 二、源文件编写1. 采集人脸.py2. 训练模型.py3. 生成表格.py4. 识别签到.py5. 创建图形界面.py 三、相关函数分析1.…...
LVS能否实现两台服务器的负载均衡
LVS能否实现两台服务器的负载均衡 是的,LVS(Linux Virtual Server)可以实现两台服务器的负载均衡,并且它非常适合这种场景。 LVS(Linux Virtual Server)简介: LVS 是一种基于 Linux 的负载均…...
智能人体安全防护:3D 视觉技术原理、系统架构与代码实现剖析
随着工业化程度的提高,生产安全已成为企业关注的重点。尤其是在一些存在禁区的工业厂区和车间,人员误入或违规进入将带来严重的安全隐患。为了解决这一问题,迈尔微视推出了智能人体安全检测解决方案,为企业提供全方位的人员安全监…...
JAVA后端实现全国区县下拉选择--树形结构
设计图如图: 直接上代码 数据库中的格式: JAVA实体类: Data public class SysAreaZoningDO {private Long districtId;private Long parentId;private String districtName;private List<SysAreaZoningDO> children; } MapperSQL语句…...
DVWA及其他常见网络靶场
常见网络靶场 Metasploitable2 介绍: Metasploitable2 是一个用于安全培训和测试渗透测试工具的虚拟靶机。它故意配置了许多已知的安全漏洞,涵盖了操作系统、网络服务等多个方面。基于 Ubuntu Linux 操作系统构建,包含了如 Apache、MySQL、FT…...
API接口安全:电商数据保护的坚固防线
随着电子商务的蓬勃发展,电商平台的数据安全和隐私保护成为了至关重要的议题。API(应用程序编程接口)作为电商平台与外部系统交互的桥梁,其安全性直接关系到整个平台的数据保护能力。本文将从API接口安全的重要性、面临的安全威胁…...
springboot437校园悬赏任务平台(论文+源码)_kaic
摘 要 使用旧方法对校园悬赏任务平台的信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在校园悬赏任务平台的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及时纠正等问题。这次开发的校…...
可视化报表如何制作?一文详解如何用报表工具开发可视化报表
在如今这个数据驱动的商业时代,众多企业正如火如荼地推进数字化转型,力求在激烈的市场竞争中占据先机。然而,随着业务规模的扩大和运营复杂度的提升,企业的数据量爆炸式增长,传统报表格式单一、信息呈现密集且不易解读…...
STM32 HAL库之SDIO例程 Micro SD卡 - 2
1、硬件图 2、示例代码 根据提示配置SDCLK为72/3 24MHz。 static void MX_SDIO_SD_Init(void) {/* USER CODE BEGIN SDIO_Init 0 */SD_InitTypeDef Init;Init.ClockEdge SDIO_CLOCK_EDGE_RISING;Init.ClockBypass SDIO_CLOCK_BYPASS_DISABLE;Init.ClockPo…...
架构实践02-高性能架构模式
零、文章目录 架构实践02-高性能架构模式 1、 高性能数据库集群:读写分离 (1)引言 背景:随着业务的发展和数据的增长,单个数据库服务器难以满足需求,必须考虑数据库集群。目的:介绍高性能数…...
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 …...
Docker与虚拟机:虚拟化技术的差异解析
在信息技术飞速发展的今天,虚拟化技术已成为现代IT架构不可或缺的一部分。而虚拟化从技术层面划分则分为以下几种: 完全虚拟化:虚拟机能够完全模拟底层硬件的特权指令的执行过程,客户操作系统无须进行修改。 硬件辅助虚拟化&#…...
数据结构——ST表
ST表的定义 ST表,又名稀疏表,是一种基于倍增思想,用于解决可重复贡献问题的数据结构 倍增思想 这里列举一个去寻找一个区间内的最大值的例子 因为每次会将将区间增大一倍,所以才被称之为倍增思想 ,这种思想十分好用…...
flutter命令行直接指定设备
> flutter driver Found 3 connected devices:sdk gphone16k x86 64 (mobile) • emulator-5554 • android-x64 • Android 15 (API 35) (emulator)Linux (desktop) • linux • linux-x64 • Ubuntu 22.04.5 LTS 6.8.0-49-genericChrome (…...
【STM32】RTT-Studio中HAL库开发教程九:FLASH中的OPT
文章目录 一、概要二、内部FLASH排布三、内部FLASH主要特色四、OTP函数介绍五、测试验证 一、概要 STM32系列是一款强大而灵活的微控制器,它的片内Flash存储器可以用来存储有关代码和数据,在实际应用中,我们也需要对这个存储器进行读写操作。…...
COLA学习之代码规范(二)
小伙伴们,你们好,我是老寇,上一节,我们学习了DDD相关术语,继续跟老寇学习COLA代码规范 代码规范 包命名 层次包名功能必选Adapter层web处理页面请求Controller否Adapter层wireless处理无线端适配否Adapter层wap处理…...
【优选算法】二分算法(在排序数组中查找元素的第一个和最后一个位置,寻找峰值,寻找排序数组中的最小值)
二分算法简介: 提到二分我们可能都会想起二分查找,二分查找要求待查找的数组是有序的,与我们今天讲的二分算法不同,并不是数组元素严格按照有序排列才可以使用二分算法,只要数组中有一个点可以将数组分为两个部分&…...