开发规范
为了实现多端兼容,综合考虑编译速度、运行性能等因素,uni-app
约定了如下开发规范:
- 页面文件遵循 Vue 单文件组件 (SFC) 规范
- 组件标签靠近小程序规范,详见uni-app 组件规范
- 接口能力(
JS API
)靠近微信小程序规范,但需将前缀wx
替换为uni
,详见uni-app接口规范 - 数据绑定及事件处理同
Vue.js
规范,同时补充了App及页面的生命周期 - 为兼容多端运行,建议使用flex布局进行开发
目录结构
一个uni-app
工程,默认包含如下目录及文件:
┌─uniCloud 云空间目录,阿里云为uniCloud-aliyun,腾讯云为uniCloud-tcb(详见uniCloud)
│─components 符合vue组件规范的uni-app组件目录
│ └─comp-a.vue 可复用的a组件
├─hybrid App端存放本地html文件的目录,详见
├─platforms 存放各平台专用页面的目录,详见
├─pages 业务页面文件存放的目录
│ ├─index
│ │ └─index.vue index页面
│ └─list
│ └─list.vue list页面
├─static 存放应用引用的本地静态资源(如图片、视频等)的目录,注意:静态资源只能存放于此
├─uni_modules 存放[uni_module](/uni_modules)规范的插件。
├─main.js Vue初始化入口文件
├─App.vue 应用配置,用来配置App全局样式以及监听 应用生命周期
├─manifest.json 配置应用名称、appid、logo、版本等打包信息,详见
└─pages.json 配置页面路由、导航条、选项卡等页面类信息,详见
页面样式与布局
uni-app
的css
与web的css
基本一致。本文没有讲解css
的用法。在你了解web
的css
的基础之上,本文讲述一些样式相关的注意事项。
uni-app
有vue
页面和nvue
页面。vue
页面是webview
渲染的、app
端的nvue
页面是原生渲染的。在nvue
页面里样式比web
会限制更多,另见nvue样式专项文档
本文重点介绍vue
页面的样式注意事项。
尺寸单位
uni-app
支持的通用css
单位包括 px
、rpx
px
即屏幕像素rpx
即响应式px
,一种根据屏幕宽度自适应的动态单位。以750宽的屏幕为基准,750rpx
恰好为屏幕宽度。屏幕变宽,rpx
实际显示效果会等比放大,但在App
端和H5
端屏幕宽度达到 960px
时,默认将按照 375px
的屏幕宽度进行计算,具体配置参考:rpx计算配置 。
vue
页面支持下面这些普通H5
单位,但在nvue
里不支持:
rem
根字体大小可以通过 page-meta 配置vh viewpoint height
,视窗高度,1vh
等于视窗高度的1%vw viewpoint width
,视窗宽度,1vw
等于视窗宽度的1%
nvue
还不支持百分比单位。
App
端,在pages.json
里的titleNView
或页面里写的 plus api
中涉及的单位,只支持 px
。注意此时不支持 `rpx`
nvue
中,uni-app
模式(nvue 不同编译模式介绍)可以使用 px
、rpx
,表现与 vue
中一致。weex
模式目前遵循weex
的单位,它的单位比较特殊:
px
:以750宽的屏幕为基准动态计算的长度单位,与vue
页面中的rpx
理念相同。(一定要注意weex
模式的px
,和vue
里的px
逻辑不一样。)wx
:与设备屏幕宽度无关的长度单位,与vue
页面中的px
理念相同
下面对 rpx
详细说明:
设计师在提供设计图时,一般只提供一个分辨率的图。
严格按设计图标注的px
做开发,在不同宽度的手机上界面很容易变形。
而且主要是宽度变形。高度一般因为有滚动条,不容易出问题。由此,引发了较强的动态宽度单位需求。
微信小程序设计了rpx
解决这个问题。uni-app
在 App
端、H5
端都支持了 rpx
,并且可以配置不同屏幕宽度的计算方式,具体参考:rpx计算配置。
rpx
是相对于基准宽度的单位,可以根据屏幕宽度进行自适应。uni-app
规定屏幕基准宽度 750rpx
。
开发者可以通过设计稿基准宽度计算页面元素rpx
值,设计稿 1px
与框架样式 1rpx
转换公式如下:
设计稿 1px / 设计稿基准宽度 = 框架样式 1rpx / 750rpx
换言之,页面元素宽度在 uni-app
中的宽度计算公式:
750 * 元素在设计稿中的宽度 / 设计稿基准宽度
举例说明:
- 若设计稿宽度为 750
px
,元素 A 在设计稿上的宽度为 100px
,那么元素 A 在uni-app
里面的宽度应该设为:750 * 100 / 750
,结果为:100rpx
。 - 若设计稿宽度为 640
px
,元素 A 在设计稿上的宽度为 100px
,那么元素 A 在uni-app
里面的宽度应该设为:750 * 100 / 640
,结果为:117rpx
。 - 若设计稿宽度为 375
px
,元素 B 在设计稿上的宽度为 200px
,那么元素 B 在uni-app
里面的宽度应该设为:750 * 200 / 375
,结果为:400rpx
。
Tips
- 注意
rpx
是和宽度相关的单位,屏幕越宽,该值实际像素越大。如不想根据屏幕宽度缩放,则应该使用px
单位。 - 如果开发者在字体或高度中也使用了
rpx
,那么需注意这样的写法意味着随着屏幕变宽,字体会变大、高度会变大。如果你需要固定高度,则应该使用px
。 rpx
不支持动态横竖屏切换计算,使用rpx
建议锁定屏幕方向- 设计师可以用
iPhone6
作为视觉稿的标准。 - 如果设计稿不是750
px
,HBuilderX
提供了自动换算的工具,详见:https://ask.dcloud.net.cn/article/35445。 App
端,在pages.json
里的titleNView
或页面里写的plus api
中涉及的单位,只支持px
,不支持rpx
。- 早期
uni-app
提供了upx
,目前已经推荐统一改为rpx
了,详见