生活分享

实战:制作小网站

从 brief.md 规划并制作 Small Steps 待办网站,完成新增、完成、删除、筛选与本机资料保存。将 HTML、CSS、资料函式、画面事件与测试分开,以 Node 测试和浏览器操作验收,并留下可重新启动与还原的交接纪录。

阅读时间约 20 分钟 · 操作 60 分钟

实作顺序示意图,非产品介面截图。
图片:Mokaair (© Mokaair)
本篇目录
  1. 目标与起点
  2. 步骤 1:准备空白工作区及参考版本
  3. 步骤 2:写下成果与完成条件
  4. 步骤 3:先检查设计,再分段实作
  5. 步骤 4:启动同一资料夹的预览
  6. 步骤 5:逐项验收功能与画面
  7. 步骤 6:资料损坏、修正与交付

目标与起点

本段提到的教学与资源:

步骤 1:准备空白工作区及参考版本

下载 Small Steps 材料,解压缩后将 expected 保留在另一个参考资料夹。这篇在自己新建的 website-lab 从 brief.md 开始,不把 start 或 broken 混入;它们是其他课程的受控练习。expected 有五个程式档,可在卡住时比较完整参考成果。先在工作区终端机确认 node --version,Windows 用 py -3 --version、macOS/Linux 用 python3 --version。若找不到命令,先完成对应安装及。

Windows、macOS、Linux 都以同一份 HTML/CSS/JavaScript 实作;Codex 桌面、CLI 或 IDE 可开启 website-lab。桌面选这个资料夹,CLI 先 cd 进去再输入 codex,IDE 开资料夹后确认带入的专案。手机可追踪电脑任务,但档案与预览仍在执行主机上;手机的 127.0.0.1 不是你的电脑。不要为了手机展示而把练习伺服器公开到网路,响应式检查先在电脑完成。

步骤 2:写下成果与完成条件

将以下内容保存为 brief.md。英文介面文字与共用参考一致,五语教学都用同样按钮名称方便核对。新增后能看见资料就是读取,勾选完成就是更新,因此本例已有 CRUD 的四种动作,不额外加入登入、同步或多人协作。重要的不只是外观好看,还要说明资料坏掉、空白输入与键盘操作会怎样。

website-lab/brief.md · markdown
# Small Steps website brief
Build a local todo website using HTML, CSS and JavaScript only.

## Files
- index.html: accessible page and form
- style.css: responsive layout
- core.mjs: immutable data functions
- app.js: DOM events and localStorage
- core.test.mjs: Node built-in tests

## Data contract
- Task: {id: string, title: string, completed: boolean}
- Trim titles; accept 1 to 100 non-blank characters. IDs must be unique.
- Export addTask(tasks, title, id), toggleTask(tasks, id), removeTask(tasks, id),
  visibleTasks(tasks, filter), decodeTasks(raw), encodeTasks(tasks).
- Filters: all, active, completed. Missing toggle/delete IDs leave data unchanged.
- Store {version: 1, tasks: [...]} under mokaair-codex-todo-v1.
- Invalid stored data must remain untouched; warn and allow temporary work.

## Interface and acceptance
- Labels: New task, Add task, Show, All tasks, Active, Completed, Delete.
- Show active and total counts, including when a filter is selected.
- Add, toggle, delete, filter and reload must work.
- Render task text as text, not HTML.
- Visible keyboard focus; preserve sensible focus after list updates.
- Fit 360px, 390px and 1280px viewports without page overflow.
- Include an About this exercise disclosure with a Reset practice data button.
- Reset practice data removes only this app's storage key.
- No dependencies, account, backend, analytics or external requests.

## Delivery
Explain changes, run node --test core.test.mjs, and list actual browser checks.
Do not claim checks that were not run. Do not publish or deploy.

步骤 3:先检查设计,再分段实作

先用 请 Codex 阅读 brief.md,列出五个档案各自负责什么、资料如何流动、需要哪些验收。确认 core.mjs 不直接存取 DOM,app.js 才处理按钮与储存,没有引进框架或额外服务。若计划缺少资料损坏或还原,直接补进计划;确认后再切换实作。分成资料与测试、画面与互动两段,每段都要求列出实际修改及未验证事项。

第一段实作提示词 · text
Implement core.mjs and core.test.mjs from the approved brief.md contract.
Keep all data operations immutable. Test empty and long titles, Unicode,
duplicate IDs, filters, missing IDs, storage round trips and invalid storage.
Run node --test core.test.mjs and report the command, result and remaining work.
Do not change the brief, publish anything or build the UI in this stage.
第二段实作提示词 · text
Implement index.html, style.css and app.js using the tested core.mjs.
Follow the UI, storage, accessibility and responsive criteria in brief.md.
Do not weaken the data tests to accommodate UI bugs.
Run the data tests again. Give local preview instructions and list which
browser interactions you actually verified and which still need verification.

每段完成后自己开启档案并执行测试。参考版本的 core.test.mjs 有三个顶层测试,里面含多个验收断言;Codex 自己写的测试数量可能不同,不能只比较数字。若功能与测试一起写错,绿色仍会漏掉需求,因此使用下一步的独立画面清单。卡住时只比较 expected 里对应档案,先找差异原因,不整包覆盖自己尚未保存的工作。需要撤回先读 。

步骤 4:启动同一资料夹的预览

Windows PowerShell · powershell
node --test core.test.mjs
py -3 -m http.server 4173 --bind 127.0.0.1
macOS/Linux · sh
node --test core.test.mjs
python3 -m http.server 4173 --bind 127.0.0.1

浏览 http://127.0.0.1:4173,保留这个终端机运行;需要其他命令另开终端机。若 4173 已被使用,先确认是否自己的练习伺服器,不任意终止别人的工作;改用未占用连接埠时,网址与验收纪录一起改。双击 HTML 的 file 入口可能限制 ES module,不适合此材料。画面不是预期版本时,先查服务启动资料夹、网址及 Network 的 app.js 回应,不立刻请 Codex 重写整个网站。

步骤 5:逐项验收功能与画面

先在 About this exercise 展开后,确认资料全是可丢弃的虚构项目,再用 Reset practice data 清除本例专用键。将 Show 选回 All tasks,确认 0 active / 0 total,再新增 Read 与 Build,完成 Read。All tasks 应有两笔、Active 只有 Build、Completed 只有 Read,统计是 1 active / 2 total。重新整理后资料仍在;选回 All tasks 并删除 Read,应剩 Build。以下表格接著测,别只拍一张首页就判定完成。

案例操作预期结果
空白输入三个空格并新增不新增,显示可理解的错误
Unicode新增 写作 ✨原文保留,重新整理不损坏
文字安全新增 下方 HTML 测试字串显示文字,不产生图片元素
键盘Tab、Enter、Space 操作焦点可见,完成/删除后仍可继续
手机宽度360px、390px,长标题内容换行,页面不横向溢出
桌面宽度1280px清单、统计与操作都可读

响应式模式不是实体 iOS/Android 实测;附图是已存在的 Windows/Edge 参考版,不是你这次生成结果的证明。

文字安全测试:作为待办名称输入 · text
<img src=x>

步骤 6:资料损坏、修正与交付

进阶验收只在本机虚构练习页操作:先保存需要的测试纪录,开启浏览器开发工具的 Storage/Application → Local Storage,选目前 127.0.0.1 与连接埠。找到 mokaair-codex-todo-v1,把值改成 bad-json,重新整理。应显示资料无法读取的警告;新增暂存项目后检查储存值仍是 bad-json,不能默默覆盖它。完成后用 Reset practice data 只移除这一键,再新增一笔并重整,确认恢复正常保存。不要对其他网站资料执行清空全部。

交接前从清空的虚构资料开始,再走一次下方顺序,将「预期」与「实际」分栏填写。即使读者使用参考版本,也要自行观察自己的页面。筛选时统计仍来自全部任务,这能抓到只看目前画面笔数的错误;未能启动预览的项目留未验证,不能把期望数字填成实测。

website-lab/handoff.md:预期不是实测结果 · markdown
# Website handoff
Root / source version:
Node test command / exit status:
Browser / version / viewport / date:

| Step | Expected active / total | Observed |
| --- | --- | --- |
| Reset fictional practice data; select All tasks | 0 / 0 | |
| Add Read, then Build | 2 / 2 | |
| Complete Read | 1 / 2 | |
| Select Active; only Build visible | 1 / 2 | |
| Select Completed; only Read visible | 1 / 2 | |
| Select All tasks, delete Read | 1 / 1 | |

Input/storage recovery evidence:
Keyboard and narrow-layout evidence:
Actual changed files:
Unverified requirements:
How to restart / restore:

验收失败时回报确切输入、操作、预期与实际值,请 Codex 只修对应层并重跑相关检查,参考 。交付时保留 brief、五个档案、Node 测试纪录、桌面及窄版画面、未实测平台与还原方法。伺服器用原终端机 Ctrl+C 停止。最后请 Codex 用说明如何重新启动;若要改用框架、加入后端或正式上线,另开明确需求,不能把本机画面可见视为已部署。

31. 实战:制作小网站 — 实作顺序示意图,非产品介面截图。 Brief → HTML / CSS → Browser checks
31. 实战:制作小网站 — 实作顺序示意图,非产品介面截图。 Brief → HTML / CSS → Browser checks · 图片:Mokaair (© Mokaair)
阅读完整文字说明

Brief to HTML / CSS to Browser checks

待办练习网站:Build 已完成,Read the AGENTS.md rules 尚未完成,共两项任务。
完整参考版的实际浏览器画面,供修改前比对。Windows / Edge 153.0.4234.32,2026-09-14;使用虚构数据。390px 为响应式窗口,非实体手机。这不是 Codex 桌面界面截图。 · 图片:Mokaair (© Mokaair)
待办练习网站:Build 已完成,Read the AGENTS.md rules 尚未完成,共两项任务。
完整参考版的实际浏览器画面,供修改前比对。Windows / Edge 153.0.4234.32,2026-09-14;使用虚构数据。1280px 为响应式窗口,非实体手机。这不是 Codex 桌面界面截图。 · 图片:Mokaair (© Mokaair)

回总目录

  • 生活分享

    Codex 学习中心:完整教程目录

    从安装、第一个任务到 MD 规则与进阶集成,规划 60 篇 Codex 教程、十个单元。按程度、平台、需求或命令搜索下一篇;尚未公开的教程会标示状态,方便安排学习路线。

  • 生活分享

    Worktree 与多任务隔离

    Worktree 让同一个 Git 程式库有不同的工作目录,各自承接不同分支。它适合让两项工作分开改档,但资料库、连接埠与外部服务仍可能共用,不能把档案隔离当成所有资源隔离。

  • 生活分享

    用量与效率:减少重工

    记录任务条件、模型选项、时间与成果,找出能减少无效重试和过多上下文的调整。

  • 生活分享

    先读懂一个既有专案

    用唯读流程找到启动点、资料流与测试,产生有档案依据的专案地图。

最新旅游情报攻略

资料来源

生活分享