【CSS in Depth 2 精译_073】第 12 章 CSS 排版与间距概述 + 12.1 间距设置(中):对 CSS 行高的深入思考
当前内容所在位置(可进入专栏查看其他译好的章节内容)
- 第四部分 视觉增强技术 ✔️
- 【第 12 章 CSS 排版与间距】 ✔️
- 12.1 间距设置
- 12.1.1 使用 em 还是 px
- 12.1.2 对行高的深入思考 ✔️
- 12.1.3 行内元素的间距设置
文章目录
- 12.1.2 对行高的深入思考 Factoring in line height
《CSS in Depth》新版封面
译者按
前面章节在提到行高的设置时,作者往往会说“详见第 12 章”;本篇就是对 CSS 行高的一次深入探讨。说是深入,其实也仅仅介绍了文字排版中的冰山一角,但对于还原设计稿中的精确尺寸已经足够了。CSS 很多规则看似简单,但认真深究的话很可能惊掉在座各位的下巴,比如文中提到的那个全新的leading-trim
属性,看看那篇参考文章就知道了。
12.1.2 对行高的深入思考 Factoring in line height
设计稿中的文字周围还设置了一些间距,具体大小如图 12.3 所示(这里可能有点看不清楚,图中的内容栏是一块白色区域,其所在容器的背景则是很浅的浅灰色。文字区域的顶部和左侧到分栏边缘的距离均为 25px
)。
【图 12.3 正文板块内部和文字周围需要设置的间距】
文字周围环绕的 25px
间隔,可以考虑为板块添加内边距来实现。为了让该间隔对更大的字体作出响应,以实现同步呼吸的效果来确保良好的可读性,这里的间距选择使用相对单位 em
。经计算,25px / 16px = 1.5625em
。
而标题与正文段落间的 30px
就没那么简单了。如果在二者之间指定 30px
的外边距,那么它们的实际间距会接近 36px
。要理解为什么会这样,需要先来看看元素的高度究竟是如何定义的。
在盒模型中,元素的内容盒(content box)被该元素的内边距环绕,再往外则是元素边框,最后是其外边距。但对于这些元素而言,内容盒可不仅仅只有渲染出的文字部分;真正决定内容盒最终高度的,是元素的行高。这个高度覆盖了文字的顶部与底边,如图 12.4 所示。可以看到,当前文字的高度为 1em
,而行高略微超出了文字的上下边缘。
【图 12.4 行高定义了内容盒的高度】
示例页上的行高为 1.4
,这是从 <body>
元素指定并继承过来的。这样一来,对于只有一行的文本元素,其内容盒的行高就是 1.4em
,而文字则基于该行高垂直居中对齐;又因为当前字号为 16px
,因此内容盒的最终高度即为 22.4px
,多出的 6.4px
则平均分配到文字的上方和下方。
因此,如果为标题设置 30px
的底部外边距,则外边距的顶部与标题文字间实际将多出 3.2px
的间距,并且下方段落的内容盒也会多出来 3.2px
(超出的间距是相等的,因为标题和段落具有相同的行高和字号)。这就导致了标题文本和正文段落间的实际间隔为 36.4px
。
注意
印刷领域的设计师习惯使用 行距(leading) 来表示每行文字之间的间距。而在 CSS 中,文字间距是由行高(line height)控制的,不能直接等同为行距。
设计师通常不会在意一两个像素的差异,但多出 6½ 个像素就有点过分了。如果行高比现在还要高,或者元素设置了更大的字号,这样的尺寸偏差还会更加显著。
想要从根本上消除这样的差异,就需要算出多出的检举并在外边距中予以扣除。外边距不能指定为 30px
了,需要扣除 6px
,变为 24px
;再除以 16px
,从而得到相对单位下的 1.5em
。根据下列代码清单 12.3 所示内容同步更新本地样式表:
代码清单 12.3 设置内容板块和段落之间的间距
@layer global {p {margin-block: 1.5em; /* 为段落添加外边距 */}
}/* ... */@layer modules {
.tile {background-color: var(--white);border-radius: 0.3em;padding: 1.5625em; /* 在内容板块的内部指定内边距 */
}
.tile > h4 { /* 在内容板块的标题下方设置外边距 */margin-block: 0 1.5em;
}
上述代码中,外边距 1.5em
已在全局生效,因此页面中的所有段落都将具有相同的间距。然后在内容板块的标题下方(即 .tile > h4
元素下方)重复该操作,这样即便后面没有段落内容,标题下方的间距都将保持不变。由于存在外边距折叠效应,这两个外边距会相互重叠,从而在标题和段落间产生一个标准的 30px
间距。
说明
CSS 即将推出一个全新的属性
leading-trim
,用于消除内容盒上下边缘的多余间距,不过该属性目前尚未获得任何浏览器的官方支持。想了解更多leading-trim
的相关介绍,可以参考 Ethan Wang 刊登在 Medium 网站的这篇文章《Leading-Trim: The Future of Digital Typesetting》(https://mng.bz/67PR)。译注:
截至 2024 年 12 月 10 日 Can I Use 网站最新的统计资料,各浏览器对
leading-trim
属性的支持率仅为 0.09%,目前仅 Safari 浏览器提供了相关支持;不过后续进展非常值得关注。
【补图1:Can I Use 网站公布的各大浏览器对 leading-trim 属性的支持情况(截至 2024 年 12 月 10 日)】
视觉稿还需转换的最后一处间距,位于巨幅主图中的标语附近,如图 12.5 所示:
【图 12.5 设计稿要求在标语上方预留 95px 的间距,而在其下方预留 16px 的间距(即标语和按钮之间)】
标语处的行高同样会影响到这些间距的设置,因为它的字号更大。标语处的字号为 1.95rem
,乘以基准字号 16px
,即 31.2px
;再乘以 1.4 倍的行高,算得的最终行高大小为 43.68px
,因此会在文字上下分别多出约 6px
的间距。
既然行高已经在文字上方占据了 6px
,因此只需再增加 89px
的间隔就能满足上方间距的要求;同理,标语下方也只需再增加 10px
的间距,就能满足视觉稿中标语下方的间距要求。由于其间涉及大量的算术运算,最简单的解决办法通常是和设计师一起坐下来,在浏览器中实时修改这些间距值,直到获得设计师的首肯。
译注
为方便对照,这里直接给出示例页主图部分的 HTML 片段:
<div class="hero"><div class="hero__inner"><h2>Team collaboration done right</h2><a href="/sign-up" class="button button--cta">Get started</a></div> </div>
明确要在标语上下位置添加的具体间距尺寸后,就可以将其更新到样式表中了。具体样式详见代码清单 12.4。根据给出的内容同步更新本地样式表,变更位置已添加注释说明。此外还在 hero__inner
容器上设置了最小高度(译注:即 min-block-size
),以确保能像设计稿那样撑开一大块屏幕空间。
代码清单 12.4 在主图中设置标语和按钮的位置
.hero {background: url(collaboration.jpg) no-repeat;background-size: cover;margin-bottom: 40px;
}
.hero__inner {max-inline-size: 1080px;margin-inline: auto;min-block-size: 40svh;padding-block: 89px; /* 用新计算的间距值替换此前的估值 */padding-inline-end: 12.5em;text-align: right;
}
.hero h2 {margin-block: 0 10px; /* 定义标语和按钮间的间距大小 */font-size: 1.95rem;
}
hero__inner
的顶部内边距定义了标语上方所需的间距。尽管设计稿中并没有标注其右侧的内边距尺寸,但上述代码中也进行了相应设置(译注:即 12.5em
)。最后将标语元素的顶部外边距设为 0
,这样就不用担心在 hero__inner
的内边距上再多出额外的间距了。
译注
在复盘本篇要点时,偶然发现作者提到的那篇介绍leading-trim
属性的文章没有完整的翻译版,要么是节选的,要么是收费的(有点过分了)。拟计划完成本章所有内容后,再来翻译这篇文章并放到本专栏。敬请关注!
关于《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 本章小结
- 附录
- 附录A:CSS 选择器参考
- 附录B:CSS 预处理器简介
相关文章:
【CSS in Depth 2 精译_073】第 12 章 CSS 排版与间距概述 + 12.1 间距设置(中):对 CSS 行高的深入思考
当前内容所在位置(可进入专栏查看其他译好的章节内容) 第四部分 视觉增强技术 ✔️【第 12 章 CSS 排版与间距】 ✔️ 12.1 间距设置 12.1.1 使用 em 还是 px12.1.2 对行高的深入思考 ✔️12.1.3 行内元素的间距设置 文章目录 12.1.2 对行高的深入思考…...
JAVA设计模式-观察者模式
概述: 观察者模式通常由两个对象组成:观察者和被观察者。当被观察者状态发生改变时,它会通知所有的观察者对象,使他们能够及时做出响应,所以也被称作“发布-订阅模式”。 特点: 优点: 解耦且可…...
Java调用SSE流式接口,并流式返回给前端实现打字输出效果
目录 1.SSE概述 1.1 什么是是SSE2.2 与长链接(Long Polling)的区别 长链接(Long Polling)Server-Sent Events (SSE) 比较总结 2.通过okhttp调用SSE流式接口并流式返回给前端 环境要求使用okhttp相关依赖示例 3. 如果Spring Framework 低于5.0,可使用Servlet 3.0进行…...
倚光科技助力自由曲面设计与加工
近年来,自由曲面因其在光学、汽车、航空航天等领域的广泛应用,受到设计师和工程师的高度关注。自由曲面作为一种具有更高自由度的非球面透镜,能够在光学系统中实现更加精确的光线控制,优化像差校正,并且在满足功能需求…...
【推荐算法】推荐系统中的单目标精排模型
前言:推荐系统中模型发展较快,初学者【也就是笔者】很难对模型进行一个系统的学习。因此,这篇文章总结了王树森中的视频以及《深度学习推荐系统》中的单目标精排模型,绘制了一个单目标精排模型的思维导图来帮助初学者【笔者】更好…...
Android UI:ViewTree:源码分析:事件处理:显示事件
文章目录 概述测量:measure和onMeasure View.MeasureSpecViewViewGroupLinearLayoutRelativeLayout布局:layout和onLayout ViewViewGroupLinearLayoutRelativeLayout绘制:dispatchDraw、draw和onDraw ViewViewGroupLinearLayoutRelativeLayout总结概述 显示事…...
esp32 OTA学习笔记
csv分区表中ota-0和ota-1存放程序 不超过1600kb的程序可以ota(可手动划分) 分区表中有 ota0和ota1两个数据分区。 ota是指先下载固件到ota1然后下次从ota1启动,回滚就是回到ota0 启动。 关于固件: bin文件可以用arduino生成也可以…...
口语笔记——祈使句用法
省略主语 (You give me) a cup of tea, please. 一杯茶(You wait for) another minute. 两等一分钟(You) keep quiet. 保持安静give me a break. 饶了我吧take your hand off. 把你的手拿开take this thing away 把这东西拿开never talk to strangers. 永远不要跟陌生人说话Do…...
【微软azure】【devtunnel隧道】工具的使用及介绍
简介:这是一个微软自带的能进行内网穿透的工具,最长30天有效期,可以定时更新,保证端口永久可用----可以理解为永久的nginx 前提:有azure账号,且要有相关权限,试用账号是不行滴 使用说明 1.环…...
重生之我在异世界学智力题(1)
大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 引言智力题题目:《奇怪的时钟…...
九、页面级变量的状态管理
状态管理概述 在声明式UI编程框架中,UI是程序状态的运行结果,用户构建了一个UI模型,其中应用的运行时的状态是参数。当参数改变时,UI作为返回结果,也将进行对应的改变。这些运行时的状态变化所带来的UI的重新渲染,在ArkUI中统称为状态管理机制。 自定义组件拥有变量,变…...
#Vue3篇:defineOptionsvueUse
定义组件name 从 3.3 开始你可以直接通过 defineOptions 来设置组件名或 inheritAttrs 属性。 defineProps() 和 defineEmits() const props defineProps<{foo: stringbar?: number }>()const emit defineEmits<{(e: change, id: number): void(e: update, val…...
李飞飞的生成式3D场景,对数字孪生的未来影响几何?
大家好,我是日拱一卒的攻城师不浪,致力于技术与艺术的融合。这是2024年输出的第47/100篇文章。 前言 这两天,AI界的教母李飞飞团队重磅发布了空间智能生成式AI大模型。 仅通过一张图片就能够生成一个可操作和交互的3D空间场景。 空间智能的…...
《操作系统 - 清华大学》6 -7:局部页面置换算法:Belady现象
文章目录 1. 定义2. LRU、FIFO和Clock的比较 1. 定义 局部页面置换算法的特点是针对一个正在运行的程序,它访问内存的情况,访问页的情况,来决定应该采取什么样策略,把相应的页替换出去,站在算法本身角度来考虑置换哪个…...
网络原理之 TCP 协议
目录 1. TCP 协议格式 2. TCP 原理 (1) 确认应答 (2) 超时重传 (3) 连接管理 a) 三次握手 b) 四次挥手 (4) 滑动窗口 (5) 流量控制 (6) 拥塞控制 (7) 延时应答 (8) 捎带应答 3. TCP 特性 4. 异常情况的处理 1) 进程崩溃 2) 主机关机 (正常流程) 3) 主机掉电 (…...
pinn爱看论文展
1.zhiwang 基于物理信息神经网络的波动方程优化求解方法 吴丹澜1梁展弘2余懿3蔡博3郑邦宏4王梓超4张紫玲4 1.肇庆学院计算机科学与软件学院,大数据学院2.香港城市大学电气工程系3.云浮市新兴县公安局4.肇庆学院计算机科学与软件学院、大数据学院 2,zhiwang 就爱…...
Burp(5)web网页端抓包与app渗透测试
声明! 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&…...
Spring 基础
什么是 Spring 框架? Spring 是一款开源的轻量级 Java 开发框架,旨在提高开发人员的开发效率以及系统的可维护性。 我们一般说 Spring 框架指的都是 Spring Framework,它是很多模块的集合,使用这些模块可以很方便地协助我们进行开发&#…...
go 集成nacos注册中心、配置中心
使用限制 Go>v1.15 Nacos>2.x 安装 使用go get安装SDK: go get -u github.com/nacos-group/nacos-sdk-go/v2 快速使用 初始化客户端配置ClientConfig constant.ClientConfig{TimeoutMs uint64 // 请求Nacos服务端的超时时间,默…...
一文掌握 OpenGL 几何着色器的使用
学习本文需要具备 OpenGL ES 编程基础,如果看起来比较费劲,可以先看入门文章 OpenGL ES 3.0 从入门到精通系统性学习教程 。 什么是几何着色器 几何着色器(Geometry Shader) OpenGL 管线中的可选着色器阶段,位于顶点着色器(Vertex Shader) 和光栅化阶段 之间。 其核心…...
《数据资产入表:企业资产评估的新契机》
《数据资产入表:企业资产评估的新契机》 在当今数字经济时代,数据作为关键生产要素,其重要性日益凸显。国家高度重视数据资产,陆续出台了一系列重磅政策。其中,“数据二十条” 即《中共中央 国务院关于构建数据基础制度…...
架构14-资源与调度
零、文章目录 架构14-资源与调度 1、资源模型 (1)概述 在 Kubernetes 中,资源模型是一个非常重要的概念,它涉及如何管理和分配集群中的资源,以确保 Pod 能够在最合适的节点上运行。资源模型不仅包括物理资源&#…...
uni-app H5端使用注意事项 【跨端开发系列】
🔗 uniapp 跨端开发系列文章:🎀🎀🎀 uni-app 组成和跨端原理 【跨端开发系列】 uni-app 各端差异注意事项 【跨端开发系列】uni-app 离线本地存储方案 【跨端开发系列】uni-app UI库、框架、组件选型指南 【跨端开…...
springboot407美发管理系统(论文+源码)_kaic
摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装美发管理系统软件来发挥其高效地信息处理的作用࿰…...
Apache-HertzBeat 开源监控默认口令登录
0x01 产品描述: HertzBeat(赫兹跳动) 是一个开源实时监控系统,无需Agent,性能集群,兼容Prometheus,自定义监控和状态页构建能力。HertzBeat 的强大自定义,多类型支持,高性能,易扩展,希望能帮助用户快速构建自有监控系统。0x02 漏洞描述: HertzBeat(赫兹跳动) 开源实时…...
发送请求时遇到了数据库完整性约束错误 1048 Column ‘platform‘ cannot be null
可以这样解决 在 Vue 2 中封装接口请求时,确保每次请求都包含 platform Header 参数的最佳实践是通过创建一个全局的 Axios 实例,并为这个实例设置默认的 Header。这样可以确保所有通过该实例发送的请求都会自动包含 platform 参数。此外,你…...
Go快速开发框架集成Vue3漂亮的动态流程图编辑和动态流程展示插件
温馨提示:我们分享的文章是给需要的人,不需要的人请绕过,文明浏览,误恶语伤人! 前言 为大家在开发流程相关业务时有个漂亮流程图展示,我们集成一个实用的流程图编辑器,让流程开发变得简单&…...
【SH】微信小程序调用EasyDL零门槛AI开发平台的图像分类研发笔记
文章目录 微信小程序字符串字符串模板字符串拼接 上传图片GET请求测试编写测试代码域名不合法问题 GET和POST请求测试 微信小程序字符串 字符串模板 这是ES6引入的特性,允许你通过反引号()创建模板字符串,并在其中嵌入变量或表达…...
NanoLog起步笔记-6-StaticLogInfo
nonolog起步笔记-6-StaticLogInfo StaticLogInfo文件名和行号文件名和行号的传入log参数 RuntimeLogger::registerInvocationSitelogid为什么只能被赋一次值 reserveAlloc加入消息头finishAlloc返回 StaticLogInfo 写C语言编译前端时,给我印象深刻的一部分是&#…...
【OpenCV】视频录制
初始化一个视频写入对象,目的是将图像帧序列保存为视频文件。使用了OpenCV库中的cv2.VideoWriter类来创建这个对象,并且设置了视频的编码格式、帧率以及分辨率。 导入库 import cv2 import datetime cv2 是 OpenCV 库的 Python 接口,提供了…...
同城到家预约上门服务解决方案:家政预约同城服务小程序
### 系统架构"同城到家预约上门服务解决方案:PHP家政预约同城服务小程序"采用B/S架构,后端使用PHP语言开发,前端则基于微信小程序平台。系统分为用户端、服务端和后台管理端,各端相互依赖又相互独立,支持多种…...
linux-14 关于shell(十三)type,内置命令和外部命令
我们说一个命令,叫做type,先来看看type的效果,比如说我指定type后面这个命令叫cd,如下图, 你看它说什么?cd is a shell builtin,我再 type ls,看它会说什么?如下图&#…...
使用php生成、识别二维码
1、生成二维码 要求: # 详见:https://packagist.org/packages/bacon/bacon-qr-code php: ^8.1iconv Library imagick Library # 或者:GD library 下载: # 详见:https://packagist.org/packages/bacon/bacon-qr-cod…...
pytorch多GPU训练教程
pytorch多GPU训练教程 文章目录 pytorch多GPU训练教程1. Torch 的两种并行化模型封装1.1 DataParallel1.2 DistributedDataParallel 2. 多GPU训练的三种架构组织方式2.2 数据不拆分,模型拆分(Model Parallelism)2.3 数据拆分,模型…...
日拱一卒(12)——leetcode学习记录:2的幂
一、题目 判断一个整数n是否是2的幂次,是返回True,否返回False 二、分析 1. 递归法:如果n是0,返回False,如果n是1,返回True,其他情况,将n//2递归 2. 数学法:还是从数…...
非文件形式的内存动态函数库调用接口
使用memfd的系统调用接口将动态库加载到proc虚拟文件系统,提供的fd为进程持有的句柄,通过dlopen的path指向此句柄,即可实现非文件系统加载动态链接库。 文章目录 一、memfd_create二、dl_open三、示例参考 一、memfd_create 接口名称int mem…...
TimeXplusplus——提高时间序列数据的可解释性,避免琐解和分布偏移问题的深度学习可解释性的框架
摘要 论文地址:https://arxiv.org/abs/2405.09308 源码地址:https://github.com/zichuan-liu/timexplusplus 信号传输技术的优化对于推动光通信的发展至关重要。本文将详细探讨线路编码技术的目标及其实现方式。线路编码旨在提高带宽和功率效率…...
第十七届山东省职业院校技能大赛 中职组“网络安全”赛项资源任务书样题②
第十七届山东省职业院校技能大赛 中职组“网络安全”赛项资源任务书样题② 模块A 基础设施设置与安全加固(200分)A-1 登录安全加固(Windows, Linux)A-2 Nginx安全策略(Linux)A-3日志监控(Windows)A-4中间件…...
嵌入式蓝桥杯学习9 usart串口
复制一下之前ADC的工程,打开cubemx cubemx配置 1.在Connectivity中点击USART1 Mode(模式):Asynchronous(异步模式) 2.将PA9设置为USART1_TX,PA10设置为USART1_RX。 3.配置Parameter Settings. Baud R…...
golang实现简单的redis服务4.0(持久化)
redis的持久化机制与实现原理RDB工作原理问题1:如果数量很大怎么办?问题2:子线程在持久化期间有新的数据写入会发生什么?如何保证数据一致性? AOF的原理如何解决aof文件越来越大的问题aof文件如何重写?aof如何恢复数据aof文件有问题(损坏了)恢复会发生什么?怎么办?aof有哪…...
安卓底层相机流的传输方式
这是安卓 相机流的定义 typedef enum {CAM_STREAMING_MODE_CONTINUOUS, /* continous streaming */CAM_STREAMING_MODE_BURST, /* burst streaming */CAM_STREAMING_MODE_BATCH, /* stream frames in batches */CAM_STREAMING_MODE_MAX} cam_streaming_mode_t; 在ca…...
【YashanDB知识库】使用c-调用yashandb odbc驱动执行SQL时报YAS-08008 not all variables bounded
本文内容来自YashanDB官网,原文内容请见 https://www.yashandb.com/newsinfo/7508307.html?templateId1718516 问题现象 某客户的应用(c# asp.net)在运行时报如下异常: 问题的风险及影响 客户的应用无法正常运行 问题影响的版本 所有的yashandb版本…...
SQL项目实战与综合应用——项目设计与需求分析
项目设计与需求分析是软件开发过程中的核心环节,尤其在涉及数据库的应用时,良好的设计将直接影响到项目的可扩展性、性能和维护性。本文将深入探讨数据库设计的最佳实践,结合 C 与 SQL 的实际应用场景,涵盖项目需求收集、数据库设…...
JAVA基础学习笔记_反射+动态代理
文章目录 反射获取class对象的三种方式获取构造方法获取成员变量获取成员方法反射的作用 动态代理 反射 允许对成员变量\成员方法\构造方法的信息进行编程访问 把类内的信息扒的干干净净,获取解剖 获取从class字节码文件中获取 获取class对象的三种方式 public static void …...
Go 协程上下文切换的代价
在 Go 语言中,协程(Goroutine)是一种非常轻量级的并发执行单元,设计之初就是为了简化并发编程并提高性能。协程的上下文切换被认为是非常高效的,但是它的真正性能优势需要我们深入了解其背后的机制。 本文将深入探讨 …...
TikTok代理IP:如何帮助解决限流、封号问题?
在当今的社交媒体领域,TikTok仍然是“当红”平台。然而,许多用户在使用 TikTok 的过程中,常常会遇到限流和封号的问题,比如视频零播放,带来了极大的困扰。 这些限流和封号问题的出现,引发了用户对解决方法…...
vue中验证码的实现方式
在写登录页的时候有的系统会让你也进行一下验证码绘制,那么验证码如何实现的呢?我在写登录页的时候通过将登录框,验证码分开页面来写,最后将它们变成标签来导入到我的样式页面中,这样写不仅方便,更容易修改…...
从零开始学习18串锂电池BMS保护板
18串锂电池BMS保护板实物开源资料! BMS系统ADBMS1818/LTC6813凌力尔特主从一体机采集板:STM32F103LTC6813/ADBMS1818程序已调通: 1:18串电池电压(采集精度1.2mV/3mV) 2:8通道温度采集 3:一通道电流采集 4:RS485通信(楼…...
最左侧1问题的一种二分法解法
背景 最近看TI的C6000系列DSP文档时了解到Leftmost 1 or 0 counting功能, 网上搜索到这篇相关博客(最左侧1问题),发现里面的二分法代码自己看不懂,于是尝试用更容易看懂的方式重写一下。 思路 假设输入数据不超过3…...
HarmonyOS-中级(四)
文章目录 Native适配开发三方库的基本使用 🏡作者主页:点击! 🤖HarmonyOS专栏:点击! ⏰️创作时间:2024年12月09日11点12分 Native适配开发 Node-API HarmonyOS Node-API 是 HarmonyOS 提供的…...