news 2026/9/7 15:26:14

freeCodeCamp Applied Visual Design 课程实战:用 font-size 为多个标题元素建立字号体系

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
freeCodeCamp Applied Visual Design 课程实战:用 font-size 为多个标题元素建立字号体系

freeCodeCamp Applied Visual Design 课程实战:用 font-size 为多个标题元素建立字号体系

【免费下载链接】freeCodeCampfreeCodeCamp.org's open-source codebase and curriculum. Learn math, programming, and computer science for free.项目地址: https://gitcode.com/GitHub_Trending/fr/freeCodeCamp

本文基于 freeCodeCamp 开源课程中 Applied Visual Design(视觉设计应用)模块的练习题目《Set the font-size for Multiple Heading Elements》展开,完整还原该练习的字号层级要求、可运行的 HTML/CSS 代码与配套测试断言,并结合课程仓库中的挑战文件、模块结构与测试运行器实现,讲解font-size属性如何用于统一多个元素的视觉一致性。读完本文,你可以独立完成这道练习、理解其自动化测试的原理,并掌握为h1h6建立字号比例体系的通用做法。

1. 挑战定位与文档结构

这道挑战存放在课程仓库的标准挑战目录中:

  • 挑战文件:applied-visual-design/587d781c367417b2b2512ac2.md

其 YAML 前置元数据(frontmatter)声明了挑战的标识信息,其中id: 587d781c367417b2b2512ac2是唯一标识,dashedNameset-the-font-size-for-multiple-heading-elementschallengeType0,另外还关联了视频课程与论坛主题(forumTopicId: 301067)。

在模块组织层面,该挑战的排课顺序由 applied-visual-design.json 中的challengeOrder数组决定。从源码结构看,这道题位于Use the text-transform Property to Make Text Uppercase(id...512ac0)之后,紧接着是姊妹题Set the font-weight for Multiple Heading Elements(id...512ac3),两者共同构成“为多个标题元素设置排版属性”的连续训练。

2. 核心概念:font-size 与视觉一致性

挑战文档给出的概念描述是:

font-size属性用于指定给定元素中文本的大小。这条规则可以用于多个元素,以创建页面中文本的视觉一致性(visual consistency)。

这正是本题的训练目标:不是只改一个标题,而是为h1h6六个标题标签统一设置字号,让页面形成一套自上而下递减的标题层级。浏览器对h1h6虽然有默认字号(从大到小),但默认值因浏览器而异;显式为每个标签指定像素值,是保证跨环境渲染一致、并建立可预测排版节奏的标准做法。

3. 任务要求:完整的字号层级表

挑战的# --instructions--部分给出了硬性要求——在<style>标签中设置以下字号:

选择器要求的 font-size相对比例(以 h6 为 1 基准)
h168px4.86
h252px3.71
h340px2.86
h432px2.29
h521px1.50
h614px1.00

可以看到这组数值形成一条平滑递减的字号曲线:68 → 52 → 40 → 32 → 21 → 14,相邻层级之间保持相近的收缩幅度,而不是断崖式跳变。这种比例化设置是标题体系(heading scale)的基本设计手法。

4. 动手实操:从种子代码到参考答案

4.1 种子代码(Seed)

挑战文件# --seed--部分提供了一份“空壳”起点,页面中已预置六个标题元素,<style>标签内留白待填:

<style> </style> <h1>This is h1 text</h1> <h2>This is h2 text</h2> <h3>This is h3 text</h3> <h4>This is h4 text</h4> <h5>This is h5 text</h5> <h6>This is h6 text</h6>

4.2 参考答案(Solution)

挑战文件# --solutions--部分给出的完整答案为六条独立的选择器规则:

<style> h1 { font-size: 68px; } h2 { font-size: 52px; } h3 { font-size: 40px; } h4 { font-size: 32px; } h5 { font-size: 21px; } h6 { font-size: 14px; } </style> <h1>This is h1 text</h1> <h2>This is h2 text</h2> <h3>This is h3 text</h3> <h4>This is h4 text</h4> <h5>This is h5 text</h5> <h6>This is h6 text</h6>

写法要点:

  • 每条规则使用元素选择器(tag selector),直接命中对应标签的所有实例;
  • font-size的取值统一使用px单位。这一点并非随意——后文的测试断言是按字符串精确比较计算样式的,若写成68em或省略单位,断言将失败;
  • 六条规则互相独立,未使用选择器合并(如h1, h2 { ... }),因为每条规则的值不同,分开书写最直观。

5. 测试机制:CSSHelp 如何验证你的样式

挑战文件# --hints--部分附带了六段测试断言,它们揭示了自动评测的实现方式。以h1为例:

const fontSizeOfh1 = new __helpers.CSSHelp(document).getStyle('h1')?.getPropertyValue('font-size'); assert.equal(fontSizeOfh1, '68px');

其余五个标签的断言结构完全一致,仅选择器与期望字符串不同:h2期望'52px'h3期望'40px'h4期望'32px'h5期望'21px'h6期望'14px'

从断言代码可以读出三个实现事实:

  1. 测试运行在预览沙箱内__helpers是注入到挑战预览环境中的辅助对象,CSSHelp接收当前document并读取元素上的样式。在客户端代码中,预览页面由 frame.ts 构造,其中可以看到预览 iframe 的构建逻辑(主预览帧 id 为fcc-main-frame,测试运行器资源来自/js/test-runner/路径),并明确注释了框架自身的隐藏样式元素会带fcc-hide-header类,以避免干扰 CSS 相关测试——这说明课程对“测试读到的样式”与“框架注入的样式”做了隔离。
  2. getStyle使用了可选链?.:断言写成getStyle('h1')?.getPropertyValue('font-size'),即当取不到样式对象时断言拿到undefined,与期望值'68px'比较后判负。换句话说,不写规则、或规则没生效,测试都会失败。
  3. 比较的是字符串化的计算值:期望值形如'68px'这样的完整字符串,意味着字号必须以像素写出且被浏览器规范化为该形式。这解释了第 4.2 节中“必须用 px”的要求。

6. 举一反三与自检清单

完成本题后,可以用以下清单快速自检,并迁移到实际项目中的标题体系设计:

  • 六个标签是否各有独立规则?遗漏任何一个标签,对应的assert.equal都会失败;
  • 每个数值是否严格等于要求(68/52/40/32/21/14)?测试是精确字符串匹配,近似值不算通过;
  • 单位是否为px?换用emrem或裸数字都会导致断言不通过;
  • 规则是否写在<style>标签内并被浏览器实际应用?仅存在选择器但值写错(如font-size: 68PX)同样失败。

这道题之后,同一模块紧接着的Set the font-weight for Multiple Heading Elements(挑战文件位于 applied-visual-design/587d781c367417b2b2512ac3.md)会把同样的“多元素统一属性”模式应用到字重上,两者合起来覆盖了标题排版中最核心的font-sizefont-weight两个维度。

【免费下载链接】freeCodeCampfreeCodeCamp.org's open-source codebase and curriculum. Learn math, programming, and computer science for free.项目地址: https://gitcode.com/GitHub_Trending/fr/freeCodeCamp

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/7 15:26:05

GenOffice、Motrix Next、Qx:三款提升效率的开源项目实测

这次一次聊三个 GitHub 开源项目&#xff0c;方向完全不同&#xff0c;但都属于“装上就能提升效率”的类型&#xff1a;GenOffice、Motrix Next 和 Qx 效率启动器。三者的 Star 数分别是 54.9K、4.1K 和 15&#xff0c;量级差很远&#xff0c;但各自解决的问题都很明确——办公…

作者头像 李华
网站建设 2026/9/7 15:24:17

秋叶ComfyUI-V35整合包:AI绘画节点式工作流一键部署指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/7 15:24:11

并行处理与批量任务调度:从原理到稳定落地的工程实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/7 15:21:42

ComfyUI零基础入门:节点式工作流、自定义节点与报错排查指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/7 15:18:31

OSG/OSGEarth预编译三方库配置指南:从环境搭建到空间查询

简介&#xff1a;面向基于Visual Studio 2019构建64位OSG3.6.5与OSGEarth2.10项目的开发者&#xff0c;这份预编译三方库直击第三方依赖缺失、编译配置繁琐的痛点。压缩包约137.76MB&#xff0c;内含2000个文件&#xff0c;以头文件、静态库、CMake配置、inc文件、C源文件、pro…

作者头像 李华