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

【CSS in Depth 2 精译_075】12.2 Web 字体简介 + 12.3 谷歌字体的用法

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

  • 第四部分 视觉增强技术 ✔️
  • 【第 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.2 Web 字体 Web fonts
    • 12.3 谷歌字体 Google fonts

《CSS in Depth》新版封面

《CSS in Depth》新版封面

译者按
结束了设计稿的间距样式微调,从本篇开始再来了解一下 CSS 排版方面的知识。首先就是本篇介绍的 Web 字体,尤其是像谷歌字体这样的线上 Web 字体的引用。时隔六年,作者对相关内容进行了全面更新,对其中个别段落还补充了必要的截图,方便各位了解 Web 字体的相关操作。一起来先睹为快吧!

12.2 Web 字体 Web fonts

接下来,我们将通过添加自定义字体来让页面效果再上一个新台阶。迄今为止,我都没在示例页面的设计稿中囊括这些内容,但设计师几乎肯定会在其设计作品中指定网页字体。

页面设计可谓成也字体,败也字体。多年来,Web 开发者只能从很有限的字体库中做选择,即所谓的 Web 安全字体(web-safe fonts。这些字体类型(font families)包括 ArialHelveticaGeorgia 等,且绝大多数用户的操作系统都会安装。早期的浏览器只能使用这些系统字体来渲染页面,因此也不得不使用它们来进行网页开发。即便偶尔也可能指定某个非系统字体,比如 Helvetica Neue,但也只有那些碰巧安装了这款字体的用户才能正确渲染,而其他用户只能看到更通用的字体回退方案。

随着 Web 字体的兴起,情况改变了。Web 字体可以通过 @font-face 规则来告诉浏览器去哪儿检索并下载页面所需的自定义字体。使用自定义字体后,原本平淡无奇的页面也可以大有改观,仿佛开启了一个全新的世界,让人们有了更多选择与想象的空间。

不同的页面字体会带来不同的观感体验,或灵动活泼、或有板有眼;或沉稳可信、或不拘一格。如图 12.9 所示,对同一段文字分别使用了三组不同的字体。在左上角的示例中,标题用的是 News Cycle 字体,而正文则用的是 EB Garamond;这样看起来比较正式,一般出现在新闻报纸类网站中。而右上角的案例则分别使用了 ForumOpen Sans 字体,视觉效果就没那么正式,可用于个人博客或者小型技术公司。最后左下方的案例用到的字体分别是 AntonPangolin,显得比较活泼,甚至略带卡通风格,适用于儿童类网站。以上三个案例,仅仅只是变更了一下字体,别的什么都没做,就可以营造出截然不同的页面氛围。

图 12.9 不同的字体会显著影响网站的整体观感

【图 12.9 不同的字体会显著影响网站的整体观感】

通过在线服务来使用 Web 字体是最简单、可能也是最普遍的方式。常见的有 谷歌字体Google Fonts,详见:https://fonts.google.com/)与 Adobe 字体Adobe Fonts,详见:https://fonts.adobe.com/)。

无论收费还是免费,这些服务都可以解决很多问题,包括技术上(如托管服务)和法律上(如授权许可)的一些问题。它们都提供了大量可供选择的字体库;但偶尔也遇到某个特殊字体仅对付费用户开放,并且还得自行处理托管事宜。

由于谷歌字体提供了很多高质量且开源的字体(而且是免费的),接下来我将带您了解利用这项服务将 Web 字体添加到页面的具体方法。因为谷歌做了大量的工作,所以添加字体非常简单。然后我们将深入研究它的底层运行逻辑,看看它究竟是怎么工作的、又是如何托管自己的字体的。

本章将沿用之前构建的示例页,并通过 Web 字体来完善页面设计。完成后的页面渲染效果如图 12.10 所示。图中大部分内容用的是 Roboto 字体,它也是整个页面主要的正文字体;而标题使用的是 Sansita 字体。

图 12.10 启用了 Sansita 和 Roboto 这两款 Web 字体的页面局部效果

【图 12.10 启用了 Sansita 和 Roboto 这两款 Web 字体的页面局部效果】

让标题和正文分别使用两种不同的字体是很常见的做法。通常情况下,其中一种字体是 衬线(serif)字体,而另一种则为 无衬线(sans serif)字体。但本例中的两种字体都是无衬线类型。此外还可能见到有的设计标题和正文用的是相同的字体,但字体粗细各不相同的情况。

定义

衬线(serif 是某字符笔画末端的小线条或者“爪状”修饰效果。包含衬线的字体就被称为 衬线字体(serif typeface)(例如 Times New Roman);而没有衬线效果的字体则被称为 无衬线字体(sans serif typeface(例如 Helvetica)。

12.3 谷歌字体 Google fonts

访问谷歌字体网站 https://fonts.google.com/,就可以看到谷歌字体中当前可用的字体目录。该网站通过网格板块的方式来展示这些字体(如图 12.11 所示)。您可以直接从页面上选择字体,或者通过页面顶部的搜索栏或左侧的筛选工具来检索特定字体。

图 12.11 谷歌字体的字体选择界面

【图 12.11 谷歌字体的字体选择界面】

单击其中某个字体将显示更多详情信息,包括可用的字体粗细(细体、常规、粗体)及字体样式(常规或斜体)的列表。在屏幕的右上角有个获取该字体(“Get font” 字样)的按钮。点击该按钮会将其添加到已选字体中,并可通过点击右上角的小购物袋图标来预览选中的字体。

如果知道需要什么样的字体,就可以通过字体名称来快速检索。在搜索栏中输入 Sansita 后,就会从主视图中筛选掉其他无关字体。点击 Sansita 字体进入详情页,然后点击获取字体按钮(即 “Get font” 字样的按钮)将其添加到已选字体中。这样相当于添加了该字体的所有粗细和样式,稍后再做进一步细化。

然后返回谷歌字体首页(点击顶部的 Google Fonts 图标)。在搜索框输入 Roboto,Google 会找出好几种相关字体,其中包括 RobotoRoboto CondensedRoboto Slab 等。点击 Roboto 字体并将其添加到已选字体中。

【译注】

感觉这里有必要补充一个截图,以免过于抽象:

补图1:进入某字体详情页后,点击右上角的按钮可将当前字体列入已选字体中

【补图1:进入某字体详情页后,点击右上角的按钮可将当前字体列入已选字体中】


再点击上图右上角的购物袋图标,即可看到当前已选中的所有字体:
补图2:点击右上角的购物袋图标,可以查看当前已选中的所有谷歌字体

【补图2:点击右上角的购物袋图标,可以查看当前已选中的所有谷歌字体】

这样一来,页面就会显示 “2 font families selected” 字样(即 “已选中两个字体类型”)。页面右侧有两个按钮,按钮 “Get Embed Code”(获取嵌入式代码)负责提供嵌入这些字体所需的 CSS(如图 12.12 所示);而按钮 “Download all”(即 “全部下载”)则可以将所选字体下载到本地。我们先点击第一个按钮。

图 12.12 左侧为当前选中的字体列表,右侧则显示对应的嵌入式代码

【图 12.12 左侧为当前选中的字体列表,右侧则显示对应的嵌入式代码】

到现在为止,您已经熟悉了常规和粗体字的粗细设置,但某些字体还支持多种不同的粗细尺寸。例如,Roboto 字体共有六种不同的粗细,范围从细体(thin)到特粗体(black)不等,同时每一种粗细还有对应的斜体字格式。请注意,除了使用细体(thin)、常规(regular)、粗体(bold)、黑体(black)外,字体粗细(weights)还可以用数值来表示,例如 100、400、700 和 900 等等。

说明

字型(typeface字体(font 这两个术语经常被混为一谈。字型 是指字体的整个家族(例如 Roboto),通常由同一位设计师创建;一种字型可能会存在多种样式变体或粗细形式(例如细体(light)、粗体(bold)、斜体(italic)、压缩(condensed)等等)。这些变体的每一个都可以称之为一种 字体(font

理想情况下,您可以选择字体所有的变体形式来为您的页面设计提供丰富的选择。然而,要添加的字体越多,意味着浏览器要同步下载的内容也会增多,从而让 Web 字体成为仅次于图片的、拖慢页面加载速度的几个罪魁祸首之一。为此,一种名为 可变字体(variable fonts 的全新技术应运而生,可以在一个更轻量的文件中实现多个变体形式的嵌入,本章稍后会为您演示其用法;但要是该方案并不具备实施条件,就应该更加慎重,只选取真正需要的字体。

一开始,字体的所有粗细版本都会被选中。在每个选中的字体下方,点击 “Change styles” 按钮(即 “变更样式”),并取消选中除了 Roboto 中的 Light 300、以及 Sansita 中的 ExtraBold 800 以外的所有粗细样式。剩下的这两个才是页面需要的字体粗细。通常还需要准备正文主体文字的斜体字版本,但在本例中无需考虑。

然后根据代码清单 12.6 所示的样式,将 <link> 标签复制到示例页的 <head> 元素中。这样就把包含字体描述的样式表添加到了示例页。此时页面会有两个样式表:一个是您自己的,而另一个则是字体的专属样式表。

此外,代码中还包含两个设置了 preconnect 预连接的 <link> 元素。它们是给浏览器的提示信息,用于告诉浏览器 Web 字体需要加载来自如下 Google 域名的资源,以便在解析 HTML 时预先进行连接,从而让样式表在后续解析到它们时,进一步提升字体的加载速度。

代码清单 12.6 引入谷歌字体样式的 <link> 标签写法

<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300&family=Sansita:wght@800&display=swap"rel="stylesheet"
/>

有了这个样式表,Web 字体的设置就能完全交给 Google 打理了。设置完成后就能在样式中使用这些字体了。将上述代码添加到本地页面,将得到如图 12.13 所示的页面效果:

图 12.13 使用了 Roboto 字体及 Sansita 字体后的页面效果

【图 12.13 使用了 Roboto 字体及 Sansita 字体后的页面效果】

要让相应的字体生效,需要通过 font-family 属性来指定 Roboto 字体或 Sansita 字体。为此,得再更新一下 CSS。先在 <body> 标签中指定正文字体 Roboto,这样整个网页都将继承该字体;然后将各级标题的字体、以及首页连接元素 home-link 的字体均设置为 Sansita。最后根据下列样式代码更新示例页面即可(要改动的位置已用注释说明)。

代码清单 12.7 使用 Web 字体的示例样式代码

@layer global {body {margin: 0;font-family: Roboto, sans-serif; /* 对页面全局应用 Roboto 字体 */line-height: 1.4;background-color: var(--extra-light-gray);}h1, h2, h3, h4 {font-family: Sansita, serif; /* 各级标题设为 Sansita 字体 */}
}/* ... */@layer modules {.home-link {color: var(--text-color);font-size: 1.6rem;font-family: Sansita, serif; /* 左上角的首页链接设为 Sansita 字体 */font-weight: bold;text-decoration: none;}
}

由于页面添加了谷歌字体样式表,浏览器就能正确解析这些字体设置并将其关联到已下载的 Web 字体上,最终让对应字体生效。如果使用其他的 Web 字体服务(例如 Adobe 字体),那么整个过程也是大同小异。这些服务要么提供所需 CSS 样式的 URL 地址,要么提供能为页面添加 CSS 样式的 JavaScript 代码片段。

接下来我们将对字体间距进行微调,并分享几个关于性能加载方面的考量因素。在这之前,先来看看谷歌字体都为我们做了哪些工作。



关于《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 精译_075】12.2 Web 字体简介 + 12.3 谷歌字体的用法

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第四部分 视觉增强技术 ✔️【第 12 章 CSS 排版与间距】 ✔️ 12.1 间距设置 12.1.1 使用 em 还是 px12.1.2 对行高的深入思考12.1.3 行内元素的间距设置 12.2 Web 字体 ✔️12.3 谷歌字体 ✔️12.…...

【数字花园】个人知识库网站搭建:①netlify免费搭建数字花园

目录 [[数字花园]]的构建原理包括三个步骤&#xff1a;五个部署方案教程相关教程使用的平台 步骤信息管理 这里记录的自己搭建数字花园&#xff08;在线个人知识库&#xff09;的经历&#xff0c;首先尝试的是网上普遍使用的方法&#xff0c;也就是本篇文章介绍的。 后面会继续…...

访问者模式的理解和实践

在软件开发过程中&#xff0c;设计模式为我们提供了解决常见问题的最佳实践。访问者模式&#xff08;Visitor Pattern&#xff09;是行为设计模式之一&#xff0c;它将数据操作与数据结构分离&#xff0c;使得在不修改数据结构的前提下&#xff0c;能够定义作用于这些元素的新的…...

SpringBoot中Selenium详解

文章目录 SpringBoot中Selenium详解一、引言二、集成Selenium1、环境准备1.1、添加依赖 2、编写测试代码2.1、测试主类2.2、页面对象2.3、搜索组件 三、使用示例四、总结 SpringBoot中Selenium详解 一、引言 在现代软件开发中&#xff0c;自动化测试是提高软件质量、减少重复…...

Android 系统应用重名install安装失败分析解决

Android 系统应用重名install安装失败分析解决 文章目录 Android 系统应用重名install安装失败分析解决一、前言1、Android Persistent apps 简单介绍 二、系统 persistent 应用直接安装需求分析解决1、系统应用安装报错返回的信息2、分析解决 三、其他1、persistent系统应用in…...

scala中如何解决乘机排名相关的问题

任务目标&#xff1a; 1.计算每个同学的总分和平均分 2.按总分排名&#xff0c;取前三名 3.按单科排名&#xff0c;取前三名 好的&#xff0c;我们可以用Scala来完成这个任务。下面是一个简单的示例代码&#xff0c;它将演示如何实现这些功能&#xff1a; // 假设我们有一个…...

常用的注解

RequestMapping 用于映射请求路径 可以添加在类或方法上 请求类型 请求类型包括GET、POST、PUT、DELETE等 默认支持GET和POST两种方式 简写&#xff1a;GetMapping、PostMapping、PutMapping、DeleteMapping PostMapping("/buy") 等价 RequestMapping("/buy&quo…...

移动应用渗透测试:确保通过测试的关键安全策略

无论您是为了维持合规性、保护敏感用户数据&#xff0c;还是维护品牌声誉&#xff0c;顺利通过渗透测试&#xff08;Pen Test&#xff09;都是至关重要的。为了帮助您轻松应对这一过程&#xff0c;有几个积极的安全措施可以帮助确保您的应用程序更加安全。 通过采用高级安全机…...

【Canvas与光阑】立方体六彩光阑

【成图】 120*120的png图标 大小图&#xff1a; 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>立方体 六彩光阑 Draft2</…...

【ArcGIS微课1000例】0135:自动生成标识码(长度不变,前面自动加0)

文章目录 一、加载实验数据二、BSM计算方法一、加载实验数据 加载专栏《ArcGIS微课实验1000例(附数据)》配套数据中0135.rar中的建筑物数据,如下图所示: 打开属性表,BSM为数据库中要求的字段:以TD_T 1066-2021《不动产登记数据库标准》为例: 计算出来的BSM如下图: 二、B…...

nginx文件上传下载控制

上传大小控制 client_max_body_size 设置最大客户端请求体大小 默认大小1M,可以使用在http, server, location块。 根据不同的请求路径设置不同的大小控制 server {listen 9001;client_max_body_size 2M;location / {root D:\\server\\nginx-1.22.0\\html\\9001;}locat…...

LabelImg使用教程

(yolov5scondaPython3123) D:\PyCharm20240724\20240724PyCharmProject>conda.bat deactivate D:\PyCharm20240724\20240724PyCharmProject>conda activate labelimg_env (labelimg_env) D:\PyCharm20240724\20240724PyCharmProject> labelimg 创建快捷键方式...

运维新手入门——KVM(Beginner‘s Guide to Operations and Maintenance - kvm)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…...

Android 10.0 WiFi连接默认设置静态IP地址功能实现

1.前言 在10.0的系统rom定制化开发中,在定制化某些功能开发中,在wifi模块中,有产品需要要求设置wifi静态ip功能,而系统中wifi连接 后ip是动态的,每次开机后 连接wifi的ip就是不固定的,所以产品需要采用固定ip,就需要实现静态ip功能 2.WiFi连接默认设置静态IP地址功能实…...

ceph /etc/ceph-csi-config/config.json: no such file or directory

环境 rook-ceph 部署的 ceph。 问题 kubectl describe pod dragonfly-redis-master-0Warning FailedMount 7m59s (x20 over 46m) kubelet MountVolume.MountDevice failed for volume "pvc-c63e159a-c940-4001-bf0d-e6141634cc55" : rpc error: cod…...

windows C#-限制可访问性

属性或索引器的 get 和 set 部分称为访问器。 默认情况下&#xff0c;这些访问器具有与其所属属性或索引器相同的可见性或访问级别。不过&#xff0c;有时限制对其中某个访问器的访问是有益的。 通常&#xff0c;限制 set 访问器的可访问性&#xff0c;同时保持 get 访问器可公…...

Java-22 深入浅出 MyBatis - 手写ORM框架3 手写SqlSession、Executor 工作原理

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 大数据篇正在更新&#xff01;https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了&#xff1a; MyBatis&#xff…...

【数据分享】1901-2023年我国省市县三级逐年最低气温数据(Shp/Excel格式)

之前我们分享过1901-2023年1km分辨率逐月最低气温栅格数据和Excel和Shp格式的省市县三级逐月最低气温数据&#xff0c;原始的逐月最低气温栅格数据来源于彭守璋学者在国家青藏高原科学数据中心平台上分享的数据&#xff01;基于逐月栅格数据我们采用求年平均值的方法得到逐年最…...

AlphaPose、yolov8Pose、RTMPose进行对比

一、Alphapose 参考&#xff1a; https://blog.csdn.net/m0_45850873/article/details/123939849...

【Linux】文件系统

文章目录 Group中的组成部分inode tableinode bitmapdata blocksblock bitmapgroup descriptor tablesuper block 文件系统关于inode和blocksinode和block是如何映射的&#xff1f;12个直接映射一级间接索引二级间接索引三级间接索引 为什么访问文件的是inode&#xff0c;但是我…...

希迪智驾持续亏损8.2亿:毛利率下滑,冲刺“自动驾驶矿卡第一股”

《港湾商业观察》黄懿 近日&#xff0c;希迪智驾&#xff08;湖南&#xff09;股份有限公司&#xff08;下称“希迪智驾”&#xff09;向港交所主板递交上市申请&#xff0c;联席保荐人为中金公司、中信建投国际、中国平安资本&#xff08;香港&#xff09;。 资料显示&#…...

Python实现中国象棋

探索中国象棋 Python 代码实现&#xff1a;从规则逻辑到游戏呈现 中国象棋&#xff0c;这款源远流长的棋类游戏&#xff0c;承载着深厚的文化底蕴与策略智慧。如今&#xff0c;借助 Python 与 Pygame 库&#xff0c;我们能够在数字世界中复刻其魅力&#xff0c;深入探究代码背后…...

C++小碗菜之五:GDB调试工具

“程序员不是编写代码的人&#xff0c;而是调试错误的人。” – 约翰本尼斯&#xff08;John Bennet&#xff09; 目录 前言 在虚拟机中安装 GDB GDB调试的实战演练 创建示例代码 例子&#xff1a; 使用 GDB 调试 编译代码 启动 GDB 设置断点 运行程序 打印变量值 …...

机器学习干货笔记分享:朴素贝叶斯算法

朴素贝叶斯分类是一种十分简单的分类算法&#xff0c;即对于给出的待分类项&#xff0c;求解在此项出现的条件下各个类别出现的概率&#xff0c;哪个最大&#xff0c;就认为此待分类项属于哪个类别。 以判定外国友人为例做一个形象的比喻。 若我们走在街上看到一个黑皮肤的外…...

bug:uniapp运行到微信开发者工具 白屏 页面空白

1、没有报错信息 2、预览和真机调试都能正常显示&#xff0c;说明代码没错 3、微信开发者工具版本已经是win7能装的最高版本了&#xff0c;1.05版 链接 不打算回滚旧版本 4、解决&#xff1a;最后改调试基础库为2.25.4解决了&#xff0c;使用更高版本的都会报错&#xff0c;所…...

VBA API 概述 | 宏编程

注&#xff1a;本文为 “VBA API 概述 | 宏编程 | 执行速度慢” 相关文章合辑。 VBA API 详解 Office 二次开发于 2020-12-17 22:27:10 发布 Office 版本变动 在 Office 2010 之前&#xff0c;微软仅提供 32-bit 版本的 Office。而自 Office 2010 起&#xff0c;出现了 32-b…...

《九重紫》逐集分析鉴赏—序言、概览、框架分析

主标题&#xff1a;《九重紫》一起追剧吧副标题&#xff1a;《九重紫》逐集分析鉴赏—序言、概览、框架分析《永夜星河》后&#xff0c;以为要浅尝剧荒&#xff0c;一部《九重紫》突出重围。 看了宣传片感觉不是很差&#xff0c;看了部分剪辑感觉还可以&#xff0c;看了一两集感…...

《Vue进阶教程》第六课:computed()函数详解(上)

往期内容&#xff1a; 《Vue零基础入门教程》合集&#xff08;完结&#xff09; 《Vue进阶教程》第一课&#xff1a;什么是组合式API 《Vue进阶教程》第二课&#xff1a;为什么提出组合式API 《Vue进阶教程》第三课&#xff1a;Vue响应式原理 《Vue进阶教程》第四课&#…...

MFC案例:基于对话框的简易阅读器

一、功能目标&#xff1a; 1.阅读txt文件 2.阅读时可以调整字体及字的大小 3.打开曾经阅读过的文件时&#xff0c;能够自动从上次阅读结束的位置开始显示&#xff0c;也就是能够保存和再次使用阅读信息。 4.对于利用剪贴板粘贴来的文字能够存储成txt文件保存。 5.显示…...

Python+OpenCV系列:图像的运算

文章目录 PythonOpenCV系列&#xff1a;图像的加权和、覆盖1. 图像加权和&#xff08;加权融合&#xff09;2. 图像覆盖&#xff08;区域叠加&#xff09;3. 应用场景4. 总结 PythonOpenCV系列&#xff1a;图像的加权和、覆盖 在图像处理中&#xff0c;图像的加权和与覆盖是两…...

【Python】【Conda 】Conda vs venv:Python开发者的虚拟环境选择指南

目录 引言一、概述1.1 Conda 虚拟环境1.2 Python venv 虚拟环境 二、安装与设置2.1 安装 Conda 虚拟环境2.2 安装 Python venv 虚拟环境 三、依赖管理3.1 Conda 依赖管理3.2 Python venv 依赖管理 四、适用场景五、性能与资源占用5.1 Conda 性能与资源占用5.2 Python venv 性能…...

gitee仓库的使用

1、本地创建文件夹&#xff1a;比如H:\python-study\Djangogitee 2、在gitee上创建一个仓库&#xff0c;比如django-project 3、Git 全局设置: 在第一步创建的文件夹下&#xff0c;打开Git Bash&#xff08;需要提前下载好Git工具&#xff09;&#xff0c;执行下面命令 git co…...

openjudge_简单英文题_33:Is It a Tree

题目 33:Is It a Tree 总时间限制: 1000ms 内存限制: 65536kB 描述 Given edges of a graph with N nodes. Check whether it is a tree. 输入 First line: one positive integers N (N < 100). Next N lines: an N*N 0/1 matrix A{a[i][j]}, indicating whether there ex…...

MyBatis-Plus 中 IdWorker.getId() 方法

前言 在分布式系统中&#xff0c;生成全局唯一标识符&#xff08;ID&#xff09;是一个常见的需求。MyBatis-Plus 提供了多种 ID 生成策略&#xff0c;其中基于 Twitter 的 Snowflake 算法实现的 IdWorker.getId() 方法因其高效性和适应分布式环境的特点而备受青睐。然而&…...

JAVA面试汇总(三)集合(一)

JAVA多线程七篇终于写完了&#xff0c;今天开始了新的JAVA面试汇总&#xff0c;集合部分&#xff0c;这部分其实比多线程有意思多了&#xff0c;这个计划最多五篇&#xff0c;也许不到五篇&#xff0c;这是第一篇&#xff0c;开卷。 1.Collection和Collections 的区别&#xff…...

zookeeper的安装

zookeeper的安装 一.前言 zookeeper开源组件是为分布式应用&#xff0c;提供协调服务的一种解决方案。本文主要是介绍在Centos7的操作系统中&#xff0c;如何以单机&#xff0c;伪集群&#xff0c;集群的方式来安装部署zookeeper服务。zookeeper要求的jdk版本为1.6以上。本文假…...

2025系统架构师(一考就过):选择题基础知识一

考点1&#xff1a;CPU、指令 真题1&#xff1a;CPU 执行算术运算或逻辑运算时&#xff0c;常将源操作数和结果暂存在&#xff08;累加器&#xff08;AC&#xff09;&#xff09;中。 真题2&#xff1a;在程序的执行过程中&#xff0c;Cache与主存的地址映射是由&#xff08;硬…...

线性dp—acwing

题目&#xff1a;数字三角形 898. 数字三角形 - AcWing题库 看某个点&#xff0c;是从那些路径过来的去分析 分析1&#xff1a; 代码1&#xff1a;&#xff08;顺序正推&#xff0c;二维dp数组&#xff09; #include<bits/stdc.h> using namespace std;const int N 5…...

【QT】:QT(介绍、下载安装、认识 QT Creator)

背景 &#x1f680; 在我们的互联网中的核心岗位主要有以下几种 开发&#xff08;程序员&#xff09;测试运维&#xff08;管理机器&#xff09;产品经理&#xff08;非技术岗位&#xff0c;提出需求&#xff09; 而我们这里主要关注的是开发方向&#xff0c;开发岗位又分很…...

GPIO在ZYNQ7000中的结构和相关寄存器解析

GPIO MASK DATA LSW和 MASK DATA MSW LSW和MSW分别是LSW (Least Significant Word)和MSW (Most Significant Word)。 因为DATA是u32,所以如果寄存器的基址是XGPIOPS_DATA_LSW_OFFSET&#xff0c;那么32位就能同时让高16位的MASK DATA MSW]31:16和 MASK DATA LSW的bit7同时为…...

Docker学习笔记

目录 1&#xff0c;Docker概述 I&#xff0c;虚拟机技术 虚拟机技术缺点 II&#xff0c;容器化技术 III&#xff0c;比较docker和虚拟机技术不同 Ⅳ&#xff0c;DevOps(开发&#xff0c;运维) 1&#xff0c;应用更快速的交付和部署 2&#xff0c;更编辑的升级和扩缩容 …...

皮带,传送带异物检测识别数据集,2345张图像,yolo,coco,voc标记三种格式的数据集整理

皮带&#xff0c;传送带异物检测识别数据集,2345张图像&#xff0c;yolo&#xff0c;coco&#xff0c;voc标记三种格式的数据集整理 数据集分割 训练组79&#xff05; 1860图片 有效集14% 318图片 测试集7% 167图片 预处理 自动定向&#xff1a; 已应用 调…...

大模型qiming面试内容整理-技术能力评估

技术能力评估是大模型相关岗位面试中最重要的环节之一,主要考察候选人是否具备处理复杂机器学习问题、设计和优化模型的能力。以下是技术能力评估的具体内容和可能涉及的题目: 机器学习基础 ● 监督学习与无监督学习: ○ 理解基本的机器学习类型和模型:监督学习:如回归(线…...

前端成长之路:HTML(3)

在HTML中&#xff0c;有列表标签。列表最大的特点是整齐、简洁、有序&#xff0c;用列表进行布局会更加自由方便。根据使用的情景不同&#xff0c;可以将列表分为三大类&#xff1a;无序列表、有序列表和自定义列表。 无序列表 在HTML中使用<ul>标签定义一个无序列表&a…...

小程序给元素设置line-height为0引起页面更新无效

问题 在小程序中使用setData更新&#xff0c;数据更新完毕&#xff0c;页面却没有更新值&#xff0c;甚至出现渲染错乱现象&#xff1b; 发现 但当点击相应事件的时候&#xff0c;视图又更新了。 思考 开始认为是没有在dom渲染后进行数据更新产生的问题&#xff0c;换了方法执行…...

【1355个俚语完结】跟李笑来学美式俚语(Most Common American Idioms): Part 68

Goal Completed 2024年12月11日22点25分完成这本书的学习。习得1355个俚语&#xff0c;尽管有些记得不牢&#xff0c;但是好在走在路上&#xff0c;一直往前走。后面就是多重复&#xff0c;多练习。 查看自己commit的日志&#xff0c;是从2024年11月15日开始学习这本书&#…...

TcpServer 服务器优化之后,加了多线程,对心跳包进行优化

TcpServer 服务器优化之后&#xff0c;加了多线程&#xff0c;对心跳包进行优化 TcpServer.h #ifndef TCPSERVER_H #define TCPSERVER_H#include <iostream> #include <winsock2.h> #include <ws2tcpip.h> #include <vector> #include <map> #…...

螺丝螺帽缺陷检测识别数据集,支持yolo,coco,voc三种格式的标记,一共3081张图片

螺丝螺帽缺陷检测识别数据集&#xff0c;支持yolo&#xff0c;coco&#xff0c;voc三种格式的标记&#xff0c;一共3081张图片 3081总图像数 数据集分割 训练组90&#xff05; 2781图片 有效集7% 220图片 测试集3% 80图片 预处理…...

若依微服务中配置 MySQL + DM 多数据源

文章目录 1、导入 MySQL 和达梦&#xff08;DM&#xff09;依赖2、在 application-druid.yml 中配置达梦&#xff08;DM&#xff09;数据源3、在 DruidConfig 类中配置多数据源信息4、在 Service 层或方法级别切换数据源4.1 在 Service 类上切换到从库数据源4.2 在方法级别切换…...

Apache APISIX快速入门

本文将介绍Apache APISIX&#xff0c;这是一个开源API网关&#xff0c;可以处理速率限制选项&#xff0c;并且可以轻松地完全控制外部流量对内部后端API服务的访问。我们将看看是什么使它从其他网关服务中脱颖而出。我们还将详细讨论如何开始使用Apache APISIX网关。 在深入讨…...