freeCodeCamp 课程源码解析:用嵌套 CSS Grid 构建「网格中网格」布局

发布时间:2026/9/8 16:39:10

freeCodeCamp 课程源码解析:用嵌套 CSS Grid 构建「网格中网格」布局 freeCodeCamp 课程源码解析用嵌套 CSS Grid 构建「网格中网格」布局【免费下载链接】freeCodeCampfreeCodeCamp.orgs open-source codebase and curriculum. Learn math, programming, and computer science for free.项目地址: https://gitcode.com/GitHub_Trending/fr/freeCodeCamp本篇以 freeCodeCamp 响应式设计课程中「Create Grids within Grids在网格中创建网格」这一练习challenge为蓝本完整继承其种子代码、操作步骤与验证断言并结合同一课程块block中的前置练习与课程结构文件讲清 CSS Grid 嵌套布局的工作原理把任意网格项grid item再声明为 grid 容器即可得到层级化、可独立控制子项排布的多层网格。读完后你将掌握嵌套网格的触发条件只作用于直接子元素、display: grid与grid-template-columns的配合用法以及如何用fr、auto等网格单位混合定义列宽。核心概念嵌套网格只影响直接子元素freeCodeCamp 课程中该练习的原始描述见 Create Grids within Grids点出了嵌套网格的本质Turning an element into a grid only affects the behavior of its direct descendants. So by turning a direct descendant into a grid, you have a grid within a grid.把任一元素设为网格容器后CSS Grid 的排版规则只会作用于它的直接子元素更深层的后代不受影响。反之当你把网格容器的某个直接子元素grid item也设置display: grid时该元素就成了一个独立的内层网格容器它与自己的子元素构成一套完整的新网格——这就是「网格中的网格」。这一特性对应到页面结构上非常直观外层.container负责页面骨架广告栏、页头、内容区、页脚而内容区.item3内部的段落排版由它自己的网格规则决定两层布局互不干扰、各自独立调整。课程定位css-grid 块中的最后一道练习从课程结构文件 css-grid.json 可以看到css-grid块按challengeOrder顺序编排了 22 个练习从Create Your First CSS Grid开始依次覆盖列、行、间隙、对齐、grid-template-areas区域模板、repeat/minmax/auto-fill等函数最终落在本练习「Create Grids within Grids」id:5a94fe8569fb03452672e464。该块隶属于 responsive-web-design.json 超级块即 freeCodeCamp 响应式设计认证课程的一部分。理解这一编排有助于把握本练习为何是整块的收尾前面各练习的知识点网格单位、区域模板、grid-area定位在这里全部汇聚用于构建一个真实感更强的多列页面骨架。完整种子代码一个带区域模板的外层网格练习的种子代码seed定义了一个 3 行 2 列的页面骨架网格。完整代码如下其中.item3内部预留了注释标记的改动区域style .container { font-size: 1.5em; min-height: 300px; width: 100%; background: LightGray; display: grid; grid-template-columns: auto 1fr; grid-template-rows: auto 1fr auto; grid-gap: 10px; grid-template-areas: advert header advert content advert footer; } .item1 { background: LightSkyBlue; grid-area: header; } .item2 { background: LightSalmon; grid-area: advert; } .item3 { background: PaleTurquoise; grid-area: content; /* Only change code below this line */ /* Only change code above this line */ } .item4 { background: lightpink; grid-area: footer; } .itemOne { background: PaleGreen; } .itemTwo { background: BlanchedAlmond; } /style div classcontainer div classitem1header/div div classitem2advert/div div classitem3 div classitemOneparagraph1/div div classitemTwoparagraph2/div /div div classitem4footer/div /div这段种子代码中蕴含了三个前置练习的知识点建议对照原文件阅读区域模板grid-template-areas字符串模板advert header / advert content / advert footer把网格划成header、advert、content、footer四个命名区域其中advert跨三行竖贯左侧。每个单词代表一个单元格每对引号代表一行——这与前置练习 Divide the Grid Into an Area Template 的讲解一致。grid-area定位网格项.item1到.item4各自通过grid-area: header等声明进入对应命名区域见前置练习 Place Items in Grid Areas Using the grid-area Property。网格单位fr与autogrid-template-columns: auto 1fr表示第一列宽随内容自适应auto剩余空间全部分给第二列1frgrid-template-rows: auto 1fr auto同理定义了三行。这些单位的语义fr为可用空间的一份、auto由内容撑开、%相对容器在 Use CSS Grid units to Change the Size of Columns and Rows 中有完整说明。值得注意的是.itemOne和.itemTwo两个子元素目前只有背景色没有任何网格规则——它们是内层网格的「占位项」等待.item3成为网格容器后才被排版。任务把item3变成auto 1fr的两列网格课程给出的原始指令是Turn the element with theitem3class into a grid with two columns with a width ofautoand1frusingdisplayandgrid-template-columns.即使用display和grid-template-columns两个属性把.item3变成一个两列网格第一列宽auto随子项内容宽度第二列宽1fr占满内容区剩余空间。标准答案只需在.item3的改动区域内补充两行声明.item3 { grid-template-columns: auto 1fr; display: grid; }两行声明的分工可以拆开看display: grid是触发嵌套的关键。没有这一行.item3只是外层网格的一个普通项内部的.itemOne、.itemTwo会以普通的块级流纵向堆叠。grid-template-columns: auto 1fr定义内层网格的列模板让两个段落子项各占一列第一列被paragraph1的文字宽度撑开第二列吃掉剩余宽度。由于声明只写在.item3上外层.container的三行两列布局完全不受影响——这正是「网格只作用于直接子元素」这一规则的实际体现。验证方式正则断言检查声明是否写入正确的选择器该练习属于challengeType: 0自由代码编辑型的练习类型freeCodeCamp 的课程数据格式用一组正则断言来验证学员代码是否满足要求。本练习的两条断言引自原文档--hints--部分分别检查assert.match( code, /.item3\s*?{[\s\S]*grid-template-columns\s*?:\s*?auto\s*?1fr\s*?;[\s\S]*}/gi );assert.match(code, /.item3\s*?{[\s\S]*display\s*?:\s*?grid\s*?;[\s\S]*}/gi);从正则结构可以看出课程对答案的判定标准两条声明必须出现在.item3选择器块内部正则从.item3 {开始在其闭花括号范围内匹配且grid-template-columns的值严格为auto 1fr、display的值严格为grid。这种「选择器 块内声明」的匹配方式也间接提醒了嵌套网格的常见错误把display: grid误写到外层.container或子项.itemOne上是通不过验证的因为网格声明必须落在作为嵌套起点的那个直接子元素上。延伸从嵌套网格到响应式布局嵌套网格解决的是「局部排版自治」问题而 freeCodeCamp 的 css-grid 块中另一个练习 Use Media Queries to Create Responsive Layouts 则处理容器尺寸变化时的整体重排。二者结合正是本练习骨架的典型应用场景外层auto 1fr让广告栏窄、内容区宽内层auto 1fr让段落自适应文字当视口变窄时可以通过媒体查询改写内层的grid-template-columns例如改成单列1fr而不必触碰外层骨架。这种「每层网格各自定义列模板、各自响应断点」的分层思路是 CSS Grid 构建复杂页面如课程中出现的杂志版式、报纸版式布局练习见 css-grid 超级块结构 中的workshop-magazine与lab-newspaper-layout的基础模式。小结嵌套条件元素成为网格容器后布局规则仅作用于其直接子元素把某个 grid item 再声明为display: grid即得到网格中网格。本题解法在.item3中加display: grid;与grid-template-columns: auto 1fr;使其内部paragraph1、paragraph2两子项形成两列内层网格。单位语义auto由内容决定宽度1fr占满剩余可用空间两者混合使用是「固定语义列 弹性内容列」的常见搭配。验证机制课程用正则断言确认两条声明写在.item3选择器块内体现了声明作用域对嵌套网格正确性的关键性。完整原始题目、种子代码与参考答案见 curriculum/challenges/english/blocks/css-grid/5a94fe8569fb03452672e464.md练习顺序见 curriculum/structure/blocks/css-grid.json。【免费下载链接】freeCodeCampfreeCodeCamp.orgs open-source codebase and curriculum. Learn math, programming, and computer science for free.项目地址: https://gitcode.com/GitHub_Trending/fr/freeCodeCamp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/8 16:39:10

humanizer skill实战:让AI文字去掉“机器味”,像人一样说话

说实话,第一次看到“humanizer”这个 title 的时候,我以为是某个 GitHub 上的文本处理库,后来发现大家把它当成一种“技能”在讨论,也就是热词里说的 humanizer skill。这个词在国内内容圈里被翻译成“人性化改写”“去机器味”“…

2026/9/8 16:39:10

长序列 Mamba 多卡训练,算力和显存怎么同时省

长序列 Mamba 多卡训练,算力和显存怎么同时省 【免费下载链接】mamba Mamba SSM architecture 项目地址: https://gitcode.com/GitHub_Trending/ma/mamba 训练 Mamba 这类状态空间模型时,矛盾有两个:一是序列维度上状态一步步递推&…

2026/9/8 17:44:20

嵌入式设备安全升级:从裸奔到先御OS的完整防护方案

这两年我经常跟做嵌入式产品的朋友聊一句话:“你的设备是不是还在裸奔?”所谓裸奔,不是说外壳没装好,而是设备里跑的固件没有任何系统级防护——没有安全启动、没有权限隔离、没有可信执行环境、也没有审计日志。攻击者只要从网络…

2026/9/8 17:44:20

15分钟手把手构建IntelliJ IDEA:摸透它的模块化骨架

15分钟手把手构建IntelliJ IDEA:摸透它的模块化骨架 【免费下载链接】intellij-community IntelliJ IDEA & IntelliJ Platform 项目地址: https://gitcode.com/GitHub_Trending/in/intellij-community IntelliJ IDEA 的社区版源码,本质是一台…

2026/9/8 17:44:20

从AlexNet到深度卷积网络:深度学习与CNN架构演进实践指南

深度学习的兴起:从 AlexNet 到深度卷积网络的革命 2012年之前,如果有人跟我说“用机器识别一张图里的猫”,我的第一反应是“这东西能用,但也就那样”。那时候主流的做法还是手工设计特征,HOG、SIFT、LBP轮着上&#xf…

2026/9/8 17:39:18

Pelco-D云台模拟器:用pytest与虚拟串口做三层集成测试

做Pelco KBD300A模拟器做到第19个版本,我最大的感受是:单体单测写得再漂亮,只要serial、protocol、macro这三层没有在同一套测试里真正跑通过一次,你就不敢说自己做好了“集成”。这一版我干脆把测试体系切到pytest,用…

2026/9/8 7:15:10

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/8 7:15:15

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/8 7:15:10

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/8 0:01:49

踩多轮坑才跑通|OpenClaw 3.1.0 双平台本地 AI 自动化搭建实操实录

🔹 工具简述 OpenClaw 是一款备受开发者与办公人群青睐的开源本地智能工具,凭借离线本地运行、可视化图形面板、全流程自主任务处理三大核心特点,积累了众多忠实用户。与普通对话类 AI 产品不同,它能够直接调用电脑的软硬件操作权…

2026/9/8 0:01:50

拒绝复杂命令行,Hermes Agent 一键包快速解锁智能办公能力

🔍前言 不少想要体验 Hermes Agent 办公能力的使用者,往往会被复杂的环境配置拦住使用脚步。手动下载匹配依赖、反复调整系统目录、处理命令行持续报错、修复权限异常、补全丢失核心文件等一系列操作,对普通使用者而言门槛较高,很…

2026/9/7 16:23:03

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/7 22:46:00

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/7 22:45:59

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码