uni-app頁面布局

單頁面程序

uni-app 約定頁面文件遵循 Vue 單文件組件 (SFC) 規(guī)范诵原,采用簡潔的模板語法來聲明式地將數(shù)據(jù)渲染進(jìn) DOM 的系統(tǒng)

<template>
    <view class="container">
        {{message}}
    </view>
</template>

<script>
    export default {
        data() {
            return {
                message: 'Hello World',
            }
        }
    }
</script>
<style>
  .container{
    background-color: #FFF;
  }
</style>

模版語法

Vue.js 使用了基于 HTML 的模板語法,允許開發(fā)者聲明式地將 DOM 綁定至底層 Vue 實(shí)例的數(shù)據(jù)赃阀。所有 Vue.js 的模板都是合法的 HTML以舒,所以能被遵循規(guī)范的瀏覽器和 HTML 解析器解析趾痘。

在底層的實(shí)現(xiàn)上,Vue 將模板編譯成虛擬 DOM 渲染函數(shù)蔓钟。結(jié)合響應(yīng)系統(tǒng)永票,Vue 能夠智能地計(jì)算出最少需要重新渲染多少組件,并把 DOM 操作次數(shù)減到最少奋刽。

模板語法瓦侮,包含插值、指令

插值

文本佣谐,使用雙大括號(hào):<span>Message: {{ msg }}</span>

原始HTML肚吏,使用v-html指令:<p>Using v-html directive: <span v-html="rawHtml"></span></p>

使用 JavaScript 表達(dá)式,支持JavaScript 表達(dá)式:{{ number + 1 }}

指令

v-on與v-bind是常用的指令狭魂,用于綁定屬性設(shè)置事件

Attribute罚攀,使用v-bind 指令(縮寫可以直接省略v-bind):<button v-bind:disabled="isButtonDisabled">Button</button>

事件党觅,使用 v-on 指令(縮寫@):<a @click="doSomething">...</a>

條件與循環(huán)v-if v-else-if v-else v-for

計(jì)算屬性與偵聽器

計(jì)算屬性

計(jì)算屬性是基于它們的響應(yīng)式依賴進(jìn)行緩存的

computed: {
  msg: function () {
    return this.message
  }
}

偵聽屬性

當(dāng)你有一些數(shù)據(jù)需要隨著其它數(shù)據(jù)變動(dòng)而變動(dòng)時(shí)斋泄,用 watch

watch: {
    // 如果 `question` 發(fā)生改變杯瞻,這個(gè)函數(shù)就會(huì)運(yùn)行
    question: function (newQuestion, oldQuestion) {
      this.answer = 'Waiting for you to stop typing...'
      this.debouncedGetAnswer()
    }
  }

class與style綁定

通過動(dòng)態(tài)綁定 style、class 屬性來控制組件的樣式炫掐。

  • style:靜態(tài)的樣式統(tǒng)一寫到 class 中魁莉。style 接收動(dòng)態(tài)的樣式,在運(yùn)行時(shí)會(huì)進(jìn)行解析募胃,請(qǐng)盡量避免將靜態(tài)的樣式寫進(jìn) style 中旗唁,以免影響渲染速度。

    <view :style="{color:color, fontSize: fontSize + 'px'}" />
    
  • 動(dòng)態(tài)綁定 class

    <view class="normal_view" />
    

    對(duì)象語法

    <view :class="{ active: isActive }"></view>
    

    上面的語法表示 active 這個(gè) class 存在與否將取決于數(shù)據(jù) isActive

    數(shù)組語法

    <view v-bind:class="[activeClass, errorClass]"></view>
    data: {
      activeClass: 'active',
      errorClass: 'text-danger'
    }
    

關(guān)于選擇器注意:

  • uni-app 中不能使用 * 選擇器痹束。

  • 目前vue支持的選擇器有: .class #id element ::after `::before

  • nvue頁面检疫、微信小程序自定義組件中僅支持 class 選擇器

生命周期

應(yīng)用生命周期

uni-app 支持如下應(yīng)用生命周期函數(shù):

函數(shù)名 說明
onLaunch 當(dāng)uni-app 初始化完成時(shí)觸發(fā)(全局只觸發(fā)一次)
onShow 當(dāng) uni-app 啟動(dòng),或從后臺(tái)進(jìn)入前臺(tái)顯示
onHide 當(dāng) uni-app 從前臺(tái)進(jìn)入后臺(tái)
onError 當(dāng) uni-app 報(bào)錯(cuò)時(shí)觸發(fā)
onUniNViewMessage 對(duì) nvue 頁面發(fā)送的數(shù)據(jù)進(jìn)行監(jiān)聽祷嘶,可參考 nvue 向 vue 通訊
onUnhandledRejection 對(duì)未處理的 Promise 拒絕事件監(jiān)聽函數(shù)(2.8.1+)
onPageNotFound 頁面不存在監(jiān)聽函數(shù)
onThemeChange 監(jiān)聽系統(tǒng)主題變化

注意

  • 應(yīng)用生命周期僅可在App.vue中監(jiān)聽屎媳,在其它頁面監(jiān)聽無效。

    示例代碼

    <script>
        // 只能在App.vue里監(jiān)聽?wèi)?yīng)用的生命周期
        export default {
            onLaunch: function() {
                console.log('App Launch')
            },
            onShow: function() {
                console.log('App Show')
            },
            onHide: function() {
                console.log('App Hide')
            }
        }
    </script>
    

頁面生命周期

uni-app 支持如下頁面生命周期函數(shù):

函數(shù)名 說明 平臺(tái)差異說明 最低版本
onInit 監(jiān)聽頁面初始化论巍,其參數(shù)同 onLoad 參數(shù)烛谊,為上個(gè)頁面?zhèn)鬟f的數(shù)據(jù),參數(shù)類型為 Object(用于頁面?zhèn)鲄ⅲ┗啡溃|發(fā)時(shí)機(jī)早于 onLoad 百度小程序 3.1.0+
onLoad 監(jiān)聽頁面加載晒来,其參數(shù)為上個(gè)頁面?zhèn)鬟f的數(shù)據(jù),參數(shù)類型為 Object(用于頁面?zhèn)鲄ⅲ┲O郑瑓⒖?a target="_blank">示例
onShow 監(jiān)聽頁面顯示。頁面每次出現(xiàn)在屏幕上都觸發(fā)荧降,包括從下級(jí)頁面點(diǎn)返回露出當(dāng)前頁面
onReady 監(jiān)聽頁面初次渲染完成接箫。注意如果渲染速度快,會(huì)在頁面進(jìn)入動(dòng)畫完成前觸發(fā)
onHide 監(jiān)聽頁面隱藏
onUnload 監(jiān)聽頁面卸載
onResize 監(jiān)聽窗口尺寸變化 App朵诫、微信小程序
onPullDownRefresh 監(jiān)聽用戶下拉動(dòng)作辛友,一般用于下拉刷新,參考示例
onReachBottom 頁面滾動(dòng)到底部的事件(不是scroll-view滾到底)剪返,常用于下拉下一頁數(shù)據(jù)废累。具體見下方注意事項(xiàng)
onTabItemTap 點(diǎn)擊 tab 時(shí)觸發(fā),參數(shù)為Object脱盲,具體見下方注意事項(xiàng) 微信小程序邑滨、支付寶小程序、百度小程序钱反、H5掖看、App(自定義組件模式)
onShareAppMessage 用戶點(diǎn)擊右上角分享 微信小程序匣距、百度小程序、字節(jié)跳動(dòng)小程序哎壳、支付寶小程序
onPageScroll 監(jiān)聽頁面滾動(dòng)毅待,參數(shù)為Object nvue暫不支持
onNavigationBarButtonTap 監(jiān)聽原生標(biāo)題欄按鈕點(diǎn)擊事件,參數(shù)為Object App归榕、H5
onBackPress 監(jiān)聽頁面返回尸红,返回 event = {from:backbutton、 navigateBack} 刹泄,backbutton 表示來源是左上角返回按鈕或 android 返回鍵驶乾;navigateBack表示來源是 uni.navigateBack ;詳細(xì)說明及使用:onBackPress 詳解循签。支付寶小程序只有真機(jī)能觸發(fā)级乐,只能監(jiān)聽非navigateBack引起的返回,不可阻止默認(rèn)行為县匠。 app风科、H5、支付寶小程序
onNavigationBarSearchInputChanged 監(jiān)聽原生標(biāo)題欄搜索輸入框輸入內(nèi)容變化事件 App乞旦、H5 1.6.0
onNavigationBarSearchInputConfirmed 監(jiān)聽原生標(biāo)題欄搜索輸入框搜索事件贼穆,用戶點(diǎn)擊軟鍵盤上的“搜索”按鈕時(shí)觸發(fā)。 App兰粉、H5 1.6.0
onNavigationBarSearchInputClicked 監(jiān)聽原生標(biāo)題欄搜索輸入框點(diǎn)擊事件 App故痊、H5 1.6.0
onShareTimeline 監(jiān)聽用戶點(diǎn)擊右上角轉(zhuǎn)發(fā)到朋友圈 微信小程序 2.8.1+
onAddToFavorites 監(jiān)聽用戶點(diǎn)擊右上角收藏 微信小程序 2.8.1+

頁面樣式與布局

uni-app的css與web的css基本一致。

uni-app有vue頁面和nvue頁面玖姑。vue頁面是webview渲染的愕秫、app端的nvue頁面是原生渲染的

尺寸單位

uni-app 支持的通用 css 單位包括 px、rpx

  • px 即屏幕像素
  • rpx 即響應(yīng)式px焰络,一種根據(jù)屏幕寬度自適應(yīng)的動(dòng)態(tài)單位戴甩。以750寬的屏幕為基準(zhǔn),750rpx恰好為屏幕寬度闪彼。屏幕變寬甜孤,rpx 實(shí)際顯示效果會(huì)等比放大,但在 App 端和 H5 端屏幕寬度達(dá)到 960px 時(shí)畏腕,默認(rèn)將按照 375px 的屏幕寬度進(jìn)行計(jì)算
  • uni-app 2.9+ 新增 leftWindow, topWindow, rightWindow 配置缴川。用于解決寬屏適配問題。

nvue還不支持百分比單位

vue頁面支持下面這些普通H5單位描馅,但在nvue里不支持:

  • rem 根字體大小可以通過 page-meta 配置
  • vh viewpoint height把夸,視窗高度,1vh等于視窗高度的1%
  • vw viewpoint width流昏,視窗寬度扎即,1vw等于視窗寬度的1%

App端吞获,在 pages.json 里的 titleNView 或頁面里寫的 plus api 中涉及的單位,只支持 px谚鄙。注意此時(shí)不支持 rpx

nvue中各拷,uni-app 模式(nvue 不同編譯模式介紹)可以使用 px 、rpx闷营,表現(xiàn)與 vue 中一致烤黍。weex 模式目前遵循weex的單位,它的單位比較特殊:

  • px:傻盟,以750寬的屏幕為基準(zhǔn)動(dòng)態(tài)計(jì)算的長度單位速蕊,與 vue 頁面中的 rpx 理念相同。(一定要注意 weex 模式的 px娘赴,和 vue 里的 px 邏輯不一樣规哲。)
  • wx:與設(shè)備屏幕寬度無關(guān)的長度單位,與 vue 頁面中的 px 理念相同

下面對(duì) rpx 詳細(xì)說明:

設(shè)計(jì)師在只提供一個(gè)分辨率的圖诽表,嚴(yán)格按設(shè)計(jì)圖標(biāo)注的 px 做開發(fā)唉锌,在不同寬度的手機(jī)上界面的寬度很容易變形。

rpx 動(dòng)態(tài)寬度單位竿奏,就是為了解決這個(gè)問題袄简。uni-app 在 App 端、H5 端都支持了 rpx

在Pages.json的globalStyle中可以配置不同屏幕寬度的計(jì)算方式泛啸,具體參考:

屬性 默認(rèn)值 描述 平臺(tái)兼容
rpxCalcMaxDeviceWidth 960 rpx 計(jì)算所支持的最大設(shè)備寬度绿语,單位 px App、H5
rpxCalcBaseDeviceWidth 375 rpx 計(jì)算使用的基準(zhǔn)設(shè)備寬度候址,設(shè)備實(shí)際寬度超出 rpx 計(jì)算所支持的最大設(shè)備寬度時(shí)將按基準(zhǔn)寬度計(jì)算吕粹,單位 px App、H5
rpxCalcIncludeWidth 750 rpx 計(jì)算特殊處理的值宗雇,始終按實(shí)際的設(shè)備寬度計(jì)算昂芜,單位 rpx App、H5
maxWidth 1190 單位px赔蒲,當(dāng)瀏覽器可見區(qū)域?qū)挾却笥趍axWidth時(shí),兩側(cè)留白良漱,當(dāng)小于等于maxWidth時(shí)舞虱,頁面鋪滿;不同頁面支持配置不同的maxWidth母市;maxWidth = leftWindow(可選)+page(頁面主體)+rightWindow(可選) H5

rpx 是相對(duì)于基準(zhǔn)寬度的單位矾兜,可以根據(jù)屏幕寬度進(jìn)行自適應(yīng)。uni-app 規(guī)定屏幕基準(zhǔn)寬度 750rpx患久,頁面元素寬度在 uni-app 中的寬度計(jì)算公式:

寬度rpx = 750 * 元素在設(shè)計(jì)稿中的寬度 / 設(shè)計(jì)稿基準(zhǔn)寬度

比如: 若設(shè)計(jì)稿寬度為 750px椅寺,元素 A 在設(shè)計(jì)稿上的寬度為 100px浑槽,那么元素 A 在 uni-app 里面的寬度應(yīng)該設(shè)為:750 * 100 / 750,結(jié)果為:100rpx返帕。

Tips

  • 注意 rpx 是和寬度相關(guān)的單位桐玻,屏幕越寬,該值實(shí)際像素越大荆萤。如不想根據(jù)屏幕寬度縮放镊靴,則應(yīng)該使用 px 單位。
  • 如果開發(fā)者在字體或高度中也使用了 rpx 链韭,那么需注意這樣的寫法意味著隨著屏幕變寬偏竟,字體會(huì)變大、高度會(huì)變大敞峭。如果你需要固定高度踊谋,則應(yīng)該使用 px 。
  • rpx不支持動(dòng)態(tài)橫豎屏切換計(jì)算旋讹,使用rpx建議鎖定屏幕方向
  • 設(shè)計(jì)師可以用 iPhone6 作為視覺稿的標(biāo)準(zhǔn)殖蚕。
  • 如果設(shè)計(jì)稿不是750px,HBuilderX提供了自動(dòng)換算的工具骗村,詳見:https://ask.dcloud.net.cn/article/35445嫌褪。
  • App端,在 pages.json 里的 titleNView 或頁面里寫的 plus api 中涉及的單位胚股,只支持 px笼痛,不支持 rpx。
  • 早期 uni-app 提供了 upx 琅拌,目前已經(jīng)推薦統(tǒng)一改為 rpx 了缨伊,詳見

樣式導(dǎo)入

使用@import語句可以導(dǎo)入外聯(lián)樣式表,@import后跟需要導(dǎo)入的外聯(lián)樣式表的相對(duì)路徑进宝,用;表示語句結(jié)束刻坊。

示例代碼:

<style>
    @import "../../common/uni.css";

    .uni-card {
        box-shadow: none;
    }
</style>

全局樣式與局部樣式

定義在 App.vue 中的樣式為全局樣式,作用于每一個(gè)頁面党晋。在 pages 目錄下 的 vue 文件中定義的樣式為局部樣式谭胚,只作用在對(duì)應(yīng)的頁面,并會(huì)覆蓋 App.vue 中相同的選擇器未玻。

注意:

  • App.vue 中通過 @import 語句可以導(dǎo)入外聯(lián)樣式灾而,一樣作用于每一個(gè)頁面。
  • nvue頁面暫不支持全局樣式

CSS變量

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 的高度

注意:

  • var(--status-bar-height) 此變量在微信小程序環(huán)境為固定 25px旁趟,在 App 里為手機(jī)實(shí)際狀態(tài)欄高度。
  • 當(dāng)設(shè)置 "navigationStyle":"custom" 取消原生導(dǎo)航欄后庇绽,由于窗體為沉浸式锡搜,占據(jù)了狀態(tài)欄位置橙困。此時(shí)可以使用一個(gè)高度為 var(--status-bar-height) 的 view 放在頁面頂部,避免頁面內(nèi)容出現(xiàn)在狀態(tài)欄耕餐。
  • 由于在H5端凡傅,不存在原生導(dǎo)航欄和tabbar,也是前端div模擬蛾方。如果設(shè)置了一個(gè)固定位置的居底view像捶,在小程序和App端是在tabbar上方,但在H5端會(huì)與tabbar重疊桩砰。此時(shí)可使用--window-bottom拓春,不管在哪個(gè)端,都是固定在tabbar上方亚隅。
  • 目前 nvue 在App端硼莽,還不支持 --status-bar-height變量,替代方案是在頁面onLoad時(shí)通過uni.getSystemInfoSync().statusBarHeight獲取狀態(tài)欄高度煮纵,然后通過style綁定方式給占位view設(shè)定高度懂鸵。下方提供了示例代碼

代碼塊

快速書寫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)卡 50px(可以自主更改高度) 50px

各小程序平臺(tái)酿联,包括同小程序平臺(tái)的iOS和Android的高度也不一樣终息。

Flex布局

為支持跨平臺(tái),框架建議使用Flex布局贞让,關(guān)于Flex布局可以參考外部文檔阮一峰的flex教程等周崭。

背景圖片

uni-app 支持使用在 css 里設(shè)置背景圖片,使用方式與普通 web 項(xiàng)目大體相同喳张,但需要注意以下幾點(diǎn):

  • 支持 base64 格式圖片续镇。

  • 支持網(wǎng)絡(luò)路徑圖片。

  • 小程序不支持在css中使用本地文件销部,包括本地的背景圖和字體文件摸航。需以base64方式方可使用。App端在v3模式以前舅桩,也有相同限制忙厌。v3編譯模式起支持直接使用本地背景圖和字體。

  • 使用本地路徑背景圖片需注意:

    1. 為方便開發(fā)者江咳,在背景圖片小于 40kb 時(shí),uni-app 編譯到不支持本地背景圖的平臺(tái)時(shí)哥放,會(huì)自動(dòng)將其轉(zhuǎn)化為 base64 格式歼指;

    2. 圖片大于等于 40kb爹土,會(huì)有性能問題,不建議使用太大的背景圖踩身,如開發(fā)者必須使用胀茵,則需自己將其轉(zhuǎn)換為 base64 格式使用,或?qū)⑵渑驳椒?wù)器上挟阻,從網(wǎng)絡(luò)地址引用琼娘。

    3. 本地背景圖片的引用路徑推薦使用以 ~@ 開頭的絕對(duì)路徑。

       .test2 {
           background-image: url('~@/static/logo.png');
       }
      

注意

  • 微信小程序不支持相對(duì)路徑(真機(jī)不支持附鸽,開發(fā)工具支持)

字體圖標(biāo)

uni-app 支持使用字體圖標(biāo)脱拼,使用方式與普通 web 項(xiàng)目相同,需要注意以下幾點(diǎn):

  • 支持 base64 格式字體圖標(biāo)坷备。

  • 支持網(wǎng)絡(luò)路徑字體圖標(biāo)熄浓。

  • 小程序不支持在css中使用本地文件,包括本地的背景圖和字體文件省撑。需以base64方式方可使用赌蔑。App端在v3模式以前,也有相同限制竟秫。v3編譯模式起支持直接使用本地背景圖和字體娃惯。

  • 網(wǎng)絡(luò)路徑必須加協(xié)議頭 https

  • http://www.iconfont.cn 上拷貝的代碼肥败,默認(rèn)是沒加協(xié)議頭的趾浅。

  • http://www.iconfont.cn 上下載的字體文件,都是同名字體(字體名都叫iconfont拙吉,安裝字體文件時(shí)可以看到)潮孽,在nvue內(nèi)使用時(shí)需要注意,此字體名重復(fù)可能會(huì)顯示不正常筷黔,可以使用工具修改往史。

  • 使用本地路徑圖標(biāo)字體需注意:

    1. 為方便開發(fā)者,在字體文件小于 40kb 時(shí)佛舱,uni-app 會(huì)自動(dòng)將其轉(zhuǎn)化為 base64 格式椎例;

    2. 字體文件大于等于 40kb,仍轉(zhuǎn)換為 base64 方式使用的話可能有性能問題请祖,如開發(fā)者必須使用订歪,則需自己將其轉(zhuǎn)換為 base64 格式使用,或?qū)⑵渑驳椒?wù)器上肆捕,從網(wǎng)絡(luò)地址引用刷晋;

    3. 字體文件的引用路徑推薦使用以 ~@ 開頭的絕對(duì)路徑。

       @font-face {
           font-family: test1-icon;
           src: url('~@/static/iconfont.ttf');
       }
      

nvue中不可直接使用css的方式引入字體文件,需要使用以下方式在js內(nèi)引入眼虱。nvue內(nèi)不支持本地路徑引入字體喻奥,請(qǐng)使用網(wǎng)絡(luò)鏈接或者base64形式。src字段的url的括號(hào)內(nèi)一定要使用單引號(hào)捏悬。

var domModule = weex.requireModule('dom');
domModule.addRule('fontFace', {
  'fontFamily': "fontFamilyName",
  'src': "url('https://...')"
})

示例:

<template>
    <view>
        <view>
            <text class="test">&#xe600;</text>
            <text class="test">&#xe687;</text>
            <text class="test">&#xe60b;</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>

nvue頁面的樣式注意事項(xiàng)

  1. nvue 頁面控制顯隱只可以使用v-if不可以使用v-show
  2. nvue 頁面只能使用flex布局撞蚕,不支持其他布局方式。頁面開發(fā)前过牙,首先想清楚這個(gè)頁面的縱向內(nèi)容有什么甥厦,哪些是要滾動(dòng)的,然后每個(gè)縱向內(nèi)容的橫軸排布有什么寇钉,按 flex 布局設(shè)計(jì)好界面刀疙。
  3. nvue 頁面的布局排列方向默認(rèn)為豎排(column),如需改變布局方向摧莽,可以在 manifest.json -> app-plus -> nvue -> flex-direction 節(jié)點(diǎn)下修改庙洼,僅在 uni-app 模式下生效。詳情镊辕。
  4. nvue頁面編譯為H5油够、小程序時(shí),會(huì)做一件css默認(rèn)值對(duì)齊的工作征懈。因?yàn)閣eex渲染引擎只支持flex石咬,并且默認(rèn)flex方向是垂直。而H5和小程序端卖哎,使用web渲染鬼悠,默認(rèn)不是flex,并且設(shè)置display:flex后亏娜,它的flex方向默認(rèn)是水平而不是垂直的焕窝。所以nvue編譯為H5、小程序時(shí)维贺,會(huì)自動(dòng)把頁面默認(rèn)布局設(shè)為flex它掂、方向?yàn)榇怪薄.?dāng)然開發(fā)者手動(dòng)設(shè)置后會(huì)覆蓋默認(rèn)設(shè)置溯泣。
  5. 文字內(nèi)容虐秋,必須、只能在<text>組件下垃沦。不能在<div>客给、<view>text區(qū)域里直接寫文字。否則即使渲染了肢簿,也無法綁定js里的變量靶剑。
  6. 只有text標(biāo)簽可以設(shè)置字體大小蜻拨,字體顏色。
  7. 布局不能使用百分比抬虽、沒有媒體查詢官觅。
  8. nvue 切換橫豎屏?xí)r可能導(dǎo)致樣式出現(xiàn)問題,建議有 nvue 的頁面鎖定手機(jī)方向阐污。
  9. 支持的css有限,不過并不影響布局出你需要的界面咱圆,flex還是非常強(qiáng)大的笛辟。詳見
  10. 不支持背景圖。但可以使用image組件和層級(jí)來實(shí)現(xiàn)類似web中的背景效果序苏。因?yàn)樵_發(fā)本身也沒有web這種背景圖概念
  11. css選擇器支持的比較少手幢,只能使用 class 選擇器。詳見
  12. nvue 的各組件在安卓端默認(rèn)是透明的忱详,如果不設(shè)置background-color围来,可能會(huì)導(dǎo)致出現(xiàn)重影的問題。
  13. class 進(jìn)行綁定時(shí)只支持?jǐn)?shù)組語法匈睁。
  14. Android端在一個(gè)頁面內(nèi)使用大量圓角邊框會(huì)造成性能問題监透,尤其是多個(gè)角的樣式還不一樣的話更耗費(fèi)性能。應(yīng)避免這類使用航唆。
  15. nvue頁面沒有bounce回彈效果胀蛮,只有幾個(gè)列表組件有bounce效果,包括 list糯钙、recycle-list粪狼、waterfall
  16. 原生開發(fā)沒有頁面滾動(dòng)的概念任岸,頁面內(nèi)容高過屏幕高度并不會(huì)自動(dòng)滾動(dòng)再榄,只有部分組件可滾動(dòng)(listwaterfall享潜、scroll-view/scroller)困鸥,要滾得內(nèi)容需要套在可滾動(dòng)組件下。這不符合前端開發(fā)的習(xí)慣米碰,所以在 nvue 編譯為 uni-app模式時(shí)窝革,給頁面外層自動(dòng)套了一個(gè) scroller,頁面內(nèi)容過高會(huì)自動(dòng)滾動(dòng)吕座。(組件不會(huì)套虐译,頁面有recycle-list時(shí)也不會(huì)套)。后續(xù)會(huì)提供配置吴趴,可以設(shè)置不自動(dòng)套漆诽。
  17. 在 App.vue 中定義的全局js變量不會(huì)在 nvue 頁面生效。globalDatavuex是生效的。
  18. App.vue 中定義的全局css厢拭,對(duì)nvue和vue頁面同時(shí)生效兰英。如果全局css中有些css在nvue下不支持,編譯時(shí)控制臺(tái)會(huì)報(bào)警供鸠,建議把這些不支持的css包裹在條件編譯里畦贸,APP-PLUS-NVUE
  19. 不能在 style 中引入字體文件,nvue 中字體圖標(biāo)的使用參考:加載自定義字體楞捂。如果是本地字體薄坏,可以用plus.io的API轉(zhuǎn)換路徑。
  20. 目前不支持在 nvue 頁面使用 typescript/ts寨闹。
  21. nvue 頁面關(guān)閉原生導(dǎo)航欄時(shí)胶坠,想要模擬狀態(tài)欄,可以參考文章繁堡。但是沈善,仍然強(qiáng)烈建議在nvue頁面使用原生導(dǎo)航欄。nvue的渲染速度再快椭蹄,也沒有原生導(dǎo)航欄快闻牡。原生排版引擎解析json繪制原生導(dǎo)航欄耗時(shí)很少,而解析nvue的js繪制整個(gè)頁面的耗時(shí)要大的多塑娇,尤其在新頁面進(jìn)入動(dòng)畫期間澈侠,對(duì)于復(fù)雜頁面,沒有原生導(dǎo)航欄會(huì)在動(dòng)畫期間產(chǎn)生整個(gè)屏幕的白屏或閃屏埋酬。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末哨啃,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子写妥,更是在濱河造成了極大的恐慌拳球,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件珍特,死亡現(xiàn)場(chǎng)離奇詭異祝峻,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)扎筒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嗜桌,“玉大人奥溺,你說我怎么就攤上這事」浅瑁” “怎么了浮定?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵相满,是天一觀的道長。 經(jīng)常有香客問我桦卒,道長立美,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任方灾,我火速辦了婚禮建蹄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘迎吵。我一直安慰自己躲撰,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布击费。 她就那樣靜靜地躺著,像睡著了一般桦他。 火紅的嫁衣襯著肌膚如雪蔫巩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天快压,我揣著相機(jī)與錄音圆仔,去河邊找鬼。 笑死蔫劣,一個(gè)胖子當(dāng)著我的面吹牛坪郭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播脉幢,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼歪沃,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了嫌松?” 一聲冷哼從身側(cè)響起沪曙,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎萎羔,沒想到半個(gè)月后液走,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡贾陷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年缘眶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片髓废。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡巷懈,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出瓦哎,到底是詐尸還是另有隱情砸喻,我是刑警寧澤柔逼,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站割岛,受9級(jí)特大地震影響愉适,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜癣漆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一维咸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧惠爽,春花似錦癌蓖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至较性,卻和暖如春用僧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背赞咙。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工责循, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人攀操。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓院仿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親速和。 傳聞我的和親對(duì)象是個(gè)殘疾皇子歹垫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345