uni-app 支持的通用 css 單位包括 px、rpx
vue頁面支持普通H5單位,但在nvue里不支持:
nvue還不支持百分比單位。
App端,在 pages.json 里的 titleNView 或頁面里寫的 plus api 中涉及的單位,只支持 px。注意此時(shí)不支持 rpx
nvue中,uni-app 模式(nvue 不同編譯模式介紹)可以使用 px 、rpx,表現(xiàn)與 vue 中一致。weex 模式目前遵循weex的單位,它的單位比較特殊:
下面對 rpx 詳細(xì)說明:
設(shè)計(jì)師在提供設(shè)計(jì)圖時(shí),一般只提供一個(gè)分辨率的圖。
嚴(yán)格按設(shè)計(jì)圖標(biāo)注的 px 做開發(fā),在不同寬度的手機(jī)上界面很容易變形。
而且主要是寬度變形。高度一般因?yàn)橛袧L動條,不容易出問題。由此,引發(fā)了較強(qiáng)的動態(tài)寬度單位需求。
微信小程序設(shè)計(jì)了 rpx 解決這個(gè)問題,uni-app 在 App 端、H5 端都支持了 rpx。
rpx 是相對于基準(zhǔn)寬度的單位,可以根據(jù)屏幕寬度進(jìn)行自適應(yīng)。uni-app 規(guī)定屏幕基準(zhǔn)寬度 750rpx。
開發(fā)者可以通過設(shè)計(jì)稿基準(zhǔn)寬度計(jì)算頁面元素 rpx 值,設(shè)計(jì)稿 1px 與框架樣式 1rpx 轉(zhuǎn)換公式如下:
設(shè)計(jì)稿 1px / 設(shè)計(jì)稿基準(zhǔn)寬度 = 框架樣式 1rpx / 750rpx
換言之,頁面元素寬度在 uni-app 中的寬度計(jì)算公式:
750 * 元素在設(shè)計(jì)稿中的寬度 / 設(shè)計(jì)稿基準(zhǔn)寬度
舉例說明:
Tips
使用@import語句可以導(dǎo)入外聯(lián)樣式表,@import后跟需要導(dǎo)入的外聯(lián)樣式表的相對路徑,用;表示語句結(jié)束。
示例代碼:
<style>
@import "../../common/uni.css";
.uni-card {
box-shadow: none;
}
</style>
框架組件上支持使用 style、class 屬性來控制組件的樣式。
目前支持的選擇器有:
選擇器 | 樣例 | 樣例描述 |
---|---|---|
.class | .intro | 選擇所有擁有 class="intro" 的組件 |
#id | #firstname | 選擇擁有 id="firstname" 的組件 |
element | view | 選擇所有 view 組件 |
element, element | view, checkbox | 選擇所有文檔的 view 組件和所有的 checkbox 組件 |
::after | view::after | 在 view 組件后邊插入內(nèi)容,僅微信小程序和App生效 |
::before | view::before | 在 view 組件前邊插入內(nèi)容,僅微信小程序和App生效 |
注意:
定義在 App.vue 中的樣式為全局樣式,作用于每一個(gè)頁面。在 pages 目錄下 的 vue 文件中定義的樣式為局部樣式,只作用在對應(yīng)的頁面,并會覆蓋 App.vue 中相同的選擇器。
注意:
uni-app 提供內(nèi)置 CSS 變量
CSS變量 | 描述 | App | 小程序 | H5 |
---|---|---|---|---|
--status-bar-height | 系統(tǒng)狀態(tài)欄高度 | 系統(tǒng)狀態(tài)欄高度、nvue注意見下 | 25px | 0 |
--window-top | 內(nèi)容區(qū)域距離頂部的距離 | 0 | 0 | NavigationBar 的高度 |
--window-bottom | 內(nèi)容區(qū)域距離底部的距離 | 0 | 0 | TabBar 的高度 |
注意:
代碼塊
快速書寫css變量的方法是:在css中敲hei,在候選助手中即可看到3個(gè)css變量。(HBuilderX 1.9.6以上支持)
示例1 - 普通頁面使用css變量:
<template>
<!-- HBuilderX 2.6.3+ 新增 page-meta, 詳情:https://uniapp.dcloud.io/component/page-meta -->
<page-meta>
<navigation-bar />
</page-meta>
<view>
<view class="status_bar">
<!-- 這里是狀態(tài)欄 -->
</view>
<view> 狀態(tài)欄下的文字 </view>
</view>
</template>
<style>
.status_bar {
height: var(--status-bar-height);
width: 100%;
}
</style>
<template>
<view>
<view class="toTop">
<!-- 這里可以放一個(gè)向上箭頭,它距離底部tabbar上浮10px-->
</view>
</view>
</template>
<style>
.toTop {
bottom: calc(var(--window-bottom) + 10px)
}
</style>
示例2 - nvue頁面獲取狀態(tài)欄高度
<template>
<view class="content">
<view :style="{ height: iStatusBarHeight + 'px'}"></view>
</view>
</template>
<script>
export default {
data() {
return {
iStatusBarHeight:0
}
},
onLoad() {
this.iStatusBarHeight = uni.getSystemInfoSync().statusBarHeight
}
}
</script>
uni-app 中以下組件的高度是固定的,不可修改:
組件 | 描述 | App | H5 |
---|---|---|---|
NavigationBar | 導(dǎo)航欄 | 44px | 44px |
TabBar | 底部選項(xiàng)卡 | HBuilderX 2.3.4之前為56px,2.3.4起和H5調(diào)為一致,統(tǒng)一為 50px。但可以自主更改高度) | 50px |
各小程序平臺,包括同小程序平臺的iOS和Android的高度也不一樣。
為支持跨平臺,框架建議使用Flex布局,關(guān)于Flex布局可以參考外部文檔A Complete Guide to Flexbox、阮一峰的flex教程等。
uni-app 支持使用在 css 里設(shè)置背景圖片,使用方式與普通 web 項(xiàng)目大體相同,但需要注意以下幾點(diǎn):
注意
uni-app 支持使用字體圖標(biāo),使用方式與普通 web 項(xiàng)目相同,需要注意以下幾點(diǎn):
nvue中不可直接使用css的方式引入字體文件,需要使用以下方式在js內(nèi)引入。nvue內(nèi)不支持本地路徑引入字體,請使用網(wǎng)絡(luò)鏈接或者base64形式。src字段的url的括號內(nèi)一定要使用單引號。
var domModule = weex.requireModule('dom');
domModule.addRule('fontFace', {
'fontFamily': "fontFamilyName",
'src': "url('https://...')"
})
示例:
<template>
<view>
<view>
<text class="test"></text>
<text class="test"></text>
<text class="test"></text>
</view>
</view>
</template>
<style>
@font-face {
font-family: 'iconfont';
src: url('https://at.alicdn.com/t/font_865816_17gjspmmrkti.ttf') format('truetype');
}
.test {
font-family: iconfont;
margin-left: 20rpx;
}
</style>
uni-app 支持在 template 模板中嵌套 <template/> 和 <block/>,用來進(jìn)行 列表渲染 和 條件渲染。
<template/> 和 <block/> 并不是一個(gè)組件,它們僅僅是一個(gè)包裝元素,不會在頁面中做任何渲染,只接受控制屬性。
代碼示例
<template>
<view>
<template v-if="test">
<view>test 為 true 時(shí)顯示</view>
</template>
<template v-else>
<view>test 為 false 時(shí)顯示</view>
</template>
</view>
</template>
<template>
<view>
<block v-for="(item,index) in list" :key="index">
<view>{{item}} - {{index}}</view>
</block>
</view>
</template>
更多建議: