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

【CSS in Depth 2 精译_080】 13.1:CSS 渐变效果(中)——不同色彩空间的颜色插值算法在 CSS 渐变中的应用

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

  • 第四部分 视觉增强技术 ✔️
  • 【第 13 章 渐变、阴影与混合模式】 ✔️
    • 13.1 渐变 ✔️
      • 13.1.1 使用多个颜色节点(上)
      • 13.1.2 颜色插值方法(中) ✔️
      • 13.1.3 径向渐变(下)
      • 13.1.4 锥形渐变(下)

文章目录

    • 13.1.2 颜色插值方法 Color interpolation
      • 13.1.2.1 极坐标色彩空间下的高级设置 More options in polar color spaces
      • 13.1.2.2 浏览器 Bug 与颜色问题 Browser bugs and color quirks

《CSS in Depth》新版封面

《CSS in Depth》新版封面

译者按
本篇又是第二版全新增补的崭新内容,充分体现了新版 CSS 颜色语法在渐变设置中的灵活应用。时隔不到半年,书中提到的浏览器兼容问题已经成为了历史,足见这些新特性的受欢迎程度。本书虽未涉及色彩空间的底层插值算法理论(实际也用不上),但作者聚焦实战的讲解思路和业内最佳实践的倾囊相授,已经足以应对今后绝大多数的 CSS 渐变应用场景,并助您在团队中脱颖而出。

13.1.2 颜色插值方法 Color interpolation

在第 11 章中,我们学习了 CSS 颜色的各种表示方法以及色彩空间方面的知识。就在前不久,浏览器对渐变效果的计算都还仅限于 sRGB 色彩空间;如今,使用其他色彩空间来设置渐变已经成为了人们新的选择。在色彩渐变过程中,浏览器对于中间色的计算结果很可能会因为所选色彩空间的不同而存在显著差异。因为在不同的色彩空间中,色彩的几何排布情况各不相同,从而导致一个色彩空间中两个颜色点之间的颜色与另一个色彩空间截然不同。

图 13.6 给出了两个示例渐变效果。它们都是从左侧的黄色过渡到右侧的蓝色,但由于分属不同的色彩空间,用到的插值算法也不同,从而导致了风格迥异的中间渐变色效果。

图 13.6 色彩空间截然不同的两种渐变效果可能存在显著差异

【图 13.6 色彩空间截然不同的两种渐变效果可能存在显著差异】

在本例中,sRGB 色彩空间下的渐变设置会在其中心区域穿过某个灰色区间,这在 RGB 相关的颜色理论支撑下是解释得通的。黄色 yellowRGB 颜色值为 rgb(255 255 0),而蓝色 blue 的值为 rgb(0 0 255)。如果每个参数维度都按线性插值计算,则会在渐变的中心位置得到一个红、绿、蓝分量皆为 127.5 的过渡色,即本例中的灰色,有时也被称为 “灰色死区(gray dead zone 1)”。在 sRGB 色彩空间下,位于色轮(color wheel 2)对侧或大致对侧的任意两种颜色在设置渐变效果时都会看到类似的结果,其渐变色必将穿过色轮中间的灰色地带。

另一方面,黄色和蓝色在 OKLCH 色彩空间下可以分别表示为 oklch(97% 0.21 110deg)oklch(45% 0.31 264deg)。此时的渐变计算主要是将色调的角度由 110 度变为 264 度,渐变色依次穿过绿色(green)、青色(teal)及蓝绿色(cyan)。与 sRGB 时直接穿过色轮的中心区域不同,OKLCH 色彩空间下的颜色渐变会绕道而行,留下沿途经过的各种中间色。

警告

在 CSS 渐变中指定色彩空间仍是一个相对较新的功能特性。截至 2024 年年中,Firefox 尚未提供相应支持。因此在启用该特性时,还应该准备一个回退版的渐变设置,以适应不支持该特性的应用场景。

译注

截至 2024 年 12 月 16 日,根据 Can I Use 网站最新的统计数据,Firefox 等主流浏览器厂家已经全面支持渐变的色彩空间插值算法,目前的综合普及率已达 91.53%(线性、径向、锥形及其重复渐变版本的统计结果均保持一致):

补图1:各主流浏览器厂家已全面支持 CSS 渐变的色彩空间插值算法(截至 2024 年 12 月 16 日)

【补图1:各主流浏览器厂家已全面支持 CSS 渐变的色彩空间插值算法(截至 2024 年 12 月 16 日)】

在渐变中手动指定颜色空间的具体写法如代码清单 13.7 所示。这里为 Firefox 及其他老版本浏览器预备了一个回退方案。注意观察,我们在 linear-gradient() 函数的第一个参数中添加了一个关键词 in oklch。根据下列代码同步更新样式表:

代码清单 13.7 指定色彩空间为 OKLCH 的 CSS 渐变写法示例

.fade {height: 200px;width: 400px;background-image: linear-gradient(90deg, yellow, blue); /* 老版本浏览器的回退方案 */background-image: linear-gradient(90deg in oklch, yellow, blue); /* 指明色彩空间为 OKLCH 时的渐变写法 */
}

在确保您当前的浏览器支持 OKLCH 色彩空间的情况下,可以利用浏览器的开发者工具 DevTools,通过禁用或启用第二个 background-image 规则集来查看二者的显著区别。

在指定某个具体色彩空间时,必须使用关键字 in,然后再跟上所需的色彩空间名称。也可以指定其他 CSS 支持的色彩空间名称,如极坐标色彩空间中的 hslhwblchoklch,以及矩形色彩空间下的 srgbsrgb-linearlaboklabxyzxyz-d50 或者 xzy-d65(注意,不是每个色彩空间都有对应的 CSS 颜色语法函数)。如果不指定色彩空间,默认按 sRGB 进行插值运算。

由于每种色彩空间渲染出的渐变效果各不相同,因此当需要设置特定的渐变效果时,多尝试几种色彩空间不失为寻求最优方案的一个有效途径。通常情况下,如果渐变涉及的两种色调存在明显差异,此时指定某个极坐标色彩空间(如 oklchhsl)效果可能会更好一些;若要从更鲜艳的色彩过渡到中性色调(如灰色、黑色、白色或透明色等),则最好选用矩形色彩空间(如 srgb)。

注意

CSS 渐变中涉及的颜色插值算法与第 11 章中讲过的 color-mix() 函数中的用法相同。例如,声明 color-mix(in srgb, white 20% blue) 的渲染效果,从数学的角度看,与 srgb 色域下由白到蓝渐变、且距白色节点 20% 处的渐变色相比,效果是一样的。

另外,谷歌的 Chrome 团队还针对当前所有可用的色彩空间在 Code Pen 网站上制作了几个渐变效果的演示案例,具体的渲染效果详见:https://codepen.io/keithjgrant/full/GRzjGqL。您不妨快速浏览一遍,了解各个色彩空间在渐变设置中的差异。值得注意的是,在这些演示案例中个别示例还暴露了一些浏览器的 Bug,这个问题稍后再做处理。

13.1.2.1 极坐标色彩空间下的高级设置 More options in polar color spaces

在极坐标色彩空间下,色调是一个可以循环取值的参数(circular value)。因此,在设置两个不同色调的渐变效果时,渐变运算可以分别沿着色轮的两个不同方向进行。例如,由红色渐变为黄色,通常会出现橙色的渐变色。此时采用的是较短的渐变路径,也是 CSS 渐变默认的方向。

然而上述渐变也可以沿色轮中较长的路径进行,使其依次经过品红(magenta)、紫色(purple)、蓝色(blue)、蓝绿色(teal)以及绿色(green)。若两种颜色在色轮上的距离较近,那么沿较长路径定义的渐变效果将渲染出一道绚丽彩虹色。您甚至可以将两个颜色节点指定为同一颜色,从而得到长路径下的完整彩虹效果,如图 13.7 所示的色轮路径示意图。

图 13.7 极坐标色彩空间下的渐变设置可以沿着色轮的两条长短不一的路径分别进行

【图 13.7 极坐标色彩空间下的渐变设置可以沿着色轮的两条长短不一的路径分别进行】

渐变路径的变更可以通过在渐变函数中添加关键字 long hue 实现。根据代码清单 13.8 同步更新本地样式表,并查看最终的渐变效果。

代码清单 13.8 long hue 在渐变函数中的示例应用

.fade {height: 200px;width: 400px;background-image: linear-gradient(90deg, yellow, blue);background-image: linear-gradient(90deg in oklch longer hue, /* 令渐变沿较长的色调路径进行 */yellow,blue);
}

在渐变函数中,第一个参数很可能因为声明了这些配置项而书写得较长,例如上述代码。此时应该像示例代码那样,将样式声明分为多行进行书写。

CSS 提供了四个不同的关键字来设置渐变的色调方向,它们仅在极坐标色彩空间(polar color space)下有效:

  • shorter hue —— 在两种色调间选择较短路径(默认值);
  • longer hue —— 在两种色调间选择较长路径;
  • increasing hue —— 路径方向与色调角递增(即顺时针)的方向一致;
  • decreasing hue —— 路径方向与色调角递减(即逆时针)的方向一致。

不妨尝试在渐变设置中使用上述关键词,并查看其相应的渲染效果。在本例中,increasing hue 等效于 shorter huedecreasing hue 等效于 longer hue。究其原因,示例中的黄色和蓝色在色轮上的角度分别为 110 度和 164 度(这些数值是通过浏览器的开发者工具、将黄色 yellow 和蓝色 blue 分别转换为对应的 OKLCH 颜色值后得到的)。但如果使用了不同的颜色节点(color stops),情况则可能大不相同。

13.1.2.2 浏览器 Bug 与颜色问题 Browser bugs and color quirks

CSS 许多新推出的颜色特性对于浏览器而言都相对较新,并且其中也存在一些错误(bugs),尤其是在渐变中使用 OKLCHHSL 色彩空间时:对于某些色调(特别是蓝色),如果其中一个颜色节点为白色、黑色、或透明,可能会出现意外状况。

例如,在 OKLCHHSL 色彩空间下、由蓝色渐变到某种非饱和色(如白色或黑色)的过程中,都会产生绿色或紫色的渐变色,具体效果视非饱和色的颜色深度以及被测浏览器而定;再比如,在从红色渐变到某非饱和色的过程中,中间位置会生成橙色(orange)或酒红色(burgundy)的渐变色。希望这些问题都能在被波及浏览器的后续版本更新中得以修复。在将白色、黑色、灰色或透明色设为渐变效果的颜色节点时,目前避开上述问题的最佳方案,是使用 sRGB 或者其他矩形色彩空间。

如果实在要使用 OKLCHHSL 色彩空间,上述问题也可以通过这样的方式来解决:采用同样的色彩空间来指定渐变需要的颜色;然后在保持相同色调的情况下,适度微调色度(或饱和度)参数,以此作为渐变中的其他颜色节点(color stop)。比如说,在 OKLCH 色彩空间下定义一个由蓝色 blueoklch(100% 0.001 264deg) 的渐变效果,而非直接从蓝色 blue 渐变到白色 white。该方案的更多详细介绍,可以参考我写的这篇文章:https://mng.bz/2Kp0。



关于《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 本章小结
  • 第 11 章 颜色与对比
    • 11.1 通过对比进行交流
      • 11.1.1 模式的建立
      • 11.1.2 还原设计稿
    • 11.2 颜色的定义
      • 11.2.1 色域与色彩空间
      • 11.2.2 CSS 颜色表示法(RGB、Hex、HSL、HWB、LAB/OKLAB、LCH/OKLCH)
    • 11.3 利用 OKLCH 处理颜色(上篇)
      • 11.3.4 从页面其他颜色衍生出新颜色(下篇)
    • 11.4 思考字体颜色的对比效果
    • 11.5 本章小结
  • 第 12 章 CSS 排版与间距
    • 12.1 间距设置
      • 12.1.1 使用 em 还是 px
      • 12.1.2 对行高的深入思考
      • 12.1.3 行内元素的间距设置
    • 12.2 Web 字体
    • 12.3 谷歌字体
    • 12.4 @font-face 的工作原理
      • 12.4.1 字体格式与回退处理
      • 12.4.2 同一字型的多种变体形式
    • 12.5 性能因素考量
      • 12.5.1 font-display 属性解析
      • 12.5.2 可变字体的用法
    • 12.6 调整字间距,提升可读性
      • 12.6.1 正文的字间距
      • 12.6.2 标题、小元素和间距
    • 12.7 本章小结
  • 附录
    • 附录A:CSS 选择器参考
    • 附录B:CSS 预处理器简介

  1. 译注:关于 gray dead zone,CSS-TRICKS 网站也有一篇不错的文章探讨过这个问题,感兴趣的朋友不妨了解一下:https://css-tricks.com/the-gray-dead-zone-of-gradients/。 ↩︎

  2. color wheel,即色轮、色彩轮,是一个用于表示颜色关系的圆形图形。它将颜色排列成一个闭合的环形,通常包括原色、间色和复合色。色轮是艺术、设计和色彩理论的重要工具。 ↩︎

相关文章:

【CSS in Depth 2 精译_080】 13.1:CSS 渐变效果(中)——不同色彩空间的颜色插值算法在 CSS 渐变中的应用

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第四部分 视觉增强技术 ✔️【第 13 章 渐变、阴影与混合模式】 ✔️ 13.1 渐变 ✔️ 13.1.1 使用多个颜色节点(上)13.1.2 颜色插值方法(中) ✔️13.1…...

红日靶场1(搭建打靶)

搭建 靶场下载: http://vulnstack.qiyuanxuetang.net/vuln/detail/2/ (13G,需要百度网盘会员) 下载好靶场文件后直接解压 直接用虚拟机打开靶场 更改网络ip 需要模拟内网和外网两个网段, Win7 虚拟机相当于网关服务器,所以需要…...

LivePortrait 部署笔记

LivePortrait 开源地址: https://github.com/KwaiVGI/LivePortrait 模型下载: export HF_ENDPOINThttps://hf-mirror.com huggingface-cli download --resume-download KwaiVGI/LivePortrait --local-dir models--KwaiVGI--LivePortrait...

Greenhills Lib操作-查看Lib信息与将lib中的data段link到指定区域

文章目录 前言Greenhillls中gsize的用法修改ld文件将lib中的data段指定区域示例定义与链接总结 前言 项目开发过程中,遇到客户开发ASW,提供Lib进行集成,但ASW中的标定量没有定义对应的data段,导致无法将标定量指定到特定的内存。…...

【十进制整数转换为其他进制数——短除形式的贪心算法】

之前写过一篇用贪心算法计算十进制转换二进制的方法,详见:用贪心算法计算十进制数转二进制数(整数部分)_短除法求二进制-CSDN博客 经过一段时间的研究,本人又发现两个规律: 1、不仅仅十进制整数转二进制可…...

【JavaEE】网络(2)

一、网络编程套接字 1.1 基础概念 【网络编程】指网络上的主机,通过不同的进程,以编程的方式实现网络通信;当然,我们只要满足进程不同就行,所以即便是同一个主机,只要是不同进程,基于网络来传…...

AI for Science 的完美实践——科研文献的智慧化提取获得“综述性文摘”的软件开发

实践是检验真理的唯一标准!show your codes! 1 综述性文摘的需求 再简单不过了。 甲方(综述性文摘)需求:针对项目特征或描述,从几百篇相关的科研论文(PDF)中智能提取相关内容,包括…...

前端使用xlsx.js实现 Excel 文件的导入与导出功能

前端使用xlsx.js实现 Excel 文件的导入与导出功能 在现代的 Web 开发中,处理文件上传和导出功能已经变得越来越常见,尤其是 Excel 文件的导入与导出。 我们将使用 Vue.js 和 XLSX.js 库来处理 Excel 文件的读取和生成。XLSX.js 是一个强大的 JavaScrip…...

React简单了解

原理简化了解 import React from "react" import { createRoot } form "react-dom/client"const element React.createElement(p,{id: hello},Hello World! )const container document.querySelector(#root) const root createRoot(container) root.r…...

backbone 和Run-Length Encoding (RLE)含义

在深度学习中,特别是在图像分割任务中,backbone(主干网络)是指用于特征提取的预训练神经网络模型。Backbone 的主要作用是从输入图像中提取有用的特征,这些特征随后会被用于更高层次的任务,如分类、检测或分…...

在Centos7上安装MySQL数据库 How to install MySQL on Centos 7

执行以下命令,下载并安装MySQL。 wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm && yum -y install mysql57-community-release-el7-10.noarch.rpm && yum install -y mysql-community-server --nogpgcheck执行以下…...

Linux docker-20.10.9安装

Linux Docker20.10.9安装 解压文件 tar -xvf docker-20.10.9.tgz 给docker执行文件赋予可执行权限 chmod 755 -R docker/复制docker到/usr/bin/目录下,使docker命令可以执行 cp docker/* /usr/bin/将Docker注册为service,创建docker.service文件 vim /etc/syst…...

操作系统(13)虚拟存储器

前言 操作系统中的虚拟存储器是一项关键技术,它为用户提供了一个远大于实际物理内存容量的逻辑内存空间。 一、定义与原理 虚拟存储器是具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的存储器系统。其逻辑容量由内存容量与外存容量之和决定&…...

《面向对象综合训练01~05》

《面向对象综合训练01~05》 训练01:文字版格斗游戏 第一步:创建游戏角色的javabean类 public class Role {private String name;private int blood;private char gender;private String face;//长相是随机的//创建男女长相的随机数组String[] boyfaces…...

电脑为什么会提示“msvcr120.dll缺失”?“找不到msvcr120.dll文件”要怎么解决?

电脑故障排查指南:揭秘“msvcr120.dll缺失”的真相与解决方案 在软件开发与日常维护的广阔天地里,遇到系统报错或文件缺失的情况可谓家常便饭。今天,我将带领大家深入探讨一个常见的系统提示——“msvcr120.dll缺失”,并揭秘其背…...

huggingface NLP-微调一个预训练模型

微调一个预训练模型 1 预处理数据 1.1 处理数据 1.1.1 fine-tune 使用tokenizer后的token 进行训练 batch tokenizer(sequences, paddingTrue, truncationTrue, return_tensors"pt")# This is new batch["labels"] torch.tensor([1, 1])optimizer A…...

【BUG记录】Apifox 参数传入 + 号变成空格的 BUG

文章目录 1. 问题描述2. 原因2.1 编码2.2 解码 3. 解决方法 1. 问题描述 之前写了一个接口,用 Apifox 请求,参数传入一个 86 的电话,结果到服务器 就变成空格了。 Java 接收请求的接口: 2. 原因 2.1 编码 进行 URL 请求的…...

Spring AI API 介绍

目录: Spring AI 框架介绍 Spring AI API 核心API简介 Spring AI 提供了很多便利的功能,主要如下: AI Model API “Model API” 提供了聊天、文本转图像、音频转录、文本转语音、嵌入等功能,且不局限于某个固定的大模型提供商…...

【MySQL】Linux使用C语言连接安装

📢博客主页:https://blog.csdn.net/2301_779549673 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文由 JohnKi 原创,首发于 CSDN🙉 📢未来很长&#…...

2024年第十五届蓝桥杯青少组C++国赛—割点

割点 题目描述 一张棋盘由n行 m 列的网格矩阵组成,每个网格中最多放一颗棋子。当前棋盘上已有若干棋子。所有水平方向或竖直方向上相邻的棋子属于同一连通块。 现给定棋盘上所有棋子的位置,如果要使棋盘上出现两个及以上的棋子连通块,请问…...

微信小程序之bind和catch

这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异&#xff…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...