value属性仅对<ol>内的<li>有效,会强制重置后续编号逻辑;仅适用于法律条文跳号或跨<ol>续接编号等极少数场景,其他情况应优先使用start属性或CSS计数器。

value 属性只对 <ol> 内的 <li> 有效,且会强制重置后续编号逻辑——这不是“微调序号”,而是“硬切计数流”。它不修复空档、不兼容嵌套、不支持非整数,也不该用来对齐样式或掩盖语义混乱。
什么时候该用 value,什么时候不该用
真正需要 value 的场景极少:仅当某项编号必须跳变,且跳变有明确业务依据(如法律条文引用“第20条”后接“第22条”,中间缺21);或者跨多个独立 <ol> 续接编号(前一个列表以 <li value="7"> 结尾,下一个列表第一项需显示为“8”)。
其他情况基本属于误用:
• 想让整个列表从5开始?直接用 <ol start="5">
• 想隐藏某项编号?value 做不到,得用 CSS counter-increment: none
• 想生成 “Step-001” 或带字母前缀的编号?value 只接受整数,必须用 CSS 计数器
• 列表嵌套或响应式布局中频繁写 value?极易因 DOM 结构被浏览器自动修正而失效
value 和 start 的行为差异
start 是 <ol> 的属性,作用于整个列表起始点,语义清晰、无障碍友好、所有现代浏览器稳定支持;value 是 <li> 的属性,只影响当前项并覆盖后续自动递增值。
关键区别:
• <ol start="5"><li>A</li><li>B</li></ol> → 显示为 “5. A” “6. B”
• <ol><li value="5">A</li><li>B</li></ol> → 显示为 “5. A” “6. B”,但此时若在 A 前加一项没设 value,它会变成 “1. X”,然后 A 变成 “5. A”,B 变成 “6. B”——序号断裂不可逆
• 若同时存在 start="3" 和第一个 <li value="10">,则第一项显示 “10”,第二项显示 “11”,start 仅作为 fallback,不参与实际计数
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
常见错误与 DOM 实际结构陷阱
value 失效往往不是浏览器 bug,而是 HTML 结构不合法导致它失去上下文:
• <li value="5"> 没被包在 <ol> 里,或父级 <ol> 被意外闭合(比如写了 <div> 或 <p> 在中间)
• 嵌套时误写成 <ol><li><ol><li value="10">…</li></ol></li></ol> ——外层 <ol> 在遇到内层 <ol> 时会被浏览器自动闭合,内层 <li value="10"> 实际已脱离原始计数上下文
• 传了非整数: value="5.0"、value="five"、value="" 全部被忽略,回退到默认计数
• 移动端 WebView 或旧版 Safari 中,若 <li> 内含块级元素未正确包裹,也可能导致 value 不渲染
立即学习“前端免费学习笔记(深入)”;
CSS 计数器才是可控扩展的正解
当需求超出线性整数编号(比如多级标题编号、条件跳过、格式化前缀、跨容器共享),value 就是死胡同。
CSS 计数器用起来更灵活:
• counter-reset: step; 初始化计数器
• counter-increment: step; 控制是否递增
• content: "Step-" counter(step, decimal-leading-zero); 定制输出格式
• 可通过 counter-increment: step -1 回退,或 counter-increment: none 跳过某项
• 支持伪类、媒体查询、动态 class 切换,真正适配复杂 UI 场景
而 value 是单次写死、不可撤销、无法条件触发的 HTML 属性——它解决的是 1990 年代的简单跳号问题,不是 2026 年的真实工程需求。


















