公司动态
mpx原型工具实战:PX与PT换算及悬浮窗尺寸最佳实践
先说一个很多原型设计师都会遇到的场景评审会上产品经理指着屏幕说“这个悬浮窗再往右边挪一点再大一点”你当场把宽度从 320 改到 360看起来一切都好。等开发还原完真机一跑悬浮窗把文章标题挡住了点击区域又太小用户怎么都点不上。问题出在哪很可能不是开发手抖而是你交付原型的时候只给了“看起来对”的尺寸没有把 px 背后的换算逻辑和真机约束说清楚。这也是我想写这篇文章的原因。mpx 这类原型工具近年被越来越多人讨论很多团队用它替代了传统的静态示意图直接把可点击、可交互的高保真原型拿来做评审和开发交付但工具只是解决了“做得快”的问题真正让原型从“能看”变成“能用”的是设计者对 PX 单位、屏幕适配、点击热区这些基础概念的理解。本文会围绕 mpx 原型工具的使用方法、PX 与 PT 等单位的换算关系、悬浮窗口尺寸的合理设定把从原型搭建到开发交付的完整流程拆开讲一遍并给出可复制的脚本和样式示例。1. 这篇文章真正要解决的问题原型设计这件事表面上是“画界面”实际上是在做三件事验证产品逻辑、统一团队认知、传递实现细节。大多数团队用原型工具效率不高不是工具不行而是把原型当成了“高级截图”评审完就扔给开发所有尺寸、间距、交互状态都靠开发猜。猜的结果就是反复返工。所以本文要解决的核心问题有三个。第一mpx 这类原型工具到底适合谁、能替代什么、不能替代什么。很多初学者以为原型工具只能画线框图实际上它还能做交互连线、状态跳转、设计标注和开发交付但如果你指望它替代代码去实现复杂动效那就不现实。你得知道它的能力边界。第二px 是不是只是一个“固定像素”当然不是。同一个 360px 的按钮在不同设备、不同逻辑分辨率下物理表现完全不同。你需要理解 px 与 pt、dp、rem、vw 这些单位的关系以及在原型里应该怎么标注开发才不会理解偏差。尤其是 iOS 开发常说的 pt 和 CSS 里的 pt 并不是一回事这是最容易踩坑的地方。第三悬浮窗口一般设多少 px 才合理这个问题看似简单实际涉及点击热区、内容宽度、屏幕边缘安全距离、是否遮挡主体内容等多个维度。我会给出一个通用的尺寸基线并解释为什么这个基线的背后是人体工程学和屏幕规范而不是拍脑袋。读完这篇文章你应该能做到用 mpx 或同类工具快速搭建一套带交互的高保真原型知道在交付文档里写清楚哪些单位信息能写出 px 转 pt 的换算脚本也能给悬浮窗口设定一套有依据的尺寸规则。2. mpx 原型工具的核心概念与适用场景mpx 这个名字在不同语境下容易产生歧义。在小程序开发领域mpx 是一个跨端框架但在原型设计语境下它通常指以 Mockplus 为代表的一类快速原型设计工具核心特点是拖拽式组件、可视化交互连线、一键预览和团队协作。本文讨论的是后者即“面向产品原型设计的高效工具”。要理解 mpx 的定位先看它和另外两类工具的区别。线框图工具如早期 Axure 的部分用法更偏向流程和结构主要解决“页面有哪些模块、信息怎么排列”的问题高保真设计工具如 Figma、Sketch更偏向视觉还原主要解决“颜色、字体、间距、切图”的问题而 mpx 这类工具正好卡在中间既能快速搭出接近真实产品的可点击原型又能导出设计标注和开发说明还能在团队里进行在线评审。mpx 能替代的是“用 PPT 画流程图再截图”的传统做法替代的是“静态高保真图 一堆标注文字”的低效协作。它不能替代的是“代码层面的性能调优”和“动效的精细实现”。换句话说它的价值在于把想法以最低成本变成可体验的界面让产品、设计、开发在动手写代码之前就对页面流程和交互达成一致。在实际项目中mpx 最常见的三个使用场景是产品经理快速出稿。拿到需求后不写 PRD先用 mpx 拉一个带跳转逻辑的页面流程让团队直接“点一遍”感受产品逻辑。交互评审与用户测试。把原型部署成可分享链接测试用户在没有开发介入的情况下走完关键路径提前发现流程断层。设计稿交付前的功能说明。在设计稿之外用 mpx 补充每个状态下的交互注释比如悬浮窗在滚动后隐藏、在页面底部重新出现这类动态行为用静态图很难表达清楚。很多团队容易犯的错误是用 mpx 做了非常精美的视觉稿却忽略交互逻辑或者反过来只做了静态线框开发拿到后无从下手。正确做法是让它承担“高保真原型 交互说明 尺寸标注”的组合角色。3. PX 单位原型设计中最容易被忽略的基础知识进入实操之前必须先把 px 讲透。因为后面所有的悬浮窗尺寸、换算脚本、适配方案都建立在这一节的概念之上。px 是“像素”的缩写是最基本的屏幕显示单位。一个物理像素就是屏幕上的一个发光点。但在实际开发中我们说的 px 通常是 CSS 像素也就是逻辑像素它和物理像素之间有一个比例关系叫 devicePixelRatioDPR。以 iPhone 为例一块屏幕的物理分辨率是 1170×2532但逻辑宽度只有 390pxDPR 约等于 3。所以你在 CSS 里写width: 390px实际占用的是 1170 个物理像素。理清这一点后再看其他单位就不会晕了。单位全称适用平台核心特点pxPixelWeb、设计稿通用最直观但是不等于物理像素ptPointiOS、CSS 打印iOS 中使用逻辑点CSS 中代表 1/72 英寸dp / dipDensity-independent PixelAndroid以 160dpi 为基准适配不同密度屏幕remRoot Element Font SizeWeb相对根元素字体大小适合整体缩放vw / vhViewport Width / HeightWeb相对视口宽高适合响应式布局%Percentage全平台相对父容器适合流式布局其中最容易混淆的是 pt。在 iOS 开发中pt 是逻辑单位1pt 在不同 DPR 下对应不同数量的物理像素2x 下 1pt 等于 2px3x 下 1pt 等于 3px。但在 CSS 规范中pt 被定义为 1/72 英寸而 CSS 默认把 1 英寸定义为 96px所以 1pt 96 / 72 px ≈ 1.333px。同一个字母“pt”在 iOS 和 CSS 里完全是两套体系这就是为什么有时候你写“按钮宽度 64pt”开发做出来却总觉得不对。那么 px 和 pt 到底怎么换算分两种情况CSS 标准换算1pt 1.333px1px 0.75pt。iOS 设计稿换算先确认 DPR再按 1pt DPR px 换算。如果设计稿基于 iPhone 15 逻辑宽度 393px 制作那么 1pt 1px因为设计稿本身就是逻辑像素如果设计稿是 2x 导出图那么 1pt 2px。这也是为什么现在很多团队干脆不在设计稿里使用 pt 标注而是统一使用 px并在交付说明里写清楚“这里是逻辑像素不是物理像素”。这样虽然牺牲了一点点行业术语的精确性但沟通成本最低。悬浮窗口的尺寸之所以值得单独讨论是因为它涉及点击热区和视觉遮挡两个维度。iOS 人机交互指南建议最小点击区域不小于 44pt×44ptAndroid 的 Material Design 建议不小于 48dp×48dpWeb 端 WCAG 建议点击目标至少 24×24 CSS 像素实际团队通常按 32px 到 48px 做。所以“悬浮窗口一般设多少 px”的答案不是固定的而是由平台规范、使用场景和内容多少共同决定。下面会给出具体建议。4. 环境准备与前置条件原型设计和前端适配的验证并不需要特别重的环境但为了把流程跑通我建议按下面的清单准备。原型设计工具选择 mpx 或同类快速原型工具本文以 mpx 的类型和能力作为表述基准。在官网注册账号后可以直接在网页端开始创建项目也可以下载桌面客户端。桌面端的优势是资源库和组件库管理更稳定适合长时间设计网页端则更适合快速分享和在线评审。首次创建项目时通常会让你选择终端类型和画板尺寸建议优先选择“iPhone 15 / iPhone 16 逻辑尺寸”或“Android 主流分辨率模板”作为起点因为这两种模板已经预设了比较合理的画板宽度。设计规范准备开始画原型前先花 10 分钟把设计规范定下来。不是让你写一份几十页的规范文档而是确定这几个字段主色、辅助色、正文字号、标题字号、圆角半径、间距基数。间距基数建议使用 4px 的倍数比如 4、8、12、16、24、32这样后面做响应式适配时会非常省力。浏览器与开发者工具无论您是设计师还是开发者都建议准备 Chrome 或 Edge 浏览器。原型预览链接通常在浏览器里打开而浏览器的开发者工具F12能够模拟不同设备的视口宽度帮助你验证“360px 宽的手机页面”和“768px 宽的平板页面”下悬浮窗是否遮挡内容。这一步是原型阶段最便宜的适配测试手段不需要等到开发完才发现问题。代码运行环境为了完成文中的 px 转 pt 脚本建议安装 Python 3 或 Node.js 任意一种。如果不想安装环境也可以直接在在线代码运行平台执行但本地执行更稳定。安装完成后打开终端或命令提示符输入python --version或node -v确认环境可正常使用。版本号请以实际安装为准本文的脚本不依赖特定高级特性低版本也可以运行。5. 核心流程拆解从原型搭建到开发交付原型设计的完整流程可以拆成六个步骤创建项目、搭页面结构、连交互、标注规格、真机预览、交付开发。这里不是简单列步骤而是讲每一步要解决什么问题、容易在哪里出错。第一步创建项目与画板建议一个功能模块对应一个项目而不是把几十个页面全部堆在一个文件里。比如“个人中心”和“购物车”分开维护尺寸规范也更容易统一。画板尺寸直接决定后续的 px 语义。如果选择了 iPhone 模板画板的逻辑宽度可能不是传统的 375px而是 393px 或 390px这不要紧关键在于团队要约定设计稿中的 px 是逻辑像素开发按逻辑像素还原。第二步搭页面结构先不急着美化把每个页面的信息层级用组件摆出来。顶部导航、内容列表、底部 Tab、悬浮入口先定“有没有”再定“长什么样”。这一步关注的是信息架构避免后面因为缺少模块频繁返工。第三步连线交互这是 mpx 这类工具相对传统设计工具的核心优势。选中一个按钮把它连到目标页面设置跳转方式为“点击”或“滑动”。悬浮窗这类组件可以配置显示与隐藏的触发条件比如“页面滚动超过 200px 后显示返回顶部按钮”。这一步输出的是一份可点击的交互原型评审时让团队直接上手体验。第四步标注规格对关键组件补充尺寸、间距、字体、颜色信息。不要每个组件都标一遍那样信息过载只标注“会变化的、容易出错的、开发必须知道”的字段。例如悬浮窗距离屏幕右侧 16px、距离底部 84px、宽 48px、高 48px、圆角 24px这五个字段必须给全。第五步真机预览使用工具自带的预览二维码在手机上打开原型。重点检查三件事字号是否清晰、点击区域是否容易命中、悬浮窗是否遮挡核心内容。手机上的真实手感会暴露很多桌面端浏览器发现不了的问题。第六步交付开发不要只丢一个链接。建议在交付说明里补充这些信息设计稿基于什么设备逻辑尺寸、使用的单位是什么、关键状态有多少种、悬浮窗在不同滚动位置的行为是什么。开发已经有足够多的信息去做技术判断你的说明越清晰返工成本越低。6. 完整示例与代码实现这一节给出四个可以直接使用的示例px 转 pt 的 Python 脚本、CSS 响应式单位示例、悬浮窗口的 HTML/CSS 实现、以及 mpx 工具的交互配置示意。6.1 示例一px 转 pt 换算脚本这个脚本解决的是“拿到一个像素值不知道对应多少 pt”的问题。代码会自动读取用户输入的 px 值并输出 CSS pt 和 iOS pt 两种结果。iOS pt 按 DPR 2 和 DPR 3 分别计算方便在不同设备规范下使用。# 文件路径px_to_pt.py import sys def px_to_css_pt(px): CSS 标准换算1 inch 96px 72pt 所以 1px 72 / 96 0.75pt return px * 0.75 def px_to_ios_pt(px, dpr): iOS 逻辑点换算1pt DPR * 1px 当设计稿使用逻辑像素时dpr1 当设计稿为 2x 导出图时dpr2 当设计稿为 3x 导出图时dpr3。 return px / dpr if __name__ __main__: print(请输入 px 值例如 48) try: line sys.stdin.readline().strip() if not line: raise ValueError(输入为空) px float(line) except ValueError as e: print(f输入无效{e}) sys.exit(1) css_pt px_to_css_pt(px) ios_pt_2x px_to_ios_pt(px, 2) ios_pt_3x px_to_ios_pt(px, 3) print(f输入 px: {px:g}) print(fCSS pt (1px0.75pt): {css_pt:g}) print(fiOS pt 2x (1pt2px): {ios_pt_2x:g}) print(fiOS pt 3x (1pt3px): {ios_pt_3x:g})运行方式python px_to_pt.py假设输入 48输出应该是输入 px: 48 CSS pt (1px0.75pt): 36 iOS pt 2x (1pt2px): 24 iOS pt 3x (1pt3px): 16这个结果的含义是一个 48px 的按钮在 CSS 体系里等于 36pt在 iOS 3x 设备上等于 16pt。如果不区分场景直接写 pt开发很容易选错换算标准。6.2 示例二CSS 响应式单位适配写法现代 Web 开发不建议所有尺寸都写死 px而是用 rem 和 vw 组合。下面的代码演示如何让一个悬浮窗在不同屏幕上保持合理的尺寸比例同时不超出小屏边界。/* 文件路径styles.css */ :root { --suspend-size: 48px; --suspend-right: 16px; --suspend-bottom: calc(16px env(safe-area-inset-bottom)); --suspend-radius: 24px; } .suspend-button { position: fixed; right: var(--suspend-right); bottom: var(--suspend-bottom); width: var(--suspend-size); height: var(--suspend-size); border-radius: var(--suspend-radius); background-color: #1677ff; color: #fff; display: flex; align-items: center; justify-content: center; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); cursor: pointer; z-index: 1000; /* 保证移动端最小点击区域 */ min-width: 44px; min-height: 44px; } media (max-width: 375px) { .suspend-button { --suspend-size: 44px; --suspend-right: 12px; width: var(--suspend-size); height: var(--suspend-size); } }这段代码解决两个问题一是用 CSS 变量集中管理悬浮窗尺寸后续调整只需要改一处二是通过媒体查询在窄屏设备上缩小尺寸同时保证最小 44px 的点击热区。env(safe-area-inset-bottom)让底部边距自动避让 iPhone 底部横条区域比写死bottom: 16px更稳妥。6.3 示例三悬浮窗口尺寸的 HTML 实现悬浮窗口通常比悬浮按钮大因为它承载更多内容比如快捷操作菜单或消息预览。尺寸建议移动端宽度 280px 到 360px高度根据内容自适应但不超过视口高度的一半PC 端宽度 320px 到 420px。同时要保证窗口不会覆盖页面关闭按钮或主要操作区。!-- 文件路径index.html -- !DOCTYPE html html langzh-CN head meta charsetUTF-8 meta nameviewport contentwidthdevice-width, initial-scale1.0 title悬浮窗口示例/title style /* 这里可以引入 styles.css也可以直接内联 */ .suspend-panel { position: fixed; right: 16px; bottom: 88px; width: min(360px, calc(100vw - 32px)); max-height: 50vh; overflow-y: auto; padding: 16px; background: #ffffff; border-radius: 16px; box-shadow: 0 8px 24px rgba(0, 0, 0, 0.16); z-index: 999; } .suspend-panel-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; font-size: 16px; font-weight: 600; } .suspend-panel-close { width: 32px; height: 32px; border: none; background: #f5f5f5; border-radius: 8px; cursor: pointer; font-size: 16px; } /style /head body div classsuspend-panel idsuspendPanel div classsuspend-panel-header span快捷操作/span button classsuspend-panel-close idclosePanel×/button /div p这里可以放快捷入口、消息提醒、客服会话等高频操作内容。/p /div script document.getElementById(closePanel).addEventListener(click, function () { document.getElementById(suspendPanel).style.display none; }); /script /body /html关键代码是width: min(360px, calc(100vw - 32px))。这个写法的含义是“窗口最多 360px但在小屏设备上不能超过视口宽度减去左右 16px 边距”。相比固定写width: 360px它自然适配了 iPhone SE 和小屏 Android 机型不会出现窗口溢出屏幕的问题。6.4 示例四mpx 原型中的交互配置示意mpx 类工具通常采用可视化连线配置交互但导出的描述文件或多或少年会包含类似下面的 JSON 结构。下面是一份模拟的悬浮窗交互配置用来表达“显示、隐藏、点击跳转”三个动作{ component: suspend_button, name: 悬浮反馈按钮, props: { width: 48, height: 48, borderRadius: 24, right: 16, bottom: 84, backgroundColor: #1677ff, zIndex: 999 }, interactions: [ { event: scroll, condition: scrollTop 200, action: show }, { event: click, action: navigate_to, target: feedback_page } ] }这份配置不难理解悬浮按钮初始隐藏当页面滚动超过 200px 时出现点击后跳转到反馈页。虽然不同工具的字段名会有差异但交互逻辑是一致的。你在 mpx 里通过连线配置出来的效果本质就是在生成类似的“事件 条件 动作”结构。7. 运行结果与效果验证完成了代码示例后不能只看“代码能跑”就结束要有一套验证方法判断它是否符合预期。验证 px 转 pt 脚本跑通脚本只是第一步。建议再输入几个边界值0 应返回 0负数应该被合理处理当前脚本允许负值但实际设计场景中尺寸不会为负小数比如 2.5px 也能正常换算。如果脚本在输入非数字时报错说明异常分支有效。验证悬浮窗适配用 Chrome 打开 index.html按 F12 进入开发者工具点击设备工具栏依次切换为 iPhone SE375px、iPhone Pro Max430px、普通 Android 和桌面端。观察悬浮窗口三个表现是否超出屏幕右侧或底部。窗口宽度在小屏上是否自动收窄到100vw - 32px以内。窗口内容在小屏上是否出现横向滚动条。如果出现说明内部元素有固定宽度超过容器需要排查子元素。验证交互配置在 mpx 中预览原型滚动页面观察悬浮按钮是否在超过 200px 后出现点击后是否跳到目标页面返回后悬浮按钮是否保持正确状态。交互验证时建议使用真机因为桌面端浏览器和手机浏览器的滚动事件触发频率不同真机更容易暴露手感问题。判断成功标准一个合格的悬浮窗组件应该满足在任何目标设备宽度下都不会溢出视口、最小点击区域不小于 44px、不会遮挡页面主要内容区、关闭后状态不混乱。如果这四条都满足就可以让开发按这套尺寸和状态去实现。8. 常见问题与排查方法在原型设计和 px 换算过程中下面的问题出现频率最高。问题现象可能原因排查方式解决方案设计稿 360px 宽真机显示偏大或偏小没有区分逻辑像素与物理像素用开发者工具查看 DPR 和可视宽度统一约定设计稿使用逻辑 px交付时标注 DPR悬浮窗在小屏手机溢出屏幕使用了固定 px 宽度没有考虑视口约束切换小屏设备模拟器观察溢出位置使用 min() 函数或百分比宽度约束最大宽度悬浮按钮太小用户点不准点击热区小于 44px真机点击测试视觉尺寸可以小但点击热区至少 44px视觉只缩到 48pxpx 转 pt 结果和 iOS 开发不一致CSS pt 与 iOS pt 混用确认开发使用的是 CSS 还是 iOS 单位在交付说明中明确单位体系并用脚本校准悬浮窗遮挡了重要内容边距或触发条件设置不合理在页面主要区域标记不可遮挡范围设置 bottom、right 边距并配置滚动消失逻辑mpx 预览在手机端打不开网络环境或访问权限限制换浏览器、重新生成分享链接使用工具官方推荐的预览方式确认访问权限原型里交互正常开发实现后无法还原交互条件和代码逻辑不对齐对比原型交互配置与开发代码交付时附带交互配置 JSON 或状态说明文档小屏上字体偏大导致布局错乱字体单位固定 px未做适配检查字体最小实际渲染尺寸使用相对单位或媒体查询调整字号看完这张表你会发现大部分问题其实不是“工具不会用”而是“单位没对齐”“尺寸没验证”“交互没写清”这三个根因。所以排查问题的第一原则不是改代码而是回到交付说明确认设计稿、原型、开发代码三者的单位体系是否一致。9. 最佳实践与总结最后一个部分不讲空话直接给一组可以在团队里推广的最佳实践。统一单位口径无论团队用 mpx、Figma 还是 Sketch都建议做一件事在设计规范里写死“设计稿中的 px 全部指逻辑像素iOS 开发如使用 pt按 1pt 1px 换算切图资源按 2x/3x 单独导出”。这样一句话能避免大量沟通成本。建立组件级尺寸基线悬浮按钮、悬浮窗、弹窗、底部菜单这类高频组件提前定好尺寸基线。例如悬浮按钮 48px、最小热区 44px、右侧边距 16px、底部边距 84px、悬浮窗最大宽度 360px。这些基线不是拍脑袋而是基于 Material Design 和 iOS HIG 的通用规范得出的后续可以按品牌需要微调。把交互状态写全很多返工来自“状态没描述清楚”。悬浮窗至少包含三种状态默认隐藏、滚动后出现、点击后跳转或关闭。不要只在评审时口头说“这里加一个悬浮球”而应该在原型里把这些状态全部连出来。用最小成本验证适配原型阶段不需要写代码做完整适配测试但可以借助浏览器的设备模拟工具快速检查宽度约束。如果原型里的悬浮窗已经溢出开发还原时大概率也会溢出。在原型阶段发现问题修复成本是最低的。交付内容要包含四件套单个页面的设计稿、可点击的原型链接、关键组件的尺寸说明、交互状态清单。这四样东西齐了开发可以独立完成还原不需要反复追问。继续深入的方向可以考虑静态页面之外更进一步的方案把设计稿里的颜色、字号、间距抽成设计变量再与前端代码里的 CSS 变量或设计 Token 对应。这样原型与代码之间不再靠人肉翻译设计调整后前端变量同步更新能减少大量机械式工作。这也正是 mpx 这类工具持续迭代的重要方向之一。回到开头的场景当你能在一分钟之内说清“悬浮窗宽 48px、距右 16px、距底 84px、点击跳转反馈页、滚动超过 200px 后出现”并且所有尺寸都有换算依据和设备约束支撑时你就不会再担心开发还原不出效果。原型工具给你的是效率PX 或者说单位换算能力才是让你面对真机时心里有底的那张底牌。