Angular 13模态框及遮罩仅在iPhone上不显示问题排查
iOS Safari定位上下文异常
若模态框组件的父容器未设置position: relative(或其他非static定位),iOS Safari对position: absolute元素的渲染逻辑与其他浏览器存在差异,可能导致元素被挤出视口或被上层元素完全覆盖。需检查父容器的定位属性是否缺失。Flex布局兼容性问题
旧版iOS Safari对标准Flex属性的支持存在bug,你当前使用的display: flex和justify-content: flex-end可能无法正常生效。可尝试添加webkit前缀的兼容写法::host { display: -webkit-box; display: -webkit-flex; display: flex; -webkit-justify-content: flex-end; justify-content: flex-end; /* 保留原有其他样式 */ }视口宽高计算差异
iOS Safari中width: 100%和height: 100%的计算会受滚动条、安全区域等因素影响,导致元素未占满预期视口。可尝试替换为视口单位::host { width: 100vw; height: 100vh; /* 保留原有其他样式 */ }或添加
min-width: 100%; min-height: 100%;强制元素占满容器。overflow-x: hidden的冲突影响
iOS Safari中,对:host这类根元素设置overflow-x: hidden可能与Flex布局产生冲突,导致整个组件不可见。可尝试移除该属性,或仅给内部模态框内容单独设置overflow控制。Angular视图封装的样式优先级问题
Angular默认的Emulated视图封装会给组件样式添加专属属性选择器,iOS Safari可能对这类选择器的优先级处理异常,导致样式未生效。可临时将组件的encapsulation设置为ViewEncapsulation.None(注意避免样式污染),或用:host::ng-deep强制穿透样式(Angular 13中虽不推荐,但可用于排查问题)。iOS安全区域适配缺失
iPhone的刘海、底部安全区域可能导致模态框被挤出可视范围。可尝试添加安全区域适配样式::host { padding-top: env(safe-area-inset-top); padding-bottom: env(safe-area-inset-bottom); /* 保留原有其他样式 */ }
内容的提问来源于stack exchange,提问作者Chen Peleg

