属性选择器失效主因是HTML属性值与CSS写法不匹配:含空格、特殊字符或数字开头时必须加引号;大小写敏感需用i标志;布尔属性用[attr]而非[attr="true"];伪类前不可插属性选择器。

属性选择器写对了但没效果?先确认是否带引号
HTML 属性值含空格、特殊字符(如 实操建议: 立即学习“前端免费学习笔记(深入)”; 实操建议: 立即学习“前端免费学习笔记(深入)”; 实操建议: 立即学习“前端免费学习笔记(深入)”; 实操建议: 立即学习“前端免费学习笔记(深入)”;/、#、:)或以数字开头时,CSS 里必须用引号包裹。比如:input[type='number'] 正确,而 input[type=number] 在某些浏览器中可能失效;更危险的是 div[data-id=123abc] 看似没问题,但若实际 HTML 是
属性值大小写敏感吗?看属性类型和 HTML 模式
type、class、id 这类标准全局属性,在 HTML 中不区分大小写,但 CSS 属性选择器默认区分。也就是说:input[type='TEXT'] 不会匹配 ,除非你用 [type='text' i] 加上 i 标志(CSS Level 4 支持,现代浏览器基本可用)。
type、lang、data- 类自定义属性等,优先小写书写并保持 HTML 和 CSS 一致i 标志:[data-role='Header' i]
i 标志不支持 IE,若需兼容,改用 JavaScript 动态加 class 或用 JS 选择后操作属性存在但值为空,[attr] 和 [attr=""] 是两回事
[disabled] 匹配所有含 disabled 属性的元素(无论值是什么,甚至没赋值),而 [disabled=""] 只匹配明确写了 disabled="" 的元素。常见误判场景:表单控件被 JS 设置 el.disabled = true,这只会添加属性,不会设值,此时 [disabled="true"] 完全不生效。
[attr](如 [required]、[readonly])[attr=""],但要确认 HTML 确实渲染了空字符串而非省略属性[attr="true"] 去匹配 JS 设置的布尔属性——它根本不会生成这个值伪类和属性选择器连用时,顺序影响匹配结果
input[type='text']:focus 有效,但 input:focus[type='text'] 是无效语法,CSS 解析器直接丢弃整条规则。属性选择器必须紧接在元素名或其它简单选择器之后,不能插在伪类中间。
属性选择器看似简单,真正卡住人的往往是 HTML 实际渲染出的属性值与你「以为的」不一致——多花十秒在 Elements 面板里点开元素,比反复改 CSS 更快定位问题。button[disabled]:hover ✔️,button:hover[disabled] ❌:is() 或分拆成多条规则










