1. 程式人生 > >小程式開發必看!一篇文章讓你瞭解 Flex 佈局

小程式開發必看!一篇文章讓你瞭解 Flex 佈局

第九程式註明:

要想開發小程式,每個人都需要先了解 Flex。小程式的開發框架使用了 Flex 排版佈局,它能幫助開發者以最快的速度,構建美觀而具有動態調整性質的小程式排版。

但是,Flex 在目前為止尚未大範圍地推廣和使用,甚至許多前端開發者,在上手小程式開發後才知道 Flex。

那麼,使用 Flex 到底有什麼優勢?Flex 中有多少排版模式?如何正確使用 Flex 排版?

今天,就來帶大家看看 Flex 的正確使用方法。希望本文可以幫助大家,利用好 Flex 構建具有良好體驗的小程式。

文 | 姜家志

微信小程式頁面佈局方式採用 Flex 佈局格式,它是 W3c 在 2009 年提出的一種新的網頁排版方案,可以簡便、完整地實現各種響應式頁面佈局。

Flex 佈局的主要特點是:能夠讓同級元素在不同的螢幕大小中,用最適合的方法填充空間。同時,Flex 提供了元素在容器中的對齊方式、對齊方向以及元素順序,甚至被編排的元素可以是動態的或是不確定的大小的。

flex-3

Flex 佈局有如下特點:

  • 任意方向的伸縮
  • 在樣式層可以調換和重排順序
  • 主軸和側軸方便配置
  • 子元素的空間拉伸和填充
  • 沿容器對齊

本文將會簡單介紹 Flex 佈局在微信小程式中的使用。

伸縮容器

在小程式中,設有 display: flex 或者 display: block 的元素就是一個 flex container(伸縮容器),裡面的子元素稱為 flex item(伸縮專案)。在 flex container 中,子元素都可以使用 Flex 進行佈局。

  • display: block 指定為塊內容器模式,總是使用新行開始顯示,微信小程式的檢視容器(view、scroll-view 和 swiper)會預設設定 display: block;
  • display:flex:指定為行內容器模式。在一行內顯示的子元素,可以使用 flex-wrap 屬性指定其是否換行、如何換行。flex-wrap 有三個值:nowrap(不換行)、wrap(向下換行),以及 wrap-reverse(向上換行)。

假設我們有以下的程式碼:

<view class="flex-row" style="display: block;">
<view class="flex-view-item">1</view>
<view class="flex-view-item">2</view>
<view class="flex-view-item">3</view>
</view>

使用 display: block(預設值)時,顯示效果如下:

flex-2

改換成 display: flex 後,顯示效果如下:

flex-1

我們可以從效果圖中清楚地看出 block 和 flex 的區別,即子元素 view 換行顯示(block)和行內顯示(flex)的差異。

主軸和側軸

Flex 佈局的伸縮容器可以使用任何方向進行佈局。

預設情況下,容器有主軸(main axis)和側軸(cross axis)兩種軸。

主軸的開始位置為主軸起點(main start),主軸的結束位置為主軸終點(main end),而主軸的長度為主軸長度(main size)。

同理側軸的起點為側軸起點(cross start),結束位置為側軸終點(cross end),長度為側軸長度(cross size)。

flex-4

注意,主軸並不是一定是從左到右的,同理側軸也不一定是從上到下。主軸的方向可以使用 flex-direction 屬性控制,它有 4 個可選值:

  • row :從左到右的水平方向
  • row-reverse:從右到左的水平方向
  • column:從上到下的垂直方向
  • column-reverse:從下到上的垂直方向

如果水平方向為主軸,那個垂直方向就是側軸,反之亦然。

四種主軸方向設定的效果圖:

flex-5

圖中的例項展示了使用了不同的flex-direction值排列方向的區別。例項程式碼:

<view>
<view class="flex-row" style="display: flex; flex-direction: row;">
<view class="flex-view-item">1</view>
<view class="flex-view-item">2</view>
<view class="flex-view-item">3</view>
</view>
<view class="flex-column" style="display: flex; flex-direction: column;" >
<view class="flex-view-item">c1</view>
<view class="flex-view-item">c2</view>
<view class="flex-view-item">c3</view>
</view>
</view>

執行效果:

flex-6

對齊方式

子元素有兩種對齊方式:

  • justify-conent 定義子元素在主軸上面的對齊方式;
  • align-items 定義子元素在側軸上對齊的方式。

justify-content 有 5 個可選的對齊方式:

  • flex-start:主軸起點對齊(預設值);
  • flex-end:主軸結束點對齊;
  • center:在主軸中居中對齊;
  • space-between:兩端對齊,除了兩端的子元素分別靠向兩端的容器之外,其他子元素之間的間隔都相等;
  • space-around:每個子元素之間的距離相等,兩端的子元素距離容器的距離也和其它子元素之間的距離相同。

justify-content 的對齊方式和主軸的方向有關。下圖以 flex-direction 為 row,主軸方式是從左到右,描述 justify-content 5 個值的顯示效果:

flex-7

align-items 表示側軸上的對齊方式:

  • stretch:填充整個容器(預設值);
  • flex-start:側軸的起點對齊;
  • flex-end:側軸的終點對齊;
  • center:在側軸中居中對齊;
  • baseline:以子元素的第一行文字對齊。

align-tiems 設定的對齊方式,和側軸的方向有關。下圖以 flex-direction 為 row,側軸方向是從上到下,描述 align-items 的 5 個值顯示效果:

flex-8

有了主軸和側軸的方向再加上設定他們的對齊方式,就可以實現大部分的頁面佈局了。

希望大家可以通過本文,熟悉 Flex 佈局,開發出體驗更好的小程式。

相關推薦

程式開發文章瞭解 Flex 佈局

第九程式註明: 要想開發小程式,每個人都需要先了解 Flex。小程式的開發框架使用了 Flex 排版佈局,它能幫助開發者以最快的速度,構建美觀而具有動態調整性質的小程式排版。 但是,Flex 在目前為止尚未大範圍地推廣和使用,甚至許多前端開發者,在上手小程式開發後才知

文章瞭解GC垃圾回收器

簡單瞭解GC垃圾回收器 瞭解GC之前我們首先要了解GC是要做什麼的?顧名思義回收垃圾,什麼是垃圾呢? GC回收的垃圾主要指的是回收堆記憶體中的垃圾物件。 從根物件出發,所有被引用的物件,都是存活物件 其他物件,都是垃圾物件。  根物件:    棧中的引用變數,所引用的物

文章瞭解大資料採集技術

大資料開啟了一個大規模生產、分享和應用資料的時代,它給技術和商業帶來了巨大的變化。麥肯錫研究表明,在醫療、零售和製造業領域,大資料每年可以提高勞動生產率0.5-1個百分點。大資料在核心領域的滲透速度有目共睹,然而調查顯示,未被使用的資訊比例高達99.4%,很大程度都是由於高價值的資訊無法獲取採集。因

#文章瞭解四種執行緒池,學習Java不在困惑

在Java開發中,有時遇到多執行緒的開發時,直接使用Thread操作,對程式的效能和維護上都是一個問題,使用Java提供的執行緒池來操作可以很好的解決問題,於是找了下API看到Java提供四種執行緒池使用,Java通過Executors提供四種執行緒池,分別為: 1、newCachedThrea

文章瞭解MySQL

一篇文章帶你讀懂MySQL 作為一名開發人員來說,資料庫知識是必不可少的,博主曾經年少無知的時候因為不瞭解資料庫而被京東拒之門;無論是基於檔案的Sqlite,還是工程上使用很多的MySQL、PostgreSQL/SQL Server;但是都沒有對資料庫有一個清

文章瞭解微服務SpringCloud--------精煉總結

什麼是微服務?為什麼使用微服務? 在講解SpringCloud之前 我們必須要談論一個重要的內容,到底什麼是微服務,想必大家在網上查詢之後有海量的答案讓人眼花繚亂,所以在這裡我們就先一起探討一下微服務到底是什麼神奇的東西. 可能大多數的java程式猿做的專案都

文章瞭解動態陣列的資料結構的實現過程(Java 實現)

[TOC] ## 陣列基礎簡單回顧 1. 陣列是一種資料結構,用來儲存**同一型別值**的集合。 2. 陣列就是**儲存資料長度固定的容器**,保證**多個數據的資料型別要一致**。 3. 陣列是一種**引用資料型別**。 4. 簡單來說,陣列就是把需要儲存的資料排成一排進行存放。 5. 陣列的索引從 *

程式設計師過這文章 學會閱讀原始碼

摘要:隨著越來越多的公司使用敏捷開發,能夠閱讀別人的程式碼比以往顯得更重要。這就需要學習一些如何提高這項技能的技巧。本文提供了幾種提高程式碼閱讀技巧的方法。 在軟體開發人員的職位描述中有閱讀原始碼。然而,這體驗並不總能令人愉悅。不是每個人都喜歡閱讀別人的程式碼,因為他們覺得

文章明白運維所有發展方向

導讀 網際網路運維工作,以服務為中心,以穩定、安全、高效為三個基本點,確保公司的網際網路業務能夠7×24小時為使用者提供高質量的服務。 運維人員對公司網際網路業務所依賴的基礎設施、基礎服務、線上業務進行穩定性加強,進行日常巡檢發現服務可能存在的隱患,對整體架構進行優化以

文章讀懂什麽是餐飲程序

用戶 事情 right 連接 不用 距離 掃描二維碼 left 企業 小程序火了,餐飲+小程序也火了! 作為連接線下消費場景和線上營銷的新工具,小程序出現後,迅速贏得了餐飲商家的青睞。與其說,小程序對餐飲行業“情有獨鐘”;不如說,兩者是“情投意合”。 20天

止損不見得能控制住回撤,文章認清自己的止損

結果 股票 部分 接下來 ESS 我希望 錯誤 占比 被套 首發:寬客在線 NO:01文字並不具備精確傳遞信息的能力。除了程序員和律師等少數群體,很少人能保證自己說的東西能在一句話中被清晰傳遞的。所以,帶著思考閱讀從而幫助完善你的知識體系,改變你的行為,這才是您耗費時間,閱

前端開發實用比較,文章告訴到底是用Vue還是用Angular4、5?

從Angular2時代開始,前端開發就逐漸開始用用Angular了,當時全國都沒什麼人敢碰Angular2,多數開發者就靠著啃它原始碼中的註釋,熟悉了Angular2的用法,並在實用中,還給Angular2團隊提交bug。 但是現在,Vue的出現,讓很多還沒接觸Angular多久的開發者

文章明白運維所有發展方向

運維人員對公司網際網路業務所依賴的基礎設施、基礎服務、線上業務進行穩定性加強,進行日常巡檢發現服務可能存在的隱患,對整體架構進行優化以遮蔽常見的執行故障,多資料中接入提高業務的容災能力,通過監控、日誌分析等技術手段,及時發現和響應服務故障,減少服務中斷的時間,使公司的網際網路業務符合預期的可

文章瞭解2018 大資料開發工程師必備那些技能

你好,成為一名大資料開發工程師,你需要具備的技能比較多,具體的,可以參看下面的這些點。 Java 大家都知道Java的方向有JavaSE、JavaEE、JavaME,學習大資料要學習那個方向呢?只需要學習Java的標準版JavaSE就可以了,像Servlet、JSP、To

JAVA多執行緒————文章徹底征服多執行緒開發()

多執行緒的基本概念 執行緒指程序中的一個執行場景,也就是執行流程,那麼程序和執行緒有什麼區別呢? 每個程序是一個應用程式,都有獨立的記憶體空間 同一個程序中的執行緒共享其程序中的記憶體和資源(共享的記憶體是堆記憶體和方法區記憶體,棧記憶體不共享,

文章徹底征服多執行緒開發

多執行緒的基本概念 執行緒指程序中的一個執行場景,也就是執行流程,那麼程序和執行緒有什麼區別呢? 每個程序是一個應用程式,都有獨立的記憶體空間 同一個程序中的執行緒共享其程序中的記憶體和資源(共享的記憶體是堆記憶體和方法區記憶體,棧記憶體不共享,

JAVA多執行緒————文章徹底征服多執行緒開發

多執行緒的基本概念執行緒指程序中的一個執行場景,也就是執行流程,那麼程序和執行緒有什麼區別呢?每個程序是一個應用程式,都有獨立的記憶體空間同一個程序中的執行緒共享其程序中的記憶體和資源(共享的記憶體是堆記憶體和方法區記憶體,棧記憶體不共享,每個執行緒有自己的。)什麼是程序?一

文章懂量化交易發展史

閱讀原文:http://club.jr.jd.com/quant/topic/1080077 京東金融量化交流群:417082141 一.從文藝復興科技,大獎章和HMM說起 Renaissance Technologies(Ren Tech)這家對衝基金的名字在量化圈算是如雷貫耳了。創始人數學家James

文章明白python的裝飾器

pri 9.png 不同 概念 ota 一起 數字 上下文 讀取 在看閉包問題之前先來看看關於python中作用域的問題 變量作用域 對於上述代碼中出現錯誤,肯定沒什麽疑問了,畢竟b並沒有定義和賦值,當我們把代碼更改如下後: 再看一個例子: 首先這個錯誤已經非常明顯

文章了解DNS

遞歸查詢 叠代查詢 反向解析 DNS報文格式 目錄什麽是DNSDNS的特點DNS的工作原理反向解析DNS的報文格式一、什麽是DNS DNS--Domain Name System,域名系統。 互聯網中計算機之間進行通訊,數據怎麽走,走向哪裏,這些都需要根據IP地址來