纯HTML+CSS可实现逼真手机外框:设.device-iphone为375×812px、12px黑边、::before内凹屏区(inset:12px、圆角44px)、::after画顶部听筒条;内容必须用同源iframe嵌入并加sandbox="allow-scripts allow-same-origin",子页需独立配置viewport。

直接用纯 HTML + CSS 做一个「手机设备模拟器外框」,不是为了替代 Chrome DevTools 的设备模拟,而是为了在文档、演示页、设计稿或静态预览页里,把你的 H5 页面“套进”一个逼真的 iPhone 或 Android 外壳里——这事完全可行,且不需要 JS、不依赖第三方库,关键就三点:尺寸对、边框真、iframe 内容可交互。
怎么用 CSS 画出一个像样的 iPhone 外框
别去套用网上那些带复杂阴影和渐变的“高仿”代码,容易失真还难调。实际项目中更推荐用 .device-iphone 类配合固定宽高 + 圆角 + 边框 + 伪元素做内凹效果:
-
width: 375px; height: 812px;对应 iPhone X/12/13 系列标准竖屏尺寸(逻辑像素) -
border: 12px solid #000;模拟黑边,比纯box-shadow更可控 - 用
::before绘制屏幕区域:设content: ""、position: absolute、inset: 12px(即上下左右各缩进 12px),再加border-radius: 44px匹配刘海区曲率 - 顶部加一个
::after画听筒条:top: 16px; width: 60px; height: 4px; background: #333;
为什么 iframe 是最稳妥的内容嵌入方式
很多人想用 管用,但只对 iframe 内部页面生效——也就是说,你必须在被嵌入的 你在桌面端用 Chrome DevTools 模拟 iPhone 查看带外框的页面,一切正常;但用手机微信或 Safari 扫码打开,只看到裸内容——这不是 bug,是预期行为。因为:viewport 不生效、localStorage 报错——根本原因是:只有 iframe 能复现真实页面的独立上下文。你本地起服务后,src 必须是同源 URL(比如 http://localhost:5500/demo.html),不能是相对路径或 file://:
→ 触发跨域或协议限制
sandbox 属性,否则现代浏览器会拦截脚本执行;allow-same-origin 才能让 localStorage 和 fetch 正常工作iframe 设 width: 100%; height: 100% 并清除默认边框:frameborder="0"
移动端 viewport 在 iframe 里还管用吗
index.html 的 里写对 ,父页面的 viewport 完全不影响它:
user-scalable=no,否则 iOS Safari 会忽略整个标签(iOS 13+ 行为)content="width=375",但得同步确保其根容器有 max-width: 375px; margin: 0 auto;
clientX/Y 失准,轮播图和拖拽直接瘫痪真机扫码预览时外框消失?这是正常现象
iframe,而真机浏览器没有「模拟设备」这层抽象,它只渲染真实视口index.html 自己画壳),而不是靠父页套娃
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











