fix: Modal 弹窗高度约束,防止内容溢出视窗

- 添加 max-height 限制,确保弹窗始终在视窗内
- header/footer 固定不压缩,body 内容可滚动
- 兼容 iOS Safari 的 dvh 单位
This commit is contained in:
2026-03-28 17:35:54 +08:00
parent ae75c82505
commit fb9833663c
2 changed files with 58 additions and 0 deletions

View File

@@ -0,0 +1,49 @@
## Purpose
定义 Modal 弹窗的高度约束机制,确保弹窗在各种视窗尺寸下完整显示,并提供良好的内容滚动体验。
## Requirements
### Requirement: Modal 最大高度限制
Modal 弹窗 SHALL 设置最大高度,确保弹窗始终在视窗内完整显示。
#### Scenario: 视窗高度充足
- **WHEN** 浏览器视窗高度大于弹窗内容高度
- **THEN** 弹窗高度自适应内容,不显示滚动条
#### Scenario: 视窗高度不足
- **WHEN** 浏览器视窗高度小于弹窗内容高度
- **THEN** 弹窗最大高度为 `calc(100dvh - 48px)`(兼容旧浏览器使用 `calc(100vh - 48px)` fallback
- **THEN** 弹窗上下各预留 24px 边距
### Requirement: Modal 标题栏固定可见
Modal 标题栏(`.modal-header`SHALL 始终可见,不被内容挤压或遮挡。
#### Scenario: 内容超出滚动
- **WHEN** Modal body 内容超出高度限制
- **THEN** 标题栏固定在弹窗顶部,高度不变
- **THEN** 标题栏不参与滚动
### Requirement: Modal 底部栏固定可见
Modal 底部栏(`.modal-footer`如存在SHALL 始终可见,不被内容挤压或遮挡。
#### Scenario: 内容超出滚动且有 footer
- **WHEN** Modal body 内容超出高度限制且存在 footer
- **THEN** footer 固定在弹窗底部,高度不变
- **THEN** footer 不参与滚动
### Requirement: Modal body 内容可滚动
Modal body`.modal-body`SHALL 在内容超出时支持滚动。
#### Scenario: 内容超出时滚动
- **WHEN** Modal body 内容高度超过可用空间
- **THEN** body 显示纵向滚动条
- **THEN** 用户可滚动查看全部内容
#### Scenario: 内容未超出时不滚动
- **WHEN** Modal body 内容高度未超过可用空间
- **THEN** body 不显示滚动条