news 2026/9/7 16:17:45

freeCodeCamp 基础 CSS 实战:用 RGB 值表示并混合元素颜色

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
freeCodeCamp 基础 CSS 实战:用 RGB 值表示并混合元素颜色

freeCodeCamp 基础 CSS 实战:用 RGB 值表示并混合元素颜色

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

本篇指南基于 freeCodeCamp 响应式网页设计(Responsive Web Design)课程中 "Basic CSS" 模块的Use RGB values to Color Elements挑战文档,完整讲解 CSS 中 RGB 颜色值的语法、取值范围及其与十六进制颜色码的数学等价关系。读完本篇,你将能熟练使用rgb()函数为元素着色、完成 hex 到 RGB 的换算,并理解 freeCodeCamp 课程如何用浏览器运行时断言和正则匹配来验证这类 CSS 练习。

什么是 RGB 颜色值

CSS 除了使用颜色关键字(如black)和十六进制代码(hex code)外,还可以使用RGB值来表示颜色。RGB分别代表红色(Red)、绿色(Green)、蓝色(Blue)三个颜色分量,每个分量用一个0 到 255之间的整数表示亮度:

  • 黑色的 RGB 值:rgb(0, 0, 0)—— 三个分量全部为 0,即没有任何光线;
  • 白色的 RGB 值:rgb(255, 255, 255)—— 三个分量全部拉满,即三种色光完全叠加。

以把body背景设为橙色为例,RGB 写法如下:

body { background-color: rgb(255, 165, 0); }

这与rgb()函数的含义一致:括号内按红, 绿, 蓝的顺序给出三个 0–255 的数值。橙色rgb(255, 165, 0)表示红色分量拉满、绿色分量取约三分之二、蓝色分量不发光。

RGB 与十六进制的数值等价性

原文档中给出了一个值得展开的数学说明:

十六进制中,一个颜色分量用两位十六进制数字表示。两位十六进制数的组合数是 16 × 16 = 256 种取值;而 RGB 从 0 开始计数到 255,正好也是 256 个取值。因此 RGB 与 hex code 能表示的颜色数量完全相同。

换句话说,两者只是同一组 256 级灰度分量的两种记数法:hex 用十六进制书写(每位 0–F),RGB 用十进制书写(0–255)。在 freeCodeCamp 的课程脉络里,这一挑战正安排在三个十六进制挑战之后,构成"先学 hex、再学 RGB"的递进关系:

  1. Use Hex Code for Specific Colors(curriculum/challenges/english/blocks/basic-css/bad87fee1348bd9aedf08726.md):介绍十六进制是 16 进制数,0–9对应十进制 0–9,A–F对应 10–15,6 位十六进制数字按两位一组分别表示 R、G、B 分量,如#000000即黑色;
  2. Use Hex Code to Mix ColorsUse Abbreviated Hex Code:练习用 hex 混合颜色及使用三位缩写;
  3. 本篇挑战Use RGB values to Color Elements(curriculum/challenges/english/blocks/basic-css/bad87fee1348bd9aede08718.md);
  4. Use RGB to Mix Colors(curriculum/challenges/english/blocks/basic-css/bad82fee1348bd9aedf08721.md):把一组 hex 值转换为对应的 RGB 值。

这一挑战顺序在 curriculum/structure/blocks/basic-css.json 的challengeOrder数组中有明确记载,而basic-css本身是响应式网页设计超级块中的第二个模块(见 curriculum/structure/superblocks/responsive-web-design.json,位于basic-html-and-html5之后)。

实战练习:把 hex 换成 rgb

该挑战的原始任务(instructions)是:把body元素背景色中的十六进制代码替换为黑色的 RGB 值rgb(0, 0, 0)

挑战提供的初始代码(seed)如下:

<style> body { background-color: #F00; } </style>

#F00是三位缩写 hex,展开即#FF0000——红色分量拉满、绿蓝为零。题目要求用十进制的 RGB 记法表达纯黑,最终答案(solutions)为:

<style> body { background-color: rgb(0, 0, 0); } </style>

这个练习看似简单,实际覆盖了两类能力:一是rgb()函数的基本语法;二是 hex 与 RGB 之间的换算——#F00中红色分量FF(十六进制)恰好等于十进制 255,而纯黑则要求三个分量全部归零。

课程如何验证你的答案

从文档中的测试代码可以看到 freeCodeCamp 验证这道题的两层机制,这对理解"答案必须写成什么形式"很有参考价值。

第一层是运行时样式断言:

const body = document.querySelector('body'); const backgroundColor = window.getComputedStyle(body)['background-color']; assert.strictEqual(backgroundColor, 'rgb(0, 0, 0)');

浏览器通过window.getComputedStyle()读取body的计算样式,并要求background-color精确等于字符串rgb(0, 0, 0)。值得注意的是:无论你在 CSS 中写#000#000000还是rgb(0, 0, 0),浏览器计算样式序列化出的结果都是rgb(0, 0, 0)这一形式——这也从侧面说明了 hex 与 RGB 在浏览器内部是同一种颜色。

第二层是源码正则匹配,用于确认你确实使用了rgb记法,而非仅靠结果相同蒙混过关:

assert.match(__helpers.removeCssComments(code), /rgb\s*\(\s*0\s*,\s*0\s*,\s*0\s*\)/gi);

这条正则要求代码(在剥离 CSS 注释后)中必须出现形如rgb(0, 0, 0)的写法,且\s*允许数字和逗号周围存在任意空白——也就是说rgb(0,0,0)rgb( 0 , 0 , 0 )都能通过。

进阶:用 RGB 混合颜色

完成本篇挑战后,课程的下一题Use RGB to Mix Colors会把 hex 转 RGB 的换算变成批量练习。其题目要求把一段<style>中的四个 hex 颜色替换为正确的 RGB 值,并给出对照表:

颜色RGB 值
Bluergb(0, 0, 255)
Redrgb(255, 0, 0)
Orchidrgb(218, 112, 214)
Siennargb(160, 82, 45)

其中三个单分量颜色(纯红、纯蓝)正好印证了"单通道拉满"的规律;而 Orchid(兰色)与 Sienna(赭色)则是混合色,每个通道各取 0–255 之间的中间值。该挑战的四个测试用例(对.red-text.orchid-text.sienna-text.blue-text分别断言color的计算值与源码正则)完整地保留在 curriculum/challenges/english/blocks/basic-css/bad82fee1348bd9aedf08721.md 中,可以对照阅读。

小结:CSS 颜色记法速查

结合本挑战文档及其前后的课程材料,可以整理出如下要点:

  • 关键字background-color: black;等命名颜色,适合常见颜色;
  • 十六进制#RRGGBB六位,或#RGB三位缩写(每一位展开为两个相同数字,如#F00#FF0000),每位是 16 进制;
  • RGB 函数rgb(r, g, b),三个参数为 0–255 的十进制整数,顺序固定为红、绿、蓝;
  • 等价关系:一个 hex 分量的两位十六进制数(16² = 256 种)与一个 RGB 分量(0–255 共 256 个值)取值空间完全一致,如#FF= 255、#00= 0;
  • 验证方式:freeCodeCamp 的测试既用getComputedStyle校验浏览器实际渲染出的颜色,又用正则强制要求源码中出现指定记法,两者缺一不可。

理解这套"两种记数法、同一种颜色"的机制后,你在实际开发中选择 hex 还是 RGB 就纯粹是书写习惯与可读性问题,而不是表达能力问题——这正是本篇挑战文档希望传达的核心结论。

【免费下载链接】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 16:17:43

还在敲 ls 和 cd?一组 TUI 工具接管你的终端

还在敲 ls 和 cd&#xff1f;一组 TUI 工具接管你的终端 【免费下载链接】awesome-tuis List of projects that provide terminal user interfaces 项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-tuis SSH 到服务器上时没有图形界面&#xff0c;但命令行不…

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

QQ空间备份开源工具:本地归档日志、说说与相册的工程实践

/* 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 16:17:19

Linux下NVIDIA 610.43.03驱动安装与CUDA环境配置完整指南

/* 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 16:16:03

SpringBoot+微信小程序+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 16:14:12

综合能源系统调度优化:双层鲁棒模型与MOPSO算法实战解析

做综合能源系统调度优化的时间不短了&#xff0c;碰到过不少让同行头疼的问题&#xff0c;但“四重不确定性叠加”这个组合拳&#xff0c;确实是让我印象最深的一次。这个项目的核心是搭建一个双层鲁棒优化模型&#xff0c;把风电、光伏、负荷、电价这四类不确定因素同时纳入考…

作者头像 李华
网站建设 2026/9/7 16:13:52

三大智能音箱大模型升级实测:谁在把简单问题复杂化

三大智能音箱大模型升级实测&#xff1a;谁在把简单问题复杂化随着大语言模型&#xff08;LLM&#xff09;全面接入主流消费级硬件&#xff0c;市面上的主流智能音箱在今年纷纷打出了"全面升级 AI 大脑"的旗号。 厂商宣传片里描绘得天花乱坠&#xff1a;不仅能写诗作…

作者头像 李华