Skip to content

原生交互元素 ​

原生交互元素把浏览器已经实现的键盘、焦点、状态和提交行为带到页面中。优先使用正确元素,可以少写脚本,也能减少自定义控件遗漏的状态同步和无障碍问题。

链接、按钮和表单控件不是同一种东西 ​

html
<a href="/account">查看账户</a>
<button type="button" id="refresh">刷新数据</button>

<details>
  <summary>显示高级选项</summary>
  <p>这些选项默认收起。</p>
</details>

链接改变资源位置,按钮触发当前页面动作,details 与 summary 提供浏览器管理的展开状态。button 在表单内默认可能是提交按钮,因此只用于普通动作时应明确写 type="button"。把按钮写成链接或反过来,会让键盘、历史记录、默认提交和用户预期彼此冲突。

dialog 可以表达对话框,但关闭、焦点返回、模态状态和不支持环境的回退仍需要检查。原生元素减少工作量,不代表可以跳过状态和生命周期设计。

变化一个条件观察边界 ​

把按钮放进 form,不写 type,点击它可能触发表单提交。把 details 内容用 display: none 永久隐藏,会破坏它本来要表达的开关状态。把 button 换成 div 后,视觉仍可用,但需要自行补齐焦点、Enter/Space 键、禁用状态和语义角色。

运行实验 ​

  1. 在表单中放入两个按钮,一个显式写 type="submit",另一个写 type="button",记录点击后的事件。
  2. 只用键盘操作 a、button 和 summary,记录焦点顺序与激活按键。
  3. 用 div 替换按钮,先不补脚本,记录丢失的默认行为;再说明需要补哪些契约。
  4. 检查 details 的 open 状态,观察展开和收起是否能被脚本与辅助技术识别。

常见错误 ​

  • 用 div 绑定 click 代替按钮。
  • 表单内按钮不声明 type。
  • 只实现鼠标交互,遗漏键盘和焦点。
  • 自定义弹窗只显示视觉层,没有关闭、返回焦点和背景交互规则。
  • 用 ARIA 角色掩盖元素本身职责选错的问题。

练习 ​

实现一个包含“打开设置”“保存设置”和“展开高级选项”的小页面。使用原生链接、按钮和 details,验证键盘操作、表单提交和状态变化。随后故意用 div 替换保存按钮,列出它需要补回的行为,并说明为什么优先恢复原生元素。

继续阅读 ​

下一篇进入表格,学习如何表达真正的行列关系:表格的正确用法。

查看本节答案

用心记录每一步成长