不能。浏览器不将button[type="submit"]视为:default匹配目标,现代桌面浏览器均无视该写法;真正可靠的方式是使用data-default属性配合属性选择器进行显式标记。

不能。浏览器根本不把 button[type="submit"] 当作 :default 的匹配目标,所有现代桌面浏览器(Chrome、Firefox、Safari 17+)均无视该写法。
为什么 button:default 样式永远不会生效
:default 不是“表单默认触发的按钮”,而是“浏览器 UA 认定的初始默认控件”——这个认定逻辑在现代浏览器中已被弃用或完全不启用。
- 它不看
type="submit",也不看 DOM 顺序,更不响应form.defaultSubmit或 JS 设置 - 即使你写
form button[type="submit"]:default,DevTools 的 Styles 面板里也看不到该规则被应用 - Safari 自 2022 年起彻底移除对
button:default的支持;Chrome/Firefox 仅在极老版本中对<button></button>有微弱残留行为,但与提交逻辑无关
真正能标识默认提交按钮的可靠写法
把“默认”语义从 CSS 移到 HTML 属性上,用显式标记替代模糊伪类:
- 在 HTML 中给目标按钮加
data-default属性:<button type="submit" data-default>保存</button> - 用属性选择器写样式:
button[type="submit"][data-default] { outline: 2px solid #2196f3; } - 如果模板由后端渲染,可动态插入
data-default,避免 JS 运行后再 patch - 别用
:first-of-type或:nth-child(1)—— DOM 结构稍一调整(比如加个<input type="hidden">),样式就失效
为什么别碰 [selected] 或 [checked] 做提交按钮样式
这些是静态 HTML 属性选择器,和提交按钮毫无关系:
-
[selected]只匹配<option></option>元素,对<button></button>无意义 -
[checked]只匹配<input type="checkbox">或<input type="radio">,且无法区分“初始声明”和“JS 后设” - 用它们写样式,要么不匹配,要么匹配错元素,调试时会浪费大量时间在无效规则上
最常被忽略的一点:开发者总想靠一个伪类自动识别“那个该被点的按钮”,但浏览器早已不提供这种能力。人工标记 data-default 是目前唯一稳定、可预测、跨浏览器一致的方案。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











