背景和问题说明
当前 ModalForm 在移动端表单仍可能出现两列布局,带来可用性和可访问性问题,详见下述截图:
现有实现采用 Tailwind md: 断点,仅依据 viewport 宽度,而非 modal 实际容器宽度,导致部分高分辨率移动设备和小平板在 modal 全屏时仍为两列,交互密度偏高且不易用。此外,随着表单字段数增多,auto-layout 在移动端场景对"多列"的推断不总是最优。
长远、深度优化目标
- 彻底解决 ModalForm 在移动端任何场景下都只能单列,且适应动态表单和复杂场景。
- 支持未来下拉抽屉/弹窗等不同形态都可继承这类优化能力。
- 解耦表单 grid 布局断点与 viewport,采用容器查询(container query)实现按 modal 宽度自适应。
- 优化字段间距、主操作区可达性、Label/Description 样式、骨架屏等综合体验。
- 提供可扩展的自定义断点和布局逻辑,兼具全局表单和弹窗局部表单的最佳实践。
拟实施技术方案(建议路线)
- 表单 grid 布局切换到 CSS Container Query(container-based grid columns)
- 升级 Tailwind 到支持 container queries 的版本,开启相应插件。
- 将原
md:grid-cols-2 等响应式断点迁移为 @md:grid-cols-2 等 container 断点。
- ModalForm、DrawerForm、全页表单均切换为
@container。
- 移动端全屏 modal/container 内,无论 viewport 宽度,只要弹窗实际宽度达不到指定断点,都自动单列。
- ModalForm 针对性保障移动端单列
- 临时过渡期,ModalForm renderContent 传递专用
fieldContainerClass,移动端断点提升到 lg:,确保桌面前都单列。
- 或通过 JS 检测,强制 columns=1(如需快速兜底)。
- 主操作按钮顺序与布局优化
- 移动端"主操作按钮置于上方、居中、放大 touch 区域,Cancel 放下方。
- gap/gap-y 增大,label/description 字号提升。
- Skeleton 骨架屏智能生成/自适应列数
- 骨架 Loader 可根据表单实际字段数及��数动态渲染。
- 文档与测试用例完善
- 新增复杂表单/长表单的容器宽度自适应用例。
- 完善 Roadmap 和核心文档,声明推荐"container query"开发模式。
附加建议
- 将表单、modal、drawer 等组件的容器查询能力可配置暴露,便于后续不同业务场景定制优化。
- 如果有旧项目或第三方库兼容问题,保留旧断点逻辑的 fallback。
- 完成后务必运行所有相关 test 并更新 ROADMAP。
- 参考本 issue 讨论产出 PR。
背景和问题说明
当前 ModalForm 在移动端表单仍可能出现两列布局,带来可用性和可访问性问题,详见下述截图:
现有实现采用 Tailwind
md:断点,仅依据 viewport 宽度,而非 modal 实际容器宽度,导致部分高分辨率移动设备和小平板在 modal 全屏时仍为两列,交互密度偏高且不易用。此外,随着表单字段数增多,auto-layout 在移动端场景对"多列"的推断不总是最优。长远、深度优化目标
拟实施技术方案(建议路线)
md:grid-cols-2等响应式断点迁移为@md:grid-cols-2等 container 断点。@container。fieldContainerClass,移动端断点提升到lg:,确保桌面前都单列。附加建议