Skip to content

[表单/弹窗深度优化] ModalForm 等弹窗表单支持容器查询布局及极致移动端单列体验(container query + 长远可扩展) #669

@hotlong

Description

@hotlong

背景和问题说明

当前 ModalForm 在移动端表单仍可能出现两列布局,带来可用性和可访问性问题,详见下述截图:

移动端表单两列问题截图

现有实现采用 Tailwind md: 断点,仅依据 viewport 宽度,而非 modal 实际容器宽度,导致部分高分辨率移动设备和小平板在 modal 全屏时仍为两列,交互密度偏高且不易用。此外,随着表单字段数增多,auto-layout 在移动端场景对"多列"的推断不总是最优。

长远、深度优化目标

  • 彻底解决 ModalForm 在移动端任何场景下都只能单列,且适应动态表单和复杂场景。
  • 支持未来下拉抽屉/弹窗等不同形态都可继承这类优化能力。
  • 解耦表单 grid 布局断点与 viewport,采用容器查询(container query)实现按 modal 宽度自适应。
  • 优化字段间距、主操作区可达性、Label/Description 样式、骨架屏等综合体验。
  • 提供可扩展的自定义断点和布局逻辑,兼具全局表单和弹窗局部表单的最佳实践。

拟实施技术方案(建议路线)

  1. 表单 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 宽度,只要弹窗实际宽度达不到指定断点,都自动单列。
  2. ModalForm 针对性保障移动端单列
    • 临时过渡期,ModalForm renderContent 传递专用 fieldContainerClass,移动端断点提升到 lg:,确保桌面前都单列。
    • 或通过 JS 检测,强制 columns=1(如需快速兜底)。
  3. 主操作按钮顺序与布局优化
    • 移动端"主操作按钮置于上方、居中、放大 touch 区域,Cancel 放下方。
    • gap/gap-y 增大,label/description 字号提升。
  4. Skeleton 骨架屏智能生成/自适应列数
    • 骨架 Loader 可根据表单实际字段数及��数动态渲染。
  5. 文档与测试用例完善
    • 新增复杂表单/长表单的容器宽度自适应用例。
    • 完善 Roadmap 和核心文档,声明推荐"container query"开发模式。

附加建议

  • 将表单、modal、drawer 等组件的容器查询能力可配置暴露,便于后续不同业务场景定制优化。
  • 如果有旧项目或第三方库兼容问题,保留旧断点逻辑的 fallback。

  • 完成后务必运行所有相关 test 并更新 ROADMAP。
  • 参考本 issue 讨论产出 PR。

Metadata

Metadata

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions