里直接写文字没反应,因浏览器只认为合法子元素;正确写法是每个条目必须独立包裹在中,子也必须嵌套在父内部。

直接写 <ul></ul> 或 <ol></ol> 标签就能跑起来,但多数人卡在标签嵌套错误或样式“看不见”上——不是代码不生效,是浏览器根本没把它当列表解析。
为什么 <ul></ul> 里直接写文字没反应?
浏览器只认 <li> 是合法子元素。<ul></ul> 下面如果直接写“首页 产品 关于”,它会当成普通文本流处理,既不加圆点,也不参与语义结构。常见错误写法:
- 首页 产品 关于
正确写法必须每个条目独立包裹在 <li> 里:
- 首页
- 产品
- 关于
-
<li>不可省略闭合标签(XHTML 风格可自闭合,但 HTML5 不推荐) - 别用
<p></p>、<div> 或纯文本替代 <code><li> - 嵌套子列表时,子
<ul></ul>必须放在某个<li>内部,不能挂在父<ul></ul>下
<ol></ol> 的 start 和 type 不是摆设
这两个属性直接影响编号逻辑,不是 CSS 装饰。比如:
<ol start="5"> <li>第五步</li> <li>第六步</li> </ol>
会真实渲染为 “5. 第五步”、“6. 第六步”。type 大小写敏感:
-
type="a"→ a、b、c -
type="A"→ A、B、C -
type="i"→ i、ii、iii -
type="I"→ I、II、III
设 start="-1" 多数浏览器不支持,会 fallback 到 1;start="0" 显示 0,但旧版 IE 可能忽略。
CSS 清除列表默认样式时,list-style-type: none 不够
只设这个只会隐藏符号,<ul></ul> 和 <ol></ol> 默认带 padding-left: 40px,视觉上仍空一大块,常被误以为“样式没清掉”。真正干净的重置要两步:
ul, ol {
list-style-type: none;
padding-left: 0;
}
注意:list-style-image 在移动端 Safari 支持不稳定,优先用伪元素 + background 替代;用 background-image 时,务必加 background-repeat: no-repeat,否则图标会重复铺满。
嵌套列表时,<li> 是层级锚点,不是容器
很多人把 <li> 当成 <div> 乱塞内容,其实它是语义边界。子列表必须挂载在某个 <code><li> 内部,否则结构断裂。例如:
- 一级项
- 二级项
如果漏掉外层 <li> 的闭合,或把子 <ul></ul> 放在父 <ul></ul> 同级,浏览器会自动纠错,但结果不可控——可能合并成一项,也可能错位缩进。嵌套超过三层时,可访问性与屏幕阅读器支持会明显下降。











