天天看點

微信小程式開發筆記(三)flex布局和自适應機關rpx

參考教材:《微信小程式開發入門與實踐》 雷磊

前置知識:JavaScript,CSS

什麼是flex布局

在上一篇部落格裡,筆者在hello.wxss 裡使用了

display: flex;

。什麼是flex呢?

微信小程式開發筆記(三)flex布局和自适應機關rpx

flex布局是W3c組織在2009年提出的一個新的布局方案,其宗旨是讓頁面的布局樣式更加簡單,并且可以很好地支援

響應式布局

。這并不是小程式所獨有的技術,它本身是CSS文法的一部分。隻不過早期時候,主流的浏覽器對flex布局的支援并不完善,造成了開發者并不知道與這種布局方式的存在或者使用非常少,我們還是習慣使用傳統的position和float屬性來布局。但傳統的布局方式有它的缺陷 ,比如垂直居中就不是那麼容易實作,flex布局可以很好的解決這些問題。現在,小程式能夠非常好的支援flex布局,并且這也是官方推薦的布局方式。

響應式布局

上面提到了

響應式布局

這一個概念,這個概念是為解決移動網際網路浏覽而誕生的,主要為了解決同一個WEB頁面在不同裝置和環境中均能獲得一緻性使用者體驗的問題。在設計頁面的時候,為了友善,我們通常隻在某一種分辨率下預覽我們的界面,比如上一篇部落格裡,筆者就選擇了iPhone6作為模拟的機型預覽小程式的頁面。響應式布局的目标就是在其他移動裝置(比如ipad,各種不同分辨率的安卓手機)通路該界面的時候,頁面的整體布局不發生改變。我們之前設計hello頁面用到的flex布局其實就是響應式布局,該頁面在Nexus5和ipad pro上通路的時候,不會由于分辨率的不同而造成頁面結構的改變。

微信小程式開發筆記(三)flex布局和自适應機關rpx
微信小程式開發筆記(三)flex布局和自适應機關rpx

flex布局的簡單使用

display: flex

主要作用在容器上,比如

view

元件就是一個容器。設定

display: flex

是使用flex布局的先決條件。

然後我們來了解

的概念。類似平面直角坐标系中有不同方向的兩條軸(X軸和Y軸)一樣,使用Flex布局的容器内也有兩條隐形的軸,一條稱為

主軸

,另一條稱為

交叉軸

,兩條

軸也互相垂直。我們隻需要通過

flex-direction

指定

主軸

的方向,另一方向的軸自動成為

交叉軸

flex-direction: column; 主軸垂直,方向自上而下,交叉軸為水準方向
  flex-direction: column-reverse;主軸垂直,方向自下而上,交叉軸為水準方向
  flex-direction: row;主軸水準,方向自左向右,交叉軸為垂直方向
  flex-direction: row-reverse;主軸垂直,方向自右向左,交叉軸為垂直方向
           

下面四張圖中,紅色的箭頭代表的是主軸方向,容器内的元素在主軸方向上按順序排列。

微信小程式開發筆記(三)flex布局和自适應機關rpx
微信小程式開發筆記(三)flex布局和自适應機關rpx
微信小程式開發筆記(三)flex布局和自适應機關rpx
微信小程式開發筆記(三)flex布局和自适應機關rpx

另外,我們還用到了一個

align-items:center

屬性,這個是設定容器元素在交叉軸上的位置,

center

代表在交叉軸上居中,當然還可以設定其他的值,不過這是css的知識了,讀者自行嘗試,在這裡就不贅述了。

最後,列出在wxml中的其他容器,如下:

元件名 說明
view 視圖容器
scroll-view 可滾動視圖容器
swiper 滑塊視圖容器
movable-view/movable-area 可移動的視圖容器
cover-view 覆寫在原生元件之上的文本視圖
cover-image 覆寫在原生元件之上的圖檔視圖

自适應機關rpx

大家應該注意到了,在hello.wxss樣式表裡,絕大多數長度機關都設定的是

rpx

這個全新的機關。比如設定圖檔大小的時候。

微信小程式開發筆記(三)flex布局和自适應機關rpx

要透徹的了解rpx這個機關,還需要對移動端的分辨率有一定的了解,比如實體分辨率px和邏輯分辨率pt等概念。簡單的說,rpx将随着螢幕尺寸的變換而變換,但px不會。這裡我們隻需要記住如下的結論:

在iPhone6的寬度750個實體像素作為标準來做設計圖,1實體像素=1rpx=0.5px,

比如在iPhone6寬度750實體像素下,要顯示一張寬和高都是200像素*200像素的圖檔,就要把圖檔的高度和寬度都設定為

200rpx

,或者

100px

,這時候在iphone6上的顯示的效果都是一樣的,但是我們換到其他機型的時候,就會出現差異。因為rpx将随着螢幕尺寸的變換而變換,但px不會改變大小。

下面做個嘗試,在iPhone6尺寸下,将圖檔的機關改為px,圖檔的大小沒有發生改變,然後把模拟器切換都ipad pro ,圖檔還是一樣的大小(但是相對于整個頁面來說,變小了),即px作為機關的時候,不會由于頁面的變大,該改變大小。

微信小程式開發筆記(三)flex布局和自适應機關rpx
微信小程式開發筆記(三)flex布局和自适應機關rpx

注意:隻有在iPhone6尺寸下,1實體像素=1rpx=1px才成立

,官方推薦使用iPhone6的尺寸标準來設計界面。

rpx和px 之間的選擇

在進行移動開發的時候,我們經常要考慮不同分辨率下頁面的顯示情況。比如對于

margin

屬性或者

image

元件,很多時候,需要他們随着裝置的尺寸不同動态的變化,以保持頁面元素之間的分布可以保持

一定的比例關系

但有時候,比如boder屬性(設定邊框的樣式),我們不需要它動态變化。如果随着頁面的放大,邊框的線條變得越來越寬,頁面就不好看了。

是以選擇使用rpx還是px需要看實際情況,此外也需要讀者自己去多多嘗試