不能。:default伪类仅匹配控件初始选中状态,不响应type="submit"或表单默认提交行为,现代浏览器均不将其应用于提交按钮;可靠方式是显式添加data-default属性并用属性选择器样式化。

form button:default 能不能高亮默认提交按钮?
不能。浏览器根本不把 button[type="submit"] 的“默认提交行为”当作 :default 的匹配条件——:default 只响应控件的「初始选中状态」,不是「表单默认触发行为」。哪怕你写了 form button[type="submit"]:default,样式永远不会生效。
为什么 button[type="submit"]:default 不起作用?
:default 伪类只对以下情况有效:<input type="radio">、<input type="checkbox">、<option></option>(实际支持极差)、<button></button>(仅当它被浏览器 UA 认定为「初始默认按钮」时,但现代浏览器基本不这么做)。关键点是:
- 它不看
type="submit",也不看是否第一个 submit 按钮 - 它不响应 HTML 中的顺序或 DOM 位置
- 它不响应 JS 设置的
form.defaultSubmit或类似逻辑 - Chrome、Firefox、Safari 均不将任何
button视为:default目标
真正能标识默认提交按钮的可靠方式
用 HTML 属性 + CSS 选择器,而不是依赖语义模糊的伪类:
- 给默认按钮显式加
data-default属性:<button type="submit" data-default>保存</button> - 用 CSS 选中:
button[type="submit"][data-default] { outline: 2px solid #2196f3; } - 如果后端/模板能控制,也可用
class="default-submit",比伪类更可控 - 避免用
:first-of-type等推测性选择器——DOM 顺序易变,且input[type="submit"]和button[type="submit"]是不同元素类型
别踩坑::default 和 :checked / :selected 完全不是一回事
:default 不等于「当前被选中」,也不等于「带 selected 属性」:
-
option[selected]是属性选择器,稳定匹配带selected属性的<option></option> -
option:default在所有主流桌面浏览器中都不生效(截至 2026 年 6 月) -
input:checked是实时状态,随用户点击切换;:default是初始化快照,且几乎无法触发 - 想标记「页面加载时那个该被点的按钮」,就得靠人工标记,没有自动魔法
:default 基本只在 checkbox/radio 的初始态上有微弱存在感,拿它处理提交按钮,只会浪费调试时间。前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











