当前位置: 首页 > news >正文

【CSS in Depth 2 精译_068】11.2 颜色的定义(下):CSS 中的各种颜色表示法简介

当前内容所在位置(可进入专栏查看其他译好的章节内容)

  • 第四部分 视觉增强技术 ✔️
  • 【第 11 章 颜色与对比】 ✔️
    • 11.1 通过对比进行交流
      • 11.1.1 模式的建立
      • 11.1.2 还原设计稿
    • 11.2 颜色的定义
      • 11.2.1 色域与色彩空间
      • 11.2.2 CSS 颜色表示法 ✔️
        • 11.2.2.1 RGB 与 十六进制颜色 ✔️
        • 11.2.2.2 HSL 颜色表示法 ✔️
        • 11.2.2.3 HWB 颜色表示法 ✔️
        • 11.2.2.4 新一代色彩空间 ✔️
        • 11.2.2.5 LAB 和 OKLAB 颜色表示法 ✔️
        • 11.2.2.6 LCH 和 OKLCH 颜色表示法 ✔️

文章目录

    • 11.2.2 CSS 颜色表示法 CSS color notations
      • 11.2.2.1 RGB 与十六进制颜色表示法 RGB and hex color
      • 11.2.2.2 HSL 颜色表示法 HSL color
      • 11.2.2.3 HWB 颜色表示法 HWB color
      • 11.2.2.4 新一代色彩空间 Next-generation color spaces
      • 11.2.2.5 LAB 和 OKLAB 颜色表示法 LAB and OKLAB color
      • 11.2.2.6 LCH 和 OKLCH 颜色表示法 LCH and OKLCH color

《CSS in Depth》新版封面

《CSS in Depth》新版封面

译者按
再次怀着无比敬畏之心完成本小节的翻译。本篇几乎完全重写了上一版中的同名章节内容,将 CSS 近年来在颜色描述方面的重大进展及相关背景情况都一一进行了介绍。虽然每个部分的篇幅并不长,但硬核知识点是一个都不少。即便是亲自翻译了一遍,个别知识点的理解还远远不够,需要另抽时间不断强化。一起来看看吧。

11.2.2 CSS 颜色表示法 CSS color notations

CSS 目前支持多种颜色表示方法,包括 rgb() 表示法和 hsl() 函数表示法等。这些函数在各种浏览器中都得到了很好的支持。

另外还有一些新的表示法尚未得到很好的支持,例如 hwb()lab()lch()oklab()oklch() 等等。这些颜色表示方法也是直到 2022 年末至 2023 年 6 月前后才陆续添加到浏览器中。截止到 2024 年 6 月前后,启用这些颜色表示法可能还需要定义回退值才妥当;不过随着浏览器的逐步升级,这些新的表示法也将逐渐推广普及。想了解最新的浏览器兼容情况,可以查看 Can I Use 网站发布的最新数据:https://mng.bz/EZKo。

译注:OKLCH 的浏览器最新兼容情况

以下为截至 2024 年 12 月 6 日 OKLCH 颜色表示法在各种浏览器上的兼容情况截图。可以看到目前 OKLCH 已经得到了各大主流浏览器的全面支持,综合支持率也已高达 92.19%。是时候深入解析这一全新的颜色描述方式了。

补图 OKLCH 颜色体系当前的浏览器支持情况一览表,已全面获得各主流浏览器支持(截至 2024 年 12 月 6 日)

【补图:OKLCH 颜色体系当前的浏览器支持情况一览表,已全面获得各主流浏览器支持(截至 2024 年 12 月 6 日)】

上面提到的每一种表示方法都对应一个特定的色彩空间,它们整体为 CSS 的颜色管理提供了海量的选择。接下来我将简要介绍每种表示法的工作原理以及它们之间的相互关系。然后会从中选取几种表示法进行对比演示。

我最偏好的表示法是 hsl() —— 这也是浏览器目前兼容性最好的颜色表示方法了。此外还有 oklch() 表示法 —— 一种最为直观(intuitive)的颜色表示法。相信在不久的将来,一旦得到浏览器的普遍支持,oklch() 必将成为我新的首选表示法。

11.2.2.1 RGB 与十六进制颜色表示法 RGB and hex color

十六进制颜色表示法分别规定了红、绿、蓝三原色的取值,且每种颜色分量都用两位数的十六进制数值来表示,取值范围介于 00FF 之间。十六进制是一种以 16 为基数的数字系统,十到十五的数值分别用字母 AF 表示。例如颜色 #80c090 表示红色 80、绿色 c0、蓝色 90(相当于十进制下的红色 128、绿色 192 和蓝色 144)。

新版的八位十六进制表示法还包括了另外两位数,用于表示 α 通道(alpha channel 值,即透明度的大小。该值的取值范围同样介于 00(即完全透明)到 FF(即完全不透明)。因此,#80c09088 其实是颜色值 #80c090 的半透明版本。

注意

十六进制表示法有时也可以简写为三位数,其中每位数字都各重复一次(doubled)。例如,#c90 等效于 #cc9900。此外还有一种对应的四位数表示,可以通过类似处理扩展为带 α 值的八位十六进制颜色值。

rgb() 函数则是一种使用十进制数而非十六进制数来描述颜色的方法。其各颜色分量的取值范围不再是十六进制下的 00FF,而是对应的 0255。例如 rgb(0 0 0) 表示纯黑色(等效于 #000);rgb(136 0 0) 则表示砖红色(等效于 #800)。

RGB 与十六进制表示法仅适用于 sRGB 色域标准。无论是 RGB 表示法还是十六进制表示法,理解起来都有点费劲。我们见到一个颜色值,例如 #2097c9,或者它对应的 RGB 颜色,无法联想到它在页面会渲染成什么样。如果尝试分解一下,它的红色值(20)将非常少,绿色值(97)为中等水平,蓝色值(c9)则相对偏高。经分析得出,该颜色的蓝色和绿色占主导,但是颜色有多深呢?又有多鲜艳呢?都说不准。事实上,RGB 颜色表示法很不直观,它们本来就是方便计算机读取的,并不适合用肉眼识别。

十六进制颜色表示法只有当需要某种书写简洁、且可以方便地在不同应用程序之间复制粘贴颜色值时才有一席用武之地;而 RGB 表示法同样问题多多,和十六进制法相比妥妥的令人费解有余而方便简洁不足。然而其他大部分颜色表示法都比它们更加好懂且易用。

11.2.2.2 HSL 颜色表示法 HSL color

HSL 则是一种更适合人类读取的颜色表示法,其名称分别代表色调(Hue)、饱和度(Saturation)和亮度(Lightness)。HSL 的语法形如 hsl(198deg 73% 46%),相当于十六进制下的 #2097c9

HSL 中,代表色调的第一个参数其实是一个角度值,取值范围介于 0 度到 359 度之间。它代表色相环 1 上的度数,可以从红色(red,0度)依次过渡到黄色(yellow,60度)、绿色(green,120度)、青色(cyan,180度)、蓝色(blue,240度)、洋红色(magenta,300度),然后再回到红色。此外,角度取值范围以外的值仍然是有效的,并可通过加减 360 度来找到等效的色相环上的色调值。书写时也可以省略角度单位 deg,直接写成一个数字。

HSL 表示法的第二个参数代表饱和度,是一个代表颜色强度的百分数:值为 100% 时颜色最鲜艳;为 0% 则意味着没有彩色,仅呈现一片灰色。

HSL 表示法的第三个参数表示亮度。它也是百分数,用以描述颜色的明暗程度。大部分鲜艳的颜色采用的是 50% 的亮度值,且亮度值越高,颜色越浅,浅至 100% 时就变成了纯白色;而当亮度值越低,颜色越深,深至 0% 就变成了黑色。

再比如,hsl(198deg 73% 46%) 这个颜色值,其色调为青蓝色,饱和度相当高(73%),而亮度接近 50%,因此会产生一个比天蓝色更深一些的蓝色。HSL 颜色表示法也只适用于 sRGB 色域标准。

提示:一种更新的、不使用逗号的颜色函数表示法

在 CSS 首次引入 RGB 表示法和 HSL 表示法时,rgb()hsl() 颜色函数在使用时必须用逗号分隔每个参数,不能写作 rgb(136 0 0),而必须写作 rgb(136, 0, 0)。为了向下兼容,这些颜色函数继续保留用逗号分隔的写法;而对于其他新推出的颜色函数就只支持不带逗号的写法。因此推荐使用无逗号写法,这样所有浏览器都支持该语法。

rgb()hsl() 也有相应的 rgba() 版本和 hsla() 版本,这些扩展函数可以接受第四个参数来设置代表颜色透明度的 alpha 通道值。现在已经不用再写这些扩展函数了,因为新版语法也支持写在斜线后的 alpha 参数设置。例如,rgb(136 0 0 / 0.7) 定义了一个 不透明度70% 的砖红色(brick red)。后续介绍的所有颜色函数都支持通过这种方式设置的不透明度。

11.2.2.3 HWB 颜色表示法 HWB color

HWB 表示色调(Hue)、白度(Whiteness)和黑度(Blackness)。例如,某颜色利用该表示法可以写作 hwb(198deg 12.5% 20.4%)。它其实等效于之前介绍过的用 HSL 表示法描述的那个深蓝色。

HWB 颜色表示法中的色调值等同于 HSL 表示法中的色调值;同样,它既可以写成一个角度值,也可以直接写成一个数字。

HWB 表示法中的 W 值和 B 值均为百分数,分别用于描述该颜色混入了多少白色或黑色。如果两个值都偏低,那么最终颜色就会更鲜艳。hwb(0deg 100% 0%) 即为纯白色(此时的颜色与色调无关);而 hwb(0deg 0% 100%) 则为纯黑色;如果 W 和 B 之和大于或等于 100%,则最终颜色将为纯灰色,其深浅程度取决于二者中取值更大的一方。HWB 表示法同样仅适用于 sRGB 色域标准。

11.2.2.4 新一代色彩空间 Next-generation color spaces

接下来的四种颜色表示法适用于 广色域色彩空间(wide gamut color spaces)。这些表示方法不局限于 sRGB 色域或其他任何色域,而是能够代表人眼所能看到的任何颜色。换句话说,它们甚至可以描述超出硬件能力边界的颜色。在这种情况下,浏览器会自动将这些颜色做圆整处理,并归入最接近的可用色域范围内——只要不超出预期的取值范围,通常就能得到可接受的备选颜色。比如,可以利用这个原理来指定 P3 色域下的颜色,对于不支持 P3 色域的显示器而言,用户最终看到的将是最接近该颜色的 sRGB 色域下的近似值。

这些颜色表示法的另一个好处在于,它们力求在色彩感知上做到线性展示。也就是说,其颜色值是根据我们人类的感知来定制的。例如,在 HSL 体系中,亮度为 50% 的绿色会比同等亮度下的蓝色看起来更亮一些,因为我们的眼睛会认为绿色更亮;而在新一代色彩空间中,色彩是均衡的(balanced),因此相同亮度的所有色调对我们的眼睛而言都是一样的。同理,在控制色彩鲜艳度的数值上也是如此。

LABLCH 是其中最先创建的两种颜色表示法,但它们的规范尤其是在一些蓝色和紫色的色调方面还存在一些与规范不一致的地方,因此其表现也差强人意。后来 OKLABOKLCH 表示法取代了它们。新方法在概念上类似,但行为上可预测性更强。虽然接下来我将分别介绍这四种颜色表示法的工作原理,但还是强烈推荐使用 OKLABOKLCH 表示法。浏览器对以上四种表示法的支持情况也几乎完全相同。

11.2.2.5 LAB 和 OKLAB 颜色表示法 LAB and OKLAB color

LAB 颜色及其后续版本 OKLAB 都定义了三个维度值:亮度、A 轴(A axis)与 B 轴(B axis)。其语法格式形如 lab(58% -19 -35) 或者 oklab(65% -0.06 -0.1)。虽然二者的数值不同,但在概念上都是相同的。

第一个参数,亮度,是一个值域介于 0%(即黑色)到 100%(白色)的百分数。在 LAB 表示法中,也可以使用 0 到 100 间的数字来表示;而在 OKLAB 中,还可以写成 0 到 1.0 之间的数字。鉴于这种写法上的差异可能引起混淆,推荐还是使用百分数为上。

而 A 轴的取值范围介于红色到绿色;B 轴则介于蓝色到黄色。在 OKLAB 中,这些值的具体范围分别是 -0.40.4(也可以使用 -100%100% 之间的百分数来表示)。而在 LAB 中,上述值的值域则为 -125125

LABOKLAB 都是矩形色彩空间,类似于 RGB 的广色域版本;但与 RGB 类似,它们使用起来都不是很直观。

11.2.2.6 LCH 和 OKLCH 颜色表示法 LCH and OKLCH color

LCHOKLCH 则是与 HSL 相似的圆柱形色彩空间(cylindrical color spaces)。它们定义的是这三个维度值:亮度(Lightness)、色度(Chroma)和色调(Hue),语法上则可以写作 lch(58% 39.8 241.5deg) 以及 oklch(64% 0.12 233deg)

提示

OKLCH 这个名字有点拗口。Web 开发者 埃里克·波蒂斯(Eric Portis) 首创了 “Oklachroma” 这个词来作为 OKLCH 的一种更为友好的发音方式,别说还挺好记的。

第一个参数定义了感知到的亮度。它也是一个介于 0%(即黑色)到 100%(即白色)的百分数,也可以写成 01.0 的十进制形式,与 HSL 中的亮度定义非常类似,但 LCHOKLCH 在不同的色调表现中更加一致,更符合我们人眼的感知。

第二个参数色度值(chroma value)表示色彩的鲜艳程度。色度值为 0 则表示纯灰色,这与 HSL 中的饱和度也十分类似。从理论上讲,该参数值是没有范围限制的;但在实际应用中,OKLCH 色度的取值往往不超过 0.5(在 sRGB 色域中也不会超过 0.33)。而在 LCH 中,色度的取值范围则是 0230

最后一个参数是色调(hue)。它也是色相环上的某个角度值,类似 HSL 中的色调概念,只是具体数值重新做了调整。其取值范围为:从红色(red,30)依次过渡到黄色(yellow,90)、绿色(green,140)、青色(cyan,195)、蓝色(blue,260)、洋红色(magenta,330),最后又回到红色。

利用 color() 函数在更宽的色域中使用 RGB 颜色

CSS 提供了一个 color() 函数,可以用来手动设置色域及颜色值。例如,color(display-p3 0.3 0.59 0.77) 可以对 P3 色域下的红色、绿色、蓝色分别进行定义。该颜色值等效于 oklch(64% 0.12 233deg)

个人认为在通常情况下,该颜色表示法不如前面介绍的几种实用,因为它采用的是一种基于 RGB 的范式(RGB-based paradigm),写起来也比较冗长。由于 OKLABOKLCH 等广色域表示法可以描述肉眼可见光谱中的任何颜色,因此,如若将来显示器升级到支持更广的色域标准,它们仍然可以胜任各种色彩的展示。

不过,color() 函数除了支持 sRGBDisplay p3Rec2020 色域外,还支持更多冷僻色域,因此如果需要在特定色域内定义颜色,color() 函数应该会非常有用。想了解更多 color() 函数的相关信息,可以参考 MDN 的在线文档:https://mng.bz/lMQ6。

总结一下,以上介绍的每种颜色表示法都是由以下参数分别定义的:

  • RGB —— 红、绿、蓝(值域均为 0255
  • HSL —— 色调(角度值)、饱和度(百分数)、亮度(百分数)
  • HWB —— 色调(角度值)、白度(百分数)、黑度(百分数)
  • LAB —— 亮度(百分数),A 轴(-125 红色至 125 绿色),B 轴(-125 蓝色至 125 黄色)
  • OKLAB —— 亮度(百分数),A 轴(-0.4 红色至 0.4 绿色),B 轴(-0.4 蓝色至 0.4 黄色)
  • LCH —— 亮度(百分数)、色度(值域 0230)、色调(角度值)
  • OKLCH —— 亮度(百分数)、色度(值域 00.5)、色调(角度值)

上述表示方法中,大部分还支持 none 关键字来代替其中的某个参数,用于表示该参数无关紧要。例如,oklch(100% 0 0deg) 表示白色,因此色调的取值基本上没有意义。这时就可以写作 oklch(100% 0 none) 甚至是 oklch(100% none none)

图 11.12 对比展示了几种典型颜色在指定的几种色彩空间中的不同表示方法。对于其中个别数值做了些微调。

图 11.12 等效颜色值对比图

【图 11.12 等效颜色值对比图】

以上这些特定的颜色也可以通过引用它们的合法名称来进行声明(如 bluelavenderlightgray 等)。CSS 中大约有 150 种类似的合法命名颜色(named colors)。有关命名颜色的完整列表,详见 MDN 官方文档 <named-color>:https://mng.bz/NRoN。

想要熟悉 OKLCH 或者其他任何色彩空间,最好的方法莫过于付诸实践。下一节我将深入介绍 OKLCH 在页面颜色配置中的具体用法,并推荐几个在使用过程中挺有帮助的实用工具。




关于《CSS in Depth》(中译本书名《深入解析 CSS》)

第 1 版第 2 版
读者评分原版:4.7(亚马逊);中文版:9.3(豆瓣)原版:5.0(亚马逊);中文版:暂无,待出版
出版时间原版:2018 年 3 月;中文版:2020 年 4 月原版:2024 年 7 月;中文版:暂无,待出版
原价原版:$44.99;中文版:¥139.00原版:$59.99;中文版:暂无,待出版
现价原版:$36.49;中文版:¥52.54 起步原版:$52.09;中文版:暂无,待出版
原版国内预订起步价 ¥461.00起步价 ¥750.00

本专栏为该书第 2 版高分译文专栏,全网首发,精译精校,持续更新,计划今年内完成全书翻译,敬请期待!!!

目前已完结的章节(可进入本专栏查看详情,连载期间完全免费):

  • 第一章 层叠、优先级与继承(已完结)
    • 1.1 层叠
    • 1.2 继承
    • 1.3 特殊值
    • 1.4 简写属性
    • 1.5 CSS 渐进式增强技术
    • 1.6 本章小结
  • 第二章 相对单位(已完结)
    • 2.1 相对单位的威力
    • 2.2 em 与 rem
    • 2.3 告别像素思维
    • 2.4 视口的相对单位
    • 2.5 无单位的数值与行高
    • 2.6 自定义属性
    • 2.7 本章小结
  • 第三章 文档流与盒模型(已完结)
    • 3.1 常规文档流
    • 3.2 盒模型
    • 3.3 元素的高度
    • 3.4 负的外边距
    • 3.5 外边距折叠
    • 3.6 容器内的元素间距问题
    • 3.7 本章小结
  • 第四章 Flexbox 布局(已完结)
    • 4.1 Flexbox 布局原理
    • 4.2 弹性子元素的大小
    • 4.3 弹性布局的方向
    • 4.4 对齐、间距等细节处
    • 4.5 本章小结
  • 第五章 网格布局(已完结)
    • 5.1 构建基础网格
    • 5.2 网格结构剖析 (上)
      • 5.2.1 网格线的编号(下)
      • 5.2.2 网格与 Flexbox 配合(下)
    • 5.3 两种替代语法
      • 5.3.1 命名网格线
      • 5.3.2 命名网格区域
    • 5.4 显式网格与隐式网格(上)
      • 5.4.1 添加变化 (中)
      • 5.4.2 让网格元素填满网格轨道(下)
    • 5.5 子网格(全新增补内容)
    • 5.6 对齐相关的属性
    • 5.7 本章小结
  • 第六章 定位与堆叠上下文(已完结)
    • 6.1 固定定位
      • 6.1.1 创建一个固定定位的模态对话框
      • 6.1.2 在模态对话框打开时防止屏幕滚动
      • 6.1.3 控制定位元素的大小
    • 6.2 绝对定位
      • 6.2.1 关闭按钮的绝对定位
      • 6.2.2 伪元素的定位问题
    • 6.3 相对定位
      • 6.3.1 创建下拉菜单(上)
      • 6.3.2 创建 CSS 三角形(下)
    • 6.4 堆叠上下文与 z-index
      • 6.4.1 理解渲染过程与堆叠顺序(上)
      • 6.4.2 用 z-index 控制堆叠顺序(上)
      • 6.4.3 深入理解堆叠上下文(下)
    • 6.5 粘性定位
    • 6.6 本章小结
  • 第七章 响应式设计(已完结)
    • 7.1 移动端优先设计原则(上篇)
      • 7.1.1 创建移动端菜单(下篇)
      • 7.1.2 给视口添加 meta 标签(下篇)
    • 7.2 媒体查询(上篇)
      • 7.2.1 深入理解媒体查询的类型(上篇)
      • 7.2.2 页面断点的添加(中篇)
      • 7.2.3 响应式列的添加(下篇)
    • 7.3 流式布局
    • 7.4 响应式图片
    • 7.5 本章小结
  • 第八章 层叠图层及其嵌套
    • 8.1 用 layer 图层来操控层叠规则(上篇)
      • 8.1.1 图层的定义(上篇)
      • 8.1.2 图层的顺序与优先级(下篇)
      • 8.1.3 revert-layer 关键字(下篇)
    • 8.2 层叠图层的推荐组织方案
    • 8.3 伪类 :is() 和 :where() 的用法
    • 8.4 CSS 嵌套的使用
      • 8.4.1 嵌套选择器的使用
      • 8.4.2 深入理解嵌套选择器
      • 8.4.3 媒体查询及其他 @规则 的嵌套
    • 8.5 本章小结
  • 第九章 CSS 的模块化与作用域
    • 9.1 模块的定义
      • 9.1.1 模块和全局样式
      • 9.1.2 一个简单的 CSS 模块
      • 9.1.3 模块的变体
      • 9.1.4 多元素模块
    • 9.2 将模块组合为更大的结构
      • 9.2.1 模块中多个职责的拆分
      • 9.2.2 模块的命名
    • 9.3 CSS 的作用域
      • 9.3.1 CSS 作用域的就近原则
      • 9.3.2 划定作用域的边界
      • 9.3.3 CSS 中的隐式作用域
      • 9.3.4 关于 CSS 作用域与层叠图层
    • 9.4 CSS 模式库
    • 9.5 本章小结
  • 第十章 CSS 容器查询
    • 10.1 容器查询的一个简单示例
      • 10.1.1 容器尺寸查询的用法
    • 10.2 深入理解容器
      • 10.2.1 容器的类型
      • 10.2.2 容器的名称
      • 10.2.3 容器与模块化 CSS
    • 10.3 与容器相关的单位
    • 10.4 容器样式查询的用法
      • 10.4.1 将模块与所在容器解耦
      • 10.4.2 减少重复代码
    • 10.5 本章小结
  • 附录
    • 附录A:CSS 选择器参考
    • 附录B:CSS 预处理器简介

  1. 色相环(Hue Circle)是一个用于表示颜色关系的圆形图表,通常用于视觉艺术、设计和色彩理论中。色相环展示了颜色之间的相对位置和过渡,帮助理解色彩的组合和对比。 ↩︎

相关文章:

【CSS in Depth 2 精译_068】11.2 颜色的定义(下):CSS 中的各种颜色表示法简介

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第四部分 视觉增强技术 ✔️【第 11 章 颜色与对比】 ✔️ 11.1 通过对比进行交流 11.1.1 模式的建立11.1.2 还原设计稿 11.2 颜色的定义 11.2.1 色域与色彩空间11.2.2 CSS 颜色表示法 ✔️ 11.2.2.…...

游戏引擎学习第38天

仓库: https://gitee.com/mrxiao_com/2d_game 回顾上次的内容。 我们之前讨论了将精灵放在屏幕上&#xff0c;但颜色错误的问题。问题最终查明是因为使用了一个调整工具&#xff0c;导致文件的字节顺序发生了变化。重新运行“image magic”工具对一些大图像进行重新处理后&am…...

P1223 排队接水(贪心)

题目描述 有 &#x1d45b;个人在一个水龙头前排队接水&#xff0c;假如每个人接水的时间为 &#x1d447;&#x1d456;&#xff0c;请编程找出这 &#x1d45b; 个人排队的一种顺序&#xff0c;使得 &#x1d45b;个人的平均等待时间最小。 输入格式 第一行为一个整数 &am…...

关于springBoot+vue项目中配置SSL证书问题

前端可以通过https进行访问 1.前端在访问后端接口时&#xff0c;使用https进行访问&#xff0c;在request.js配置文件中&#xff0c;这个文件是配置axios的基本请求的&#xff0c;在基础请求地址中改为https方式 2.需要在Linux中的nginx中配置ssl证书&#xff0c;具体请参考&…...

GUI的最终选择:Tkinter

Tkinter是Python默认的GUI库&#xff0c;因此使用时直接导入即可&#xff1a;import tkinter 17.1 Tkinter之初体验 代码分析&#xff1a; tkinter.mainloop()通常是程序的最后一行代码&#xff0c;执行后程序进入主事件循环。 17.2 进阶版本 将代码封装成类&#xff1a; 运…...

Photohop关于数位板没有压力感,PS画笔的钢笔压力总是显示感叹号的问题解放方法

&#xff08;实际我只用到红色字2步解决了问题&#xff0c;但为了兼顾更多朋友&#xff0c;还是把其他步骤详细完善&#xff09; 一&#xff0c;先确定数位板正常链接电脑&#xff0c;并安装好驱动&#xff0c;并在驱动测试到压力 二&#xff0c;解决PS前感叹号问题 &#xf…...

rust websocket Echo server高性能服务器开发

最近在学习websocket时,一直没有发现好的websocket server工具来调试,于是就自己做了一个websocket server用来学习和调试。因为rust性能遥遥领先,所以就采用了rust来搭建服务器。废话不多说直接上代码main.rs: use tokio::net::TcpListener; use tokio_tungstenite::tung…...

19、网络编程:

19、网络编程&#xff1a; 网络的相关概念&#xff1a; 网络通讯&#xff1a; 概念&#xff1a;两台设备之间通过网络实现数据传输&#xff1b;网络通讯&#xff1a;将数据通过网络从一台设备传输到另一台设备&#xff1b;java.net包下提供了一系列的类或接口&#xff0c;供…...

[代码随想录11]栈和队列的应用,逆波兰表达式求值 、滑动窗口最大值、前 K 个高频元素

前言 这几个题目都是栈和队列的高频面试题目&#xff0c;主要是考察思路和coding能力&#xff0c;在前面几道题目的基础上进行延伸的。同时还有优先级队列和双端队列的用法 题目链接 150. 逆波兰表达式求值 - 力扣&#xff08;LeetCode&#xff09; 239. 滑动窗口最大值 - 力…...

认证插件介绍

本文档是针对 UOS 登录器插件给出开发指南&#xff0c;目的是为了让开发人员了解如何在 UOS 登录器上增加一种自定义认证方式&#xff0c;对插件接口做了详细说明以及实战练习。 文章目录 一、认证插件可以做什么&#xff1f;二、认证流程三、术语说明四、安全性五、可靠性六、…...

ASP.NET Core8.0学习笔记(二十四)——EF Core级联插入与删除

一、EF Core导航关系操作——级联插入 1.级联插入&#xff1a;在含有导航属性的实体&#xff08;主体实体&#xff09;中可以对实体进行级联插入。即在创建主体实体时直接把依赖实体进行赋值&#xff0c;此时只需要执行一次插入操作即可将主体实体与依赖实体同时入库。同时&am…...

Docker打包SpringBoot项目

一、项目打成jar包 在进行docker打包之前&#xff0c;先确定一下&#xff0c;项目能够正常的打成JAR包&#xff0c;并且启动之后能够正常的访问。这一步看似是可有可无&#xff0c;但是能避免后期的一些无厘头问题。 二、Dockerfile 项目打包成功之后&#xff0c;需要编写Doc…...

【Linux】WSL:Win运行Linux

WSL2&#xff08;Windows Subsystem for Linux 2&#xff09; 是 Microsoft 开发的技术&#xff0c;可在 Windows 系统上运行完整的 Linux 发行版环境。以下是详细的配置教程。 安装与配置 启用 WSL 功能 打开“开始”菜单&#xff0c;搜索 PowerShell&#xff0c;以 管理员身…...

js循环导出多个word表格文档

文章目录 js循环导出多个word表格文档一、文档模板编辑二、安装依赖三、创建导出工具类exportWord.js四、调用五、效果图js循环导出多个word表格文档 结果案例: 一、文档模板编辑 二、安装依赖 // 实现word下载的主要依赖 npm install docxtemplater pizzip --save// 文件操…...

Spring Boot 日志 配置 SLF4J 和 Logback

前言 在开发 Java 应用时&#xff0c;日志记录是不可或缺的一部分。日志可以记录应用的运行状态、错误信息和调试信息&#xff0c;帮助开发者快速定位和解决问题。Spring Boot 项目默认集成了 SLF4J 和 Logback&#xff0c;使得日志配置变得简单而灵活。本文将详细介绍如何在 …...

企业级包管理器:专栏概述 (1)

在当今的前端开发领域&#xff0c;包管理器已经成为了每一位开发者不可或缺的工具。它们就像一个个神奇的工具箱&#xff0c;里面装满了各种各样的工具&#xff08;即软件包&#xff09;&#xff0c;帮助我们快速搭建项目、实现功能&#xff0c;极大地提高了开发效率。接下来&a…...

【动手学电机驱动】STM32-MBD(1)安装 STM32 硬件支持包

STM32-MBD&#xff08;1&#xff09;安装 STM32 硬件支持包 【动手学电机驱动】STM32-MBD&#xff08;1&#xff09;安装 STM32 硬件支持包 1. 必须的软硬件条件2. 嵌入式硬件支持包2.1 Embedded Coder2.2 嵌入式硬件支持包2.3 Embedded Coder Support Package for STMicroelec…...

书后习题答案:《Python程序设计基础(第2版)》,电子工业出版社,2020.01

【持续更新】 第3章 from math import *x1 float(input("请输入x1: ")) # print(x1) x2 float(input("请输入x2: ")) y1 float(input("请输入y1: ")) y2 float(input("请输入y2: "))dis sqrt(pow(x1 - x2, 2) pow(y1 - y2, 2))…...

Qt之第三方库‌QXlsx使用(三)

Qt开发 系列文章 - QXlsx&#xff08;三&#xff09; 目录 前言 一、Qt开源库 二、QXlsx 1.QXlsx介绍 2.QXlsx下载 3.QXlsx移植 4.修改项目文件.pro 三、使用技巧 1.添加头文件 2.写入数据 3.读出数据 总结 前言 Qt第三方控件库是指非Qt官方提供的、用于扩展Qt应用…...

Python通过global实现多文件共享全局参数,方法

Python通过global实现多文件共享全局参数 global关键字,全局变量 基础用法 这种用法&#xff0c;不能在其他的py文件中使用&#xff0c; x 6 def func():global x #定义外部的xx 10 func() print (x) #输出10共享参数 新建glo.py文件&#xff08;全局变量文件&#xff09;…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

书籍“之“字形打印矩阵(8)0609

题目 给定一个矩阵matrix&#xff0c;按照"之"字形的方式打印这个矩阵&#xff0c;例如&#xff1a; 1 2 3 4 5 6 7 8 9 10 11 12 ”之“字形打印的结果为&#xff1a;1&#xff0c;…...

Java后端检查空条件查询

通过抛出运行异常&#xff1a;throw new RuntimeException("请输入查询条件&#xff01;");BranchWarehouseServiceImpl.java // 查询试剂交易&#xff08;入库/出库&#xff09;记录Overridepublic List<BranchWarehouseTransactions> queryForReagent(Branch…...