原生HTML购物车结构需语义清晰、留好JS钩子:用包裹商品项,每项含唯一data-item-id;数量用;删除按钮用;结算区用包裹,总价用,优惠用,提交用;商品用,图片带alt,价格统一;class名遵循BEM规范,小写中划线。

怎么用原生 HTML 搭出能跑的购物车结构
纯 HTML 无法实现增删改、实时计算或持久化,但可以构建语义清晰、可访问性强、便于后续 JS 注入逻辑的骨架。关键不是“看起来像”,而是“结构对、留好钩子”。
-
包裹商品列表,每项用明确语义,方便屏幕阅读器和 JS 定位 - 每个商品块必须有唯一
data-item-id属性,比如data-item-id="prod-1024",JS 后续操作依赖它,别用 class 或 text 内容来识别 - 数量输入框强制用
,避免用户输负数或字母,也省去 JS 校验第一步 - 删除按钮统一用
,不写onclick,把交互逻辑全留给外部 JS
结算区域为什么不能只靠 堆出来结算区不是装饰性模块,它承载价格汇总、优惠判断、提交入口三重职责,HTML 结构直接影响 JS 取值逻辑和无障碍体验。
- 总价必须用
¥0.00 而非 ,ID 是 JS 快速定位更新的最小成本方式
- 优惠信息(如“满 99 减 10”)建议用
- 优惠
- -¥10.00
,语义化且支持 JS 精准替换 内容
- 提交按钮必须是
并放在 内,哪怕后端暂不接管——否则回车无法触发,移动端键盘“完成”键失效
- 禁用状态要靠
disabled 属性控制,而不是仅靠 CSS 加灰,否则键盘 Tab 仍能聚焦、屏幕阅读器无法感知
商品列表里图片、标题、价格怎么组织才不翻车
看似简单,但结构错位会导致 JS 批量操作时取错节点、CSS 样式穿透失控、甚至影响 SEO。
- 每件商品用
包裹,它是 HTML5 中最贴近“独立内容单元”的语义标签,比 更可靠
- 图片必须带
alt,即使只是“小米耳机 黑色”,空 alt="" 会跳过,纯占位图也要写描述性文字
- 价格统一用
¥199.00,不要拆成“¥”和数字两部分,否则 JS 计算时需额外拼接或正则提取
- 库存状态(如“仅剩 3 件”)建议用
而非
,避免被误读为主要内容,也方便 CSS 控制字体大小
为什么 class 名不能叫 “cart-box” 或 “item-wrap”
这类泛化命名在多人协作或后期维护时会迅速失效:没人知道 “box” 到底包了什么,“wrap” 是包裹样式还是逻辑容器。
- 用功能导向命名:
cart-item、cart-item__quantity、cart-summary__total,双下划线表示后代关系,BEM 风格虽老但极其耐读
- 避免用状态命名如
is-disabled,状态该由 JS 动态加 class 控制,HTML 里只保留基础结构类
- 如果项目用 CSS-in-JS 或 Shadow DOM,class 名可更简短,但前提是团队明确约束——否则默认按 BEM 处理
- 所有 class 名一律小写+中划线,不出现大写字母或下划线,防止 Windows 文件系统或某些构建工具大小写误判
真正难的不是搭出这个结构,而是让每一处 data- 属性、id、class 和语义标签都经得起 JS 批量操作、屏幕阅读器逐行朗读、以及三个月后你自己再看时不用翻注释猜意图。
结算区不是装饰性模块,它承载价格汇总、优惠判断、提交入口三重职责,HTML 结构直接影响 JS 取值逻辑和无障碍体验。
- 总价必须用
¥0.00而非,ID 是 JS 快速定位更新的最小成本方式- 优惠信息(如“满 99 减 10”)建议用
,语义化且支持 JS 精准替换- 优惠
- -¥10.00
内容- 提交按钮必须是
并放在内,哪怕后端暂不接管——否则回车无法触发,移动端键盘“完成”键失效- 禁用状态要靠
disabled属性控制,而不是仅靠 CSS 加灰,否则键盘 Tab 仍能聚焦、屏幕阅读器无法感知商品列表里图片、标题、价格怎么组织才不翻车
看似简单,但结构错位会导致 JS 批量操作时取错节点、CSS 样式穿透失控、甚至影响 SEO。
- 每件商品用
包裹,它是 HTML5 中最贴近“独立内容单元”的语义标签,比更可靠- 图片必须带
alt,即使只是“小米耳机 黑色”,空alt=""会跳过,纯占位图也要写描述性文字- 价格统一用
¥199.00,不要拆成“¥”和数字两部分,否则 JS 计算时需额外拼接或正则提取- 库存状态(如“仅剩 3 件”)建议用
而非,避免被误读为主要内容,也方便 CSS 控制字体大小为什么 class 名不能叫 “cart-box” 或 “item-wrap”
这类泛化命名在多人协作或后期维护时会迅速失效:没人知道 “box” 到底包了什么,“wrap” 是包裹样式还是逻辑容器。
- 用功能导向命名:
cart-item、cart-item__quantity、cart-summary__total,双下划线表示后代关系,BEM 风格虽老但极其耐读 - 避免用状态命名如
is-disabled,状态该由 JS 动态加 class 控制,HTML 里只保留基础结构类 - 如果项目用 CSS-in-JS 或 Shadow DOM,class 名可更简短,但前提是团队明确约束——否则默认按 BEM 处理
- 所有 class 名一律小写+中划线,不出现大写字母或下划线,防止 Windows 文件系统或某些构建工具大小写误判
真正难的不是搭出这个结构,而是让每一处
data-属性、id、class和语义标签都经得起 JS 批量操作、屏幕阅读器逐行朗读、以及三个月后你自己再看时不用翻注释猜意图。 - 图片必须带
- 优惠信息(如“满 99 减 10”)建议用
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











