移动端模态框超出屏幕的根本原因是width、max-width、padding、transform四者未协同适配视口变化节奏;正确做法是width: 90% + max-width: 500px组合,配合媒体查询重置margin、确保父容器高度上下文、约束图片与文本,并用clamp()实现流体缩放。
移动端模态框超出屏幕,不是尺寸设大了,而是约束逻辑断在了某一层——width、max-width、padding、transform 四者只要有一处没对齐视口变化节奏,就会撑破边界。
固定像素宽度无视设备物理宽度,iPhone SE 屏幕宽度仅 375px(CSS px),width: 500px 直接超出 33%。更隐蔽的是:某些框架(如 Bootstrap)默认给 .modal-dialog 设了 margin: 1.75rem,小屏下这个 margin 会叠加在 width 外,进一步挤占可用空间。
width: 90% + max-width: 500px 组合,禁止单独写 width: 500px
margin:@media (max-width: 480px) { .modal-dialog { margin: 10px auto; } }
transform: translate(-50%, -50%) 和 width: 100% 同时作用于同一元素——它会让计算基准错乱,尤其在 Safari 中触发意外滚动条你写了 .modal-content { max-height: 70vh; overflow-y: auto; },但滚动条就是不出现。根本原因不是这行 CSS 无效,而是它的父级(比如 .modal-dialog 或 .modal)没有明确高度上下文,导致 70vh 实际解析为 0。
.modal 是 display: flex 容器,否则 align-items: center 不生效,.modal-dialog 就无法被垂直约束.modal-dialog 设 height: 100% —— 它会强制拉伸,破坏 flex 居中,且在 iOS 键盘弹出时导致 vh 基准突变.modal { min-height: 100vh; height: 100%; } + html, body { height: 100%; },这是唯一能扛住 Safari 视口重算的组合即使整体宽度控制住了,一张未加约束的 <img> 或一串无空格 URL,仍会让模态框横向滚动或右侧被裁切——这不是 bug,是 CSS 默认行为。
.modal-content img { max-width: 100%; height: auto; }
.modal-content { word-break: break-word; overflow-wrap: break-word; }
.modal-body 全包,单独套一层 <div class="scrollable-section"> 并设 max-height: 300px; overflow-y: auto;
某些机型(尤其是 iOS 16+)在竖屏键盘弹出后,100vh 缩水严重,但页面未主动触发重排,导致模态框底部被切掉——开发者工具里看不出来,真机一输文字就露馅。
body { overflow-x: hidden; },防止任何水平方向微溢出触发滚动条resize 动态改高度——iOS 中该事件延迟高、触发不准,且可能引发重排抖动.modal-dialog { width: clamp(300px, 90%, 500px); },现代浏览器都支持,IE 不用管(2026 年已无必要)真正卡住人的从来不是“怎么写”,而是哪一层该设 max-width、哪一层该设 min-height、哪一层绝对不能碰 height——这三者的分工一旦错位,所有后续样式都会失效。
virtualbox下怎么实现ubuntu20.04开机自动挂载共享文件夹?
ubuntu20.04怎么开启护眼模式? ubuntu夜间模式的设置方法
如何在Ubuntu 20.04上安装Microsoft Edge浏览器
Ubuntu20.10优麒麟触摸手势有哪些? 优麒麟系统新增手势汇总
优麒麟20.04.1发布 更新内容汇总(附下载)
Mermaid Visual Editor 如何同步可视化操作与 Mermaid 源码?