先说结论:制作价格对比表时,直接使用 即可满足需求。无需依赖任何框架,更不必借助 JavaScript 拼接结构——关键在于正确划分语义层次、精细控制 CSS,并搭配一套可靠的移动端适配逻辑。
价格对比表为何必须用 ,而非 div 或 grid
价格对比表本质上是一张二维网格:行代表参数,列代表版本,每个单元格对应参数在不同版本下的具体取值。这正是 最擅长的场景。
浏览器原生支持行列语义,屏幕阅读器可正确解析,打印或导出 PDF 时不会出现布局错乱,就连 Safari 15 以下的老版本也能稳定呈现。反观另外两种常见方案,问题较为突出:
- 使用
div 横向排列套餐?小屏幕换行后,“基础版”的“API 限额”会与“企业版”的“SLA 等级”错位,导致视觉与逻辑混乱。
- 使用
display: grid 固定 grid-template-areas?每新增一个版本就需要重写所有区域定义,维护成本大幅增加。
- 另一个易忽略的细节:若不设置
min-width: 0 和 overflow: hidden,长文本(如“含 24 小时人工客服 + SLA 99.9%”)会直接撑破整列宽度。
因此,回归 是最稳妥的选择。
与 | 的正确写法
表头不仅是装饰,更是辅助技术读取和 CSS 精准定位的基础,务必认真对待。
第一行必须放入 ,每个版本名称使用 ;第一列的每个参数名(如“月费”“并发数”)则使用 | 。
两种常见错误需要避免:
- 错误写法:
| 基础版 | 专业版 | → 屏幕阅读器会将其视为普通数据,无法识别为列标题。
- 正确写法:
| 基础版 | ,后续 CSS 可通过 .plan-basic ~ td:nth-child(2) 精确控制整列样式。
- 另一个细节:若某个版本临时缺少数据(例如 v2.3 尚未上线“自定义域名”),对应
应填入 - 或 待上线,切勿留空或直接删除单元格。
移动端表格不横向滚动的解决方案
很多人遇到移动端表格时,第一反应是添加 overflow-x: auto,期望用户手动拖动。但实际体验不佳:用户需手动拖拽,容易误触缩放,并非理想方案。
真正的解决方法是利用媒体查询主动重构 DOM 渲染顺序——在小屏幕下将“横向对比”转为“纵向卡片”。具体做法如下:
价格数字对齐与差异高亮的实操要点
用户需要快速对比哪个版本更贵或更便宜,因此数字右对齐、小数点上下对齐、货币符号位置统一,这些细节直接影响页面可信度。
几个实操要点:
- 价格列统一使用
| 99 | ,CSS 中设置 .amount { font-feature-settings: "tnum"; } 强制等宽数字。
- 版本差异高亮通过 class 控制:
| +12% | ,CSS 定义 .diff-up { color: #e74c3c; },后续如需添加暗色模式,只需修改此处。
- 一个容易忽略的陷阱:避免使用
colspan 合并价格单元格——它会扰乱 nth-child() 定位逻辑,导致高亮错列。
最后,一个最容易被忽视的问题:数据契约对齐。新版增加了 updated_at 字段,旧模板直接写 data.updated_at 会报错 Cannot read property 'updated_at' of undefined。模板中务必写成 data.updated_at '—',或抽成一个映射函数统一处理字段缺失情况。这个小习惯,关键时刻能节省大量调试时间。
| | | |