移動端全相容的flexbox速成班

来源:http://www.cnblogs.com/sybboy/archive/2016/12/22/6211845.html
-Advertisement-
Play Games

說起flexbox,都算是件陳年舊事了,它是2009年W3C提出的一種全新的可伸縮的CSS佈局方式。依賴flexbox,我們可以更簡單,高效的完成可伸縮式頁面的佈局。 業界與flexbox的相關教程文章也是各式各樣,新舊交替,很多小伙伴對flexbox想用又不敢用,究其原因也就是即分不清它各個版本的 ...


說起flexbox,都算是件陳年舊事了,它是2009年W3C提出的一種全新的可伸縮的CSS佈局方式。依賴flexbox,我們可以更簡單,高效的完成可伸縮式頁面的佈局。

業界與flexbox的相關教程文章也是各式各樣,新舊交替,很多小伙伴對flexbox想用又不敢用,究其原因也就是即分不清它各個版本的編寫規範,又苦惱於大家總是掛在嘴邊的一句“flexbox相容性不好”。 所以今兒前來總結一個精華乾貨貼,回顧那些樓主在項目里用過的flexbox,來談談那些不用苦惱“相容”的flexbox最佳實例(本文只聊移動端)。

Part1 先聊聊歷史:

在2009年最早版本的Flexbox規範中,我們編寫為“display:box;”,

中期版本的Flexbox;我們編寫為“display:flexbox;”

而目前的規範版本,我們定義“display:flex;”。flexbox規範的制定可謂是艱辛百變,

但目前使用的最新版本草案已於今年3-1日正式進入W3C的候選推薦標準(Candidate Recommendation)階段,這也就意味著關於flexbox的最終規範即將落地。

 

Part2 版本VS相容:

如下圖所示,除了Opera mobile12,移動端的各大瀏覽器都是支持flexbox的舊版語法的,但不包含flex的wrap屬性。

f0b0f7f4cb60214b68134b93e533519b1462414570

 

Part3 信手拈來的flexbox最佳實例

(以下代碼片段均遵循flexbox移動端全相容性寫法,已驗證機型列表見文章最後) 我們先來回顧一下flexbox的屬性體系:直白的解釋,我們常說的“flexbox”其實包含“父元素”,“子元素”2個部分,將“父元素”定義為一個flexbox,則在"父元素"里的“子元素們”就被賦予了可以自由伸縮的能力。 賦予神奇能力的代碼片段如下:

1461219668_27_w530_h333

 

1.用flex做提示icon

這裡用到了flex父元素的“align-items”屬性。 指定元素沿側軸對齊方式 align-item: flex-start | flex-end | center | space-between | space-around | stretch;1461221174_44_w510_h267

一句屬性設置,就可以完成頂部對齊,居中對齊或是底部對齊的切換,簡單方便值得擁有。

【Demo Link】: http://jsfiddle.net/tikizzz/2zuthdap/

 

2.用flex做列表元素

同樣,只需要用flex父元素的“align-items”屬性,就可以製作靈活多變的列表元素了。如下圖所示,3種狀態的變形都不需要修改CSS文件,只需要按需隱藏DOM結構就搞定。

這裡多註意1個Tips:像下圖例子中的左側圖片,右側按鈕這些固定寬度的子元素,不需要增加“flex:1”的能力,維持原樣即可。

1461228286_57_w715_h241

1461228394_76_w434_h246

【Demo Link】: https://jsfiddle.net/tikizzz/ztdfq5dw/

 

3.用flex做tab

做均分的tab,應該是flexbox最常見的一個功能了,實現原理很簡單,只需要給“父元素”,“子元素”分別賦予“display:flex”,"flex:1"即可。子元素的寬度不會根據內容的長短而發生改變。如下圖所示,前臺同學增加或刪減tab數量,只需要增減DOM結構即可,無需樣式的修改。

1461229159_57_w372_h172

★重點相容TIPS:  在舊版的規範中,使用比例伸縮佈局時,子元素的內容長短不同會導致無法“等分”,這個時候,我們需要給子元素設置一個“width:0%”來解決問題。 ★重點相容TIPS:  不要給flexbox里的子元素設置“margin:auto”的屬性,在部分安卓機下,它會導致該元素的寬度撐開到100%占位

1461229059_14_w712_h491

【Demo Link】: https://jsfiddle.net/tikizzz/ztdfq5dw/

 

4.用flex做導航(只適合三項的佈局) 一樣也是利用align-items的屬性即可,就可以輕鬆完成flexbox的導航製作。

1461232939_96_w378_h189

但是導航變成單按鈕佈局的時候,會導致標題欄的位位移,不是特別的推薦。

1461232914_37_w372_h113

【Demo Link】: https://jsfiddle.net/tikizzz/g2Lj417p/

 

5.用flex做搜索條 利用align-items的屬性,還可以輕鬆完成flexbox的搜索條製作。

1461233311_57_w375_h217

【Demo Link】:https://jsfiddle.net/tikizzz/yut2qv9b/

 

6.用flex做垂直居中(單/多)

前面說的5個實例,其實都只用到了flexbox的基礎屬性+“align-items”屬性。千萬不要以為結束了,flexbox還可以做更多的事。例如一直很困擾我們的“垂直居中”:flexbox可以輕鬆實現不定寬高,不限數量的元素“水平+垂直居中”在屏幕中。

1461233679_22_w369_h524

這部分用到了flexbox的另外一個屬性:指定元素沿主軸對齊方式 justify-content: flex-start | flex-end | center space-between | space-around; 將“沿著主軸對齊方式+沿著側軸對齊的方式”設置為居中,無論子元素是什麼形態,都可以隨時隨地的“水平垂直居中”了。

1461248777_68_w573_h505

【Demo Link】:https://jsfiddle.net/tikizzz/zq8cdkfg/

 

7.用flex做垂直彈性佈局

頂部欄,底部欄fixed,中間的元素支持滾動條,這是移動端常見的頁面結構模型,我們熟稱為“垂直彈性佈局”。使用傳統的flxed寫法總是會給一些安卓機帶來無法避免的煩人bug。其實只要巧妙利用flexbox的轉換方向的屬性,就可以輕鬆實現這個結構模型了。如下圖,其實也就是一個橫著的彈性伸縮模型,倒轉垂直的彈性伸縮模型了。

1462272672_29_w502_h484

這部分用到了flexbox的方向屬性:指定主軸的伸縮流方向 flex-direction: row | column ; 這裡註明一下,box-orient,box-direction是最老版本flex-box控制方向的2種寫法,預設方向均為橫向,為保證相容性,我們需要將它們2條都寫全。

1462272772_57_w458_h235

【Demo Link】:https://jsfiddle.net/tikizzz/obLp1mga/

最後,附贈一個全DEMO的合集:http://115.159.36.96/tikizheng/flextest/demo.html

 

Part4 其他

希望以上的demo對移動端開發的小伙伴們有用。當然,flexbox還有一些很帥氣的屬性,例如order,wrap等等,它們只是暫時還不被移動端所有的系統相容,咋們的x5內核已經剛剛表示全面相容flexbox的所有屬性。關於flexbox的未來我們敬請期待就好! 另,附贈  <<移動端屬性全相容自查表>>

 

已測機型

1462416787_29_w869_h415

 

備註:

1.以上機型是根據友盟,應用寶,微信及騰訊雲運營活動數據統計整合得出的Top7機型。

2.Top8-10的華為,oppo,魅族機型挑選於各品牌的占比最高機型,為品牌差異性測試而存在。

3.黃色標註的解析度為Top6的熱門解析度,占比超過iOS市場87%,Android市場的50%(安卓解析度太多,剩餘50%解析度占比較為均分零散,故暫不列入必測範圍)。

4.iOS8.0+,Android4.0+涵蓋了移動端90%的系統,其中iOS9.0+占比超過65%,Android4.4+占比超過60%,測試用例不強行要求涵蓋各機型所有版本的系統,以最新版本為準,若因老版本出現bug次數大於3次,再加設為必測的問題版本。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這篇筆記是官方教程的延續筆記,所有代碼基於第一篇筆記的結尾代碼。旨在解決教程後面提出的五個問題。 一 . 用(X,Y)來取代原有的數字坐標 原來的數字坐標是這樣的: 現在的要求是把原來的代碼坐標改為二維坐標系的表達形式,並且在歷史記錄面板中打出轉換後的坐標。 如果只是為了輸出好看。只需要寫一個轉換方 ...
  • 前面的話   HTML文檔通常以類型聲明開始,該聲明將幫助瀏覽器確定其嘗試解析和顯示的HTML文檔類型。本文將詳細介紹文檔聲明DOCTYPE   特點   文檔聲明必須是HTML文檔的第一行、且頂格顯示,對大小寫不敏感。因為任何放在DOCTYPE前面 ...
  • 1、<img> <input> tags are self-closing. So that there is only one tag without a slash in front of the closing angle bracket. To be continued ... ...
  • 項目中碰到一個十分有趣的情形: 佈局要求是這樣:右邊創建新訂單是固定寬度80px,左側是自適應寬度,溢出隱藏。如下圖。 這裡佈局不用說肯定使用display:flex的。左側flex:1;右側width:80px;。 本來在我的機器上是各種ok的,可是交給後端的兄弟們後發現在他的機器上左側並沒有fl ...
  • 點擊按鈕彈出上傳文件的視窗 1.詳細描述 在頁面上設置一個“選擇文件”按鈕,點擊該按鈕,會彈出本地磁碟信息用於選擇文件。 2.代碼 3.操作示例 將代碼複製到W3CSchool的測試頁面,提交運行之後如圖:在查看結果頁面會出現“選擇文件”這個按鈕 之後點擊“選擇文件”後如圖:頁面上會出現彈窗,顯示本 ...
  • 因關註公眾號《HTML5學堂》看到這篇文章 “利用本地存儲,記錄滾動條的位置” ,便好奇敲來試試,然後又看了一些關於WebStorage的資料 附上這篇文章的地址 https://mp.weixin.qq.com/s/z34GRUZvDU2hCbH6Kc_ZDA 與大家共勉。 在網上搜了一些記錄滾動 ...
  • [1]概述 [2]段落 [3]換行 [4]標題 [5]區塊 [6]列表 [7]分隔線 [8]鏈接 [9]圖片 [10]代碼 [11]強調 [12]空兩格 ...
  • 正則表達式 1.概念 正則表達式是一種含有某種規則的模式,被用來檢索、替換符合給定模式的文本。 全稱為 Regular Expression,在 JavaScript 中簡寫為 RegExp。 2.字元 常用的元字元如下: \ 轉義符,例如匹配符號"*",則要寫成"\*"。因為有些特殊字元是元字元, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...