彻底清除列表默认样式需同时设置 list-style: none、margin: 0 和 padding: 0;list-style-image 兼容性差,推荐用 ::before + background-image;Flex 布局下对齐需作用于 li 内部;语义结构不可破坏。
list-style 彻底清除默认列表符号直接设 list-style: none 就能去掉圆点、数字等默认标记,但要注意它只影响列表项的「标记部分」,不重置 margin 和 padding —— 浏览器自带的缩进还在,视觉上仍像有缩进。
ul 和 ol 都适用,写在父容器上即可margin 和 padding 才算真正“干净”,比如:ul {
list-style: none;
margin: 0;
padding: 0;
}list-style 没清内边距,用 Chrome DevTools 查看元素时会发现 padding-inline-start(或旧版 padding-left)仍有 40px 左右list-style-type 和 list-style-image 的实际取舍想换图标但不用第三方字体或伪元素?list-style-image 看似方便,但存在明显兼容短板:不支持缩放、无法控制对齐、Safari 对 SVG 支持不稳定。多数情况下不如用 ::before + background-image 或 content。
list-style-type: disc / circle / square / decimal / lower-alpha 仅适用于语义明确的列表场景,比如导航菜单不该用 decimal
list-style-image: url(arrow.svg) 在 Firefox 中可能拉伸变形,且无法响应 background-size
li::before {
content: "";
display: inline-block;
width: 16px;
height: 16px;
background: url("check.svg") no-repeat center;
background-size: contain;
margin-right: 8px;
}li 的垂直对齐失效问题当给 ul 加了 display: flex; flex-direction: column 后,li 的 align-items 不起作用——因为 li 默认是块级元素,flex 容器只管直接子元素的排列,而对齐行为需由子元素自身定义。
li 内部内容上,例如:li {
display: flex;
align-items: center;
}
li span {
margin-left: 8px;
}li 文字基线对齐,避免因字体升部/降部差异导致错位,加 vertical-align: middle 到 li::before 或图标元素上ul 设 align-items 期望它影响 li 的文字位置——那不是它的作用域
用 list-style: none + display: flex 把列表做成横向导航很常见,但屏幕阅读器仍依赖 ul/ol 的语义识别这是个列表。只要结构没改,就别用 div 替换 ul。
role="list" 或覆盖 listitem 角色aria-label 表达li 或其可聚焦子元素(如 a),而不是跳过整个区域
在缩进清理、图标控制粒度、flex 下的对齐逻辑,以及看不见的语义链路上。