HTML5规范要求以开头,严格遵循语义化结构(如唯一、需标题)、正确设置lang和charset,script需defer/async,fetch须处理加载/错误/空数据态,并用本地服务器替代file://开发。

用 html 文件开头就写对,别等浏览器报错才反应过来
HTML5 不是“新语言”,而是你手头那个 html 文件的规范升级——关键在文档类型声明和结构约束。漏掉 或乱套 /,Chrome 可能不报错,但 Safari 会静默降级到怪异模式,表单验证、flex 布局甚至 localStorage 行为都可能出偏。
- 必须以
开头,独占第一行,前面不能有空格或注释 -
的lang属性不是可选的:它影响屏幕阅读器、搜索引擎分词,也关系到某些 CSS 伪类(如:lang())是否生效 -
要放在最靠前位置,否则中文可能乱码,且部分旧版 IE 会忽略后续meta - 别把
直接塞里又没加defer或async——它会阻塞 HTML 解析,白屏时间拉长
语义化标签不是“加分项”,是避免 JS 拼命补救的底线
用一堆 静态 HTML 能直接渲染,但现代网页常要从 API 拉数据再填进 双击打开 立即学习“前端免费学习笔记(深入)”; 真正麻烦的从来不是“怎么写出完整网页”,而是当 prefers-reduced-motion 做动效降级时发现根本没法精准选中“主内容区”。
、、、、、 是互斥容器,一个页面只该有一个 ,多个 可以并列 不等于“一个区块”,它必须有标题(~),否则语义断裂;纯样式分隔请继续用 ,for 值要严格匹配 id;用 包裹写法虽可行,但动态插入 input 时容易漏绑定
fetch 加 async/await 读数据,但别忘了用户正在看空白页。这时候光写对 fetch 不够,得处理加载态、错误态、空数据态——否则用户刷开页面,看到三秒白屏+突然跳内容,体验就是“卡”。
,而不是等 JS 执行完才 appendfetch 默认不带 cookie,登录态接口要加 { credentials: 'include' },否则 401 不是你代码写的错,是浏览器默默拦了await fetch(url) 成功只代表网络通,不代表 HTTP 状态码是 200:response.ok 或 response.status === 200 必须显式判断response.json())会抛异常,得包在 try/catch 里,否则整个脚本中断,页面交互失灵本地测试就用
file://?跨域和缓存会让你怀疑人生index.html 看起来最省事,但 fetch 请求本地 JSON 文件会触发 CORS 错误,localStorage 在某些浏览器里会被禁用,连 @import CSS 都可能因 MIME 类型被拒——这不是你代码问题,是协议限制。
npx serve、python3 -m http.server
--unsafely-treat-insecure-origin-as-secure="http://localhost:8000" --user-data-dir=/tmp/chrome-test 可临时绕过 HTTPS 限制(仅调试),但别写进文档 默认不校验内容哈希,加个 ?v=1.0.1 或用 cache-control: no-cache 响应头更可靠fetch 返回空数组、localStorage 突然变 null、或者盲人用户反馈“所有按钮都叫‘点击这里’”时,你有没有在第一步就埋好定位线索。










