SuperAPI AI 工具集

dialog-patterns

前端与建站

查看项目

更新于 10-16 00:03

技能介绍

用途:在 Rails 应用中用原生 HTML <dialog> 元素搭建可访问的现代对话框 UI,适用于表单模态框、确认框、删除等破坏性操作确认、警示/提示通知,以及任何需要焦点管理与无障碍支持的浮层界面。

主要能力:原生 <dialog> 自带焦点捕获、ESC 关闭、::backdrop 背景、顶层渲染(无需 z-index 争夺)、滚动锁定和 role="dialog" 无障碍语义。支持零 JavaScript 的声明式控制(Invoker Commands,如 commandfor / command="show-modal" / command="close"、closedby="any");更复杂的场景可结合 Turbo Frames 异步加载与 Stimulus 控制器。推荐异步模态框三段式:布局中放置 turbo_frame_tag :modal 注入点、链接用 data: { turbo_frame: :modal } 触发、模态内容视图中嵌套内层 turbo_frame_tag :modal_content 以避免表单校验重渲染时内容闪烁。提交成功时重定向关闭模态框,校验失败时以 422 状态重渲染保持模态框开启,也可用 turbo_stream.update("modal", "") 留在模态框内。确认框通过 confirm_delete 成员路由加 turbo frame 实现,提示/Toast 用 show() 非模态呈现,侧滑面板用 dialog + clickOutside 实现。

使用方式:需要 Rails 视图与 Stimulus、Turbo 环境;零 JS 方案依赖较新浏览器。

限制与注意:应避免自定义 div 模态框的焦点陷阱、缺少嵌套 turbo frame 导致闪烁、关闭时未清空内容导致复用陈旧数据、用 z-index 堆叠、手写焦点陷阱和行内 backdrop。测试时可用 within "dialog" 限定断言范围。浏览器支持方面原生 <dialog> 需 Chrome 37+、Firefox 98+、Safari 15.4+,Invoker Commands 与 @starting-style 需更新版本,旧浏览器可考虑 polyfill。其余具体样式与完整示例未在资料中展开。