“去掉下划线”在 CSS 里不是一个属性能全部解决的,文字下划线、链接下划线、列表符号、输入框底线,对应的写法各不相同。这里按场景列一下。

文字和链接的下划线

文字下划线统一由 text-decoration 控制:

.no-underline { text-decoration: none; }

/* 只去掉下划线,保留删除线和上划线 */
.mixed { text-decoration: line-through; }

链接的默认下划线来自浏览器 User Agent 样式,覆盖掉即可:

a { text-decoration: none; }

如果写了没反应,绝大多数是权重问题。检查有没有 #nav a、a:link 这类更高优先级的选择器,或者伪类 a:hover 单独设置了 text-decoration。

子元素取消不了父级下划线

.title { text-decoration: underline; }
.title span { text-decoration: none; } /* 无效 */

下划线是父元素“画”出来的,子元素无法用 none 擦掉。正确做法是把下划线下放到具体需要的那一层,或者改用 border-bottom、::after 模拟。

列表前面的符号

这属于列表样式,不是 text-decoration:

ul { list-style: none; margin: 0; padding: 0; }

常见坑是只写了 list-style: none,但 ul 的默认左内边距还在,看起来像没对齐。要把 padding 一起清掉,再手动设置缩进。

输入框的底线

input 的边框不是下划线,但视觉上很像,去掉用 border:

input {
  border: none;
  border-bottom: 1px solid #ccc;
  outline: none;
}

outline 是聚焦时浏览器画的框,和 border 是两回事。只写 border: none 后聚焦仍有蓝框,就是 outline 没处理。为了无障碍,最好换成自定义的聚焦样式,而不是完全去掉。

表格和分隔线上的下划线

有的旧代码用 text-decoration: underline 给表头加分隔线,这属于误用。表头分隔应该用 border-bottom,因为它不会影响文字行高,也不会被子元素继承。