拓冰建站拓冰建站
首页 / 资讯中心 / 正文

freeCodeCamp 课程实战:在 Bootstrap 按钮中集成 Font Awesome 图标(含挑战源文件逐段拆解)

freeCodeCamp 课程实战在 Bootstrap 按钮中集成 Font Awesome 图标含挑战源文件逐段拆解【免费下载链接】freeCodeCampfreeCodeCamp.orgs open-source codebase and curriculum. Learn math, programming, and computer science for free.项目地址: https://gitcode.com/GitHub_Trending/fr/freeCodeCamp本指南围绕 freeCodeCamp 开源课程中「Front End Development Libraries / Bootstrap」模块的经典 HTML 挑战Add Font Awesome Icons to our Buttons展开从图标字体原理讲到 CDN 引入、i/span语义辨析、按钮内嵌图标的具体写法并结合挑战源文件Markdown 前端 YAML front matter 自动化断言逐项拆解验证逻辑。读完你将同时掌握该课程挑战的源码组织格式以及在自己的页面里为 Bootstrap 按钮添加 Font Awesome 图标的完整实操路径。挑战文档在仓库中的位置本挑战的源文件位于 curriculum/challenges/english/blocks/bootstrap/bad87fee1348bd9aedd08845.md标题为Add Font Awesome Icons to our Buttons。它是 CatPhotoApp 课程项目内一系列递进练习中的一环先学会创建按钮、为按钮配色再为按钮添加图标字体。所属模块元数据见 curriculum/structure/blocks/bootstrap.json其中按顺序记录了该模块全部挑战如Create a Bootstrap Button、Call out Optional Actions with btn-info、Warn Your Users of a Dangerous Action with btn-danger等该模块归属于front-end-development-librariesSuperBlock见 curriculum/structure/superblocks/front-end-development-libraries.json紧接本挑战的下一课是Add Font Awesome Icons to all of our Buttonscurriculum/challenges/english/blocks/bootstrap/bad87fee1348bd9aedc08845.md它为 Info / Delete 两个按钮也补上图标与本课形成「先一个、后全部」的递进关系。源文件 front matter 字段速读文件顶部由 YAML front matter 定义挑战元数据字段值含义idbad87fee1348bd9aedd08845全局唯一挑战 ID与bootstrap.json中challengeOrder的 id 对应titleAdd Font Awesome Icons to our Buttons挑战显示标题challengeType0表示经典classicHTML 练习见 packages/shared/src/config/challenge-types.ts其中html 0且[html]: classicforumTopicId16638关联论坛讨论主题requiredFont Awesome 5.8.1all.cssraw: true需要预加载到页面 head 的外部资源dashedNameadd-font-awesome-icons-to-our-buttonsURL 友好的 slug 名其中required声明了挑战运行前必须注入的样式表。课程构建层会把模块级 meta如 Bootstrap 3.3.7 的bootstrap.css与本挑战自身的required合并后统一注入这一合并逻辑可以在 curriculum/src/build-superblock.tschallenge.required (meta.required || []).concat(...)中看到。Font Awesome 是什么图标即字体本挑战 description 部分给出了核心背景知识Font Awesome 是一个方便的图标库图标既可以作为 webfontWeb 字体也可以是矢量图形SVG。图标在使用时和字体一样可以用像素为单位指定尺寸会继承其父级 HTML 元素的字体大小font-size因此图标能随上下文文字大小自动适配通过font-family/::before内容机制把字形映射到字符码位从而以字体方式渲染矢量图形天然可缩放、可着色。这种「图标当字体」的模型使其有别于早年切雪碧图的方案放大不模糊、换色只需改color且与排版对齐规则vertical-align、line-height兼容。通过 CDN 引入 Font Awesomedescription 中给出的引入方式是把link放进页面head顶部link relstylesheet hrefhttps://use.fontawesome.com/releases/v5.8.1/css/all.css integritysha384-50oBUHEmvpQ1lW4y57PTFmhCaXp0ML5d60M1M1uH2nqUivzIebhndOJK28anvf crossoriginanonymous两个属性值得注意integritySRISubresource Integrity哈希浏览器会校验所加载的 CSS 内容与哈希一致防止 CDN 被篡改crossoriginanonymous以匿名 CORS 模式请求资源这是 SRI 生效的前提。本挑战在required字段声明了该资源且raw: true因此课程页面已在后台自动把它加入description 中明确写到 weve already added it for you to this page behind the scenes。学习者在真实项目中复现时只需把上面这行link放在页首即可。用 i 还是 span 承载图标在 HTML4 时代i元素的本职是把文字渲染为斜体italic而在 HTML5 语义下i被重新定义为「以另一种语气或情绪呈现的文本」——所以它如今大量被用于承载图标字形。本挑战指出Theielement was originally used to make other elements italic, but is now commonly used for icons.图标类名会直接打在i上例如 description 中的例子i classfas fa-info-circle/i类名两部分含义fasFont Awesome 5 的 Solid 风格字体族简写FA5 中 Free 图标按fas、far、fal、fab区分风格/品牌fa-info-circle具体图标名信息圆圈。span同样可用——description 和后续提示中都强调 thespanelement is also acceptable for use with icons。原因在于图标类本质上是font-family 伪元素内容规则并不依赖元素本身的默认样式行内元素i与span都能承载。所以验证时两种写法都算通过详见后文 hints 剖析。本课任务把 thumbs-up 放进 Like 按钮任务说明--instructions-- 部分给出明确要求Use Font Awesome to add athumbs-upicon to your like button by giving it anielement with the classesfasandfa-thumbs-up. Make sure to keep the textLikenext to the icon.即在 Like点赞按钮里新增一个i元素类名必须是fas fa-thumbs-up且按钮里的文本Like必须保留在图标旁边。初始种子代码--seed-- 的--seed-contents--提供了一张完整的 CatPhotoApp 页面。去除首部 Lobster 字体与thick-green-border圆框样式后关键按钮区域长这样div classrow div classcol-xs-4 button classbtn btn-block btn-primaryLike/button /div div classcol-xs-4 button classbtn btn-block btn-infoInfo/button /div div classcol-xs-4 button classbtn btn-block btn-dangerDelete/button /div /divbtnBootstrap 基础按钮类btn-primary为其着上主题色btn-block按钮占满父容器col-xs-4整行宽度三者被放进rowcol-xs-4网格在小屏及以上每列各占 1/3。参考答案的改动--solutions-- 显示唯一改动位于第一个按钮文本前插入图标元素button classbtn btn-block btn-primaryi classfas fa-thumbs-up/i Like/button其余行div classcontainer-fluid、两张猫咪图片、thick-green-border、底部的 radio/checkbox 与表单原样保留。这就是本挑战的全部改动范围——只新增一个自闭合的图标元素并保留相邻文本。i是行内元素默认排在文字Like之前由于二者同处一个button图标会继承按钮的字体大小与颜色FA 图标继承父级字号视觉上与文字自然对齐。自动化验证hints逐条拆解freeCodeCamp 每个 classic 挑战的 --hints-- 都是真实的浏览器端断言测试用 Chai 风格assert检查 DOM/源码。本挑战共有 4 条逐一解读Hint 1 —— 元素与类名精确匹配assert.isTrue(document.querySelector(i)?.classList?.value fas fa-thumbs-up || document.querySelector(span)?.classList?.value fas fa-thumbs-up);要求存在一个i或span元素其 class 属性值恰好为fas fa-thumbs-up。注意是严格全等多了其他类名也会失败——考验学习者只加规定的两个类。Hint 2 —— 图标必须位于 Like 按钮内const iconTextContent document.querySelector(i.fa-thumbs-up)?.parentNode?.textContent; const spanTextContent document.querySelector(span.fa-thumbs-up)?.parentNode?.textContent; assert.isTrue( (iconTextContent?.match(/Like/gi) document.querySelector(.btn-primary i) document.querySelector(.fas.fa-thumbs-up)) || (spanTextContent?.match(/Like/gi) document.querySelector(.btn-primary span) document.querySelector(.fas.fa-thumbs-up)));双重校验图标父节点的文本里要能匹配Like忽略大小写且该图标必须正是.btn-primary的直接子元素子选择器保证是直接后代而非深层嵌套。Hint 3 —— 必须嵌套在 button 元素内const button document.querySelector(button); const i button?.querySelectorAll(i); const span button?.querySelectorAll(span); assert(i.length 0 || span.length 0);从页面第一个button内向下查找i或span至少要存在一个——防止图标被放到按钮之外。Hint 4 —— 必须有闭合标签且顺序正确assert.match(code, /(\/i|\/span)\s*Like\s*\/button/g);对源码字符串做正则在/i或/span之后、/button之前紧跟着Like文本。这保证图标闭合标签紧邻文字、文字紧邻按钮闭合标签即i classfas fa-thumbs-up/i Like的标准排列。这条 hint 使用了原文档中的源文件行号对应代码属于 freeCodeCamp 对 HTML 挑战常用的code正则校验手段。综合四条 hint可以得出该任务的正确姿势就是参考答案所展示的结构button classbtn btn-block btn-primaryi classfas fa-thumbs-up/i Like/button。把它扩展到你自己的项目如果脱离课程环境在自己的 Bootstrap 页面实现同样效果步骤可以归纳为在head顶部加入 Font Awesome 5.8.1 的 CDNlink即本文第二节代码用 Bootstrapbtn btn-primary或其他btn-*配色类创建按钮在按钮内、文字前插入i classfas fa-图标名/i保持图标类名只有fasfa-图标名两个并把文字留在图标旁。图标名可以从 Font Awesome 文档中按需取用本模块下一课 Add Font Awesome Icons to all of our Buttons 就紧接着要求给 Info 按钮加fa-info-circle、给 Delete 按钮加fa-trash是检验是否真正掌握本课写法的理想后续练习。小结通过bad87fee1348bd9aedd08845.md这一个挑战源文件可以同时学会三件事知识点Font Awesome 图标即字体的特性、CDN SRI 引入方式、fas/fa-*类名体系写代码用i或span把图标嵌入 Bootstrap 按钮并保留相邻文本读课程源码freeCodeCamp 用 front matter --description/--instructions/--hints/--seed/--solutions--分节存储挑战hints 里的断言即运行时的评分器需要精确匹配类名、DOM 嵌套层级与标签闭合顺序。无论你是想重温 Bootstrap Font Awesome 的基础写法还是打算理解 freeCodeCamp 课程文件的组织与校验机制把上面这份源文件与本文对照阅读都能获得一次完整、可验证的学习闭环。【免费下载链接】freeCodeCampfreeCodeCamp.orgs open-source codebase and curriculum. Learn math, programming, and computer science for free.项目地址: https://gitcode.com/GitHub_Trending/fr/freeCodeCamp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门