1. 程式人生 > >移動Web開發基礎-flex彈性佈局(相容寫法)

移動Web開發基礎-flex彈性佈局(相容寫法)

前言

前面我們已經分享過一篇 移動Web開發基礎-百分比+flex佈局方案 只是大概講了下這種佈局適配方案的思路,後面我們也通過分享 移動Web開發基礎-比例盒子 讓大家對百分比佈局中比較常用的等比縮放有了比較好的處理方法,本文我們來了解下flex彈性佈局,並重點了解移動端web頁面中flex彈性佈局的相容寫法。

flex初認識

Flex 是 Flexible Box 的縮寫,意為”彈性佈局”,用來為盒狀模型提供最大的靈活性。
任何一個容器都可以指定為 Flex 佈局。

.box{
  display: flex;
}
.box{
  display: inline-flex
; }

因為彈性佈局提出來的時間還是比較早的,到今天這個離2018年還有一個月的時間點上,我就暫且認為大家或多或少多flex佈局有一定的認識吧,因為作為一個寫CSS的同學,flex帶來的佈局方便性還是很大的,所以這裡就簡單介紹下,具體詳細的屬性可以學習大漠老師的這篇文章——Flexbox——快速佈局神器

flex理解

說下我對於flex的理解,就下面幾點。

一、兩種元素display: flex;
採用 Flex 佈局的元素,稱為 Flex 容器(設定display),它的所有子元素自動成為容器成員,稱為 Flex 專案,簡稱“專案”。

二、設定主軸
1.設定主軸方向:flex-direction: row/column;


主軸方向是 專案 的排列方向,預設水平方向row,專案 一行顯示,也可以設定column,專案一列顯示。主軸方向是主軸的延伸方向。

這裡寫圖片描述

2.主軸方向富裕空間管理,是指專案之間的空間的管理

justify-content: flex-start/flex-end/center/space-between/space-around;

三、設定側軸
設定好了主軸方向,就知道了主軸,與主軸垂直的即為側軸,側軸設定的專案排列方向,就是側軸方向。
側軸方向富裕空間管理:

align-items:  flex-start/flex-end/center/baseline;

四、其他屬性設定
比如設定專案的排列順序,專案的寬度等。
可以通過設定專案排列順序,調整專案的位置,專案的寬度很常見的就是定寬元素和自適應元素的配合,只需要設定自適應的那個專案flex:1

.flex--flex-order {
    -webkit-box-ordinal-group: 2;
    -moz-box-ordinal-group: 2;
    -ms-flex-order: 2;
    -webkit-order: 2;
    order: 2
}
.flex--flex-grow-all > * {
    -webkit-box-flex: 1;
    -moz-box-flex: 1;
    -webkit-flex: 1;
    -ms-flex: 1;
    flex: 1
}

flex相容

大家可能知道,flex是有好幾個版本的,早期的flex寫法是-webkit-box;,而且屬性的差異比較大,大家可以先感受下定義一個容器的寫法

.flex {
    display: -webkit-box;
    display: -moz-box;
    display: -ms-flexbox;
    display: -webkit-flex;
    display: flex;
}

設定主軸空間平均分配

.flex--justify-content--space-between {
    -webkit-box-pack: justify;
    -moz-box-pack: justify;
    -ms-flex-pack: justify;
    -webkit-justify-content: space-between;
    justify-content: space-between;
}

可以看到寫法還是比較繁雜和差異大的,所以接下來我們就來看下flex的相容寫法,這裡我先建議大家閱讀大漠老師的文章 使用Flexbox:新舊語法混用實現最佳瀏覽器相容

最理想的辦法是寫一個瀏覽器外掛,用外掛設定好我們的佈局之後生成相容程式碼直接拷貝,感覺會比較爽,不知道有沒有這種東西呢,好像之前有看過同學開發。

補充20180105

最近把上面說到的這個想法實現了,用vue寫了一個Chrome瀏覽器外掛,大家可以先預覽一下,原始碼我已經開源到github上了,雖然不一定有人會去用。如果你希望用上它的話,可以到GitHub上下載下來,要是能順手給個star就非常感謝了。https://github.com/xiangshuo1992/play-flexbox

補充完!有了這個外掛,後面的這些話可以當笑話看了。

說下我的辦法是,我把常用的這些佈局寫法寫在一個txt檔案裡,然後用到flex佈局的時候就拷貝出來,當然,如果是移動端頁面,flex相容寫法裡面可以去掉moz和ms字首的寫法了。

當然這也是在沒有構建工具開發的情況下,我們也可以通過構建工具把這些相容寫法補全。

大家也可以直接拷貝如下程式碼:

.flex {
    display: -webkit-box;
    display: -moz-box;
    display: -ms-flexbox;
    display: -webkit-flex;
    display: flex;
}

.flex.flex--reverse {
    -webkit-box-orient: horizontal;
    -moz-box-orient: horizontal;
    -webkit-box-direction: reverse;
    -moz-box-direction: reverse;
    -webkit-flex-direction: row-reverse;
    -ms-flex-direction: row-reverse;
    flex-direction: row-reverse;
}

.flex--row {
    -webkit-box-orient: vertical;
    -moz-box-orient: vertical;
    -webkit-box-direction: normal;
    -moz-box-direction: normal;
    -webkit-flex-direction: column;
    -ms-flex-direction: column;
    flex-direction: column;
}

.flex--row.flex--reverse {
    -webkit-box-orient: vertical;
    -moz-box-orient: vertical;
    -webkit-box-direction: reverse;
    -moz-box-direction: reverse;
    -webkit-flex-direction: column-reverse;
    -ms-flex-direction: column-reverse;
    flex-direction: column-reverse;
}

.flex--justify-content--space-between {
    -webkit-box-pack: justify;
    -moz-box-pack: justify;
    -ms-flex-pack: justify;
    -webkit-justify-content: space-between;
    justify-content: space-between;
}

.flex--justify-content--space-around {
    -webkit-box-pack: justify;
    -moz-box-pack: justify;
    -ms-flex-pack: distribute;
    -webkit-justify-content: space-around;
    justify-content: space-around;
}

.flex--justify-content--center {
    -webkit-box-pack: center;
    -moz-box-pack: center;
    -ms-flex-pack: center;
    -webkit-justify-content: center;
    justify-content: center;
}

.flex--justify-content--start {
    -webkit-box-pack: start;
    -moz-box-pack: start;
    -ms-flex-pack: start;
    -webkit-justify-content: flex-start;
    justify-content: flex-start;
}

.flex--justify-content--end {
    -webkit-box-pack: end;
    -moz-box-pack: end;
    -ms-flex-pack: end;
    -webkit-justify-content: flex-end;
    justify-content: flex-end;
}

.flex--align-items--start {
    -webkit-box-align: start;
    -moz-box-align: start;
    -ms-flex-align: start;
    -webkit-align-items: flex-start;
    align-items: flex-start;
}

.flex--align-items--end {
    -webkit-box-align: end;
    -moz-box-align: end;
    -ms-flex-align: end;
    -webkit-align-items: flex-end;
    align-items: flex-end;
}

.flex--align-items--center {
    -webkit-box-align: center;
    -moz-box-align: center;
    -ms-flex-align: center;
    -webkit-align-items: center;
    align-items: center;
}

.flex--align-items--baseline {
    -webkit-box-align: baseline;
    -moz-box-align: baseline;
    -ms-flex-align: baseline;
    -webkit-align-items: baseline;
    align-items: baseline;
}

.flex--align-items--stretch {
    -webkit-box-align: stretch;
    -moz-box-align: stretch;
    -ms-flex-align: stretch;
    -webkit-align-items: stretch;
    align-items: stretch;
}

/*.flex--flex-order {
    -webkit-box-ordinal-group: 2;
    -moz-box-ordinal-group: 2;
    -ms-flex-order: 2;
    -webkit-order: 2;
    order: 2
}*/
.flex--flex-grow-all > * {
    -webkit-box-flex: 1;
    -moz-box-flex: 1;
    -webkit-flex-grow: 1;
    -ms-flex-grow: 1;
    flex-grow: 1
}
.flex--flex-grow-last :last-child {
    -webkit-box-flex: 1;
    -moz-box-flex: 1;
    -webkit-flex-grow: 1;
    -ms-flex-grow: 1;
    flex-grow: 1
}

.flex--flex-grow-middle :nth-child(2) {
    -webkit-box-flex: 1;
    -moz-box-flex: 1;
    -webkit-flex-grow: 1;
    -ms-flex-grow: 1;
    flex-grow: 1
}

.flex-center-wrapper {
    display: -webkit-box;
    display: -moz-box;
    display: -ms-flexbox;
    display: -webkit-flex;
    display: flex;

    -webkit-box-pack: center;
    -moz-box-pack: center;
    -ms-flex-pack: center;
    -webkit-justify-content: center;
    justify-content: center;

    -webkit-box-align: center;
    -moz-box-align: center;
    -ms-flex-align: center;
    -webkit-align-items: center;
    align-items: center;
}

相關推薦

移動Web開發基礎-flex彈性佈局相容寫法

前言 前面我們已經分享過一篇 移動Web開發基礎-百分比+flex佈局方案 只是大概講了下這種佈局適配方案的思路,後面我們也通過分享 移動Web開發基礎-比例盒子 讓大家對百分比佈局中比較常用的等比縮放有了比較好的處理方法,本文我們來了解下flex彈性佈局,並

《HTML5移動web開發指南》——筆記3本地儲存

HTML5本地儲存規範中,定義兩個API  1)Web Storage 2)本地資料庫 Web SQL Database 以下主要介紹Web Storage: Web Storage的作用是在網站中把有用的資訊儲存到本地的計算機或者移動裝置上,根據實際需求從本地

移動Web開發基礎-百分比+flex佈局方案

前言 移動端適配是一個非常繁瑣的問題,當然,只要掌握了一些基礎的佈局方式之後,適配問題也不再是大問題。其實也沒有非常死板的適配方案,一般實際開發過程中也是根據專案實際情況採取不同的適配方案或者混合使用幾種。目前常用的佈局適配方案有百分比+flex佈局;以淘寶首

指尖上行--移動前端開發進階之路讀書筆記----1.1頁面佈局

chapter 1 移動頁面開發 頁面佈局 頁面除錯 常用庫和框架 1.1 頁面佈局 1.1.1 Vieport(視口,檢視視窗) 裝置畫素 物理畫素:螢幕解析度; 裝置獨立畫素:CSS畫素(eg:IPhone5 CSS畫素是320*568p

指尖上行--移動前端開發進階之路讀書筆記----2.1動畫形式

chapter 2 技術創意形式 動畫形式 移動裝置 Web API 詳解 WebVR 創意點 2.1 動畫形式 2.1.1 CSS3 CSS3 Cascading Style Sheets 層疊樣式表。 CSS3是CSS技術的一個升級版本,

指尖上行--移動前端開發進階之路讀書筆記----1.3常用庫和框架

chapter 1 移動頁面開發 頁面佈局 頁面除錯 常用庫和框架 1.3 常用庫和框架 1.3.1 jQuery Mobile jQuery Mobile是jQuery 框架的一個元件(而非jquery的移動版本)。這個框架已經很老了,本人

移動端適配方案二 彈性佈局Flex彈性佈局+rem實現移動端適配JS+rem+viewport

前端開發工程師根據UI設計師給的設計稿進行開發。為了保證在各種螢幕上的不失真,就要根據實際螢幕寬度做等比例換算,才能寫進CSS實現如下:1、設定width=device-width 也就是將layout viewport(佈局視口)的寬度設定 為ideal viewport(

彈性佈局flex

  彈性盒佈局是CSS 3新增的功能,它具有如下幾個配套屬性: flex-flow:該屬性作用於彈性盒容器,用於控制容器內子元素的排列方式和換行方式。該屬性是一個複合屬性,由flex-direction和flex-wrap。 flex-direction:指定彈性盒容器內子元素的排列方向。該屬性支

Web開發系列【1】實用的網頁佈局PC端

在熟悉那些常用的軟體、工具後,我們正式開始開發,在前期準備工作之後,我們要做的事情是寫頁面,也就是網頁佈局。在w3c、菜鳥、慕課網等等網站上都有基礎的 HTML+CSS 知識講解,在初期學習中,跟著教程全部過一遍就差不多了。剛開始寫頁面的時候我們會迷糊,那麼多的標籤

Web開發基礎_Servlet學習_0025_專案練習

專案名稱:中國電信運營支援系統-網路版(七) 專案登記部分  jstl:import標籤 <c:import>說明  案例演示: 工程案例目錄結構 MainServlet.java package web; import java.i

Web開發基礎_Servlet學習_0029_專案練習

專案名稱:中國電信運營支援系統-網路版(十) 驗證碼 登入驗證碼 案例演示: 工程案例目錄結構  DBUtil.java package util; import java.io.IOException; import java.sql.Connec

Web開發基礎_Servlet學習_0031_專案練習十一

專案名稱:中國電信運營支援系統-網路版(十一) 登入檢查 如果不做登入檢查,會導致任何非法請求都可登入系統,系統安全系會很差。 一般登入檢查都會使用到過濾器Filter。基於此我們新增此功能。 案例演示: 工程案例目錄結構 web.xml <?xm

web前端基礎教學視訊分享html+css+js基礎教學附淘寶網站開發教程

路漫漫其修遠兮 吾將上下而求索 路很長,未來是你們的!獻給每位正在奮鬥的孩紙們。 【寫在前面】15年剛接觸前端的時候,覺得很有魅力,就好像自己能夠控制整個世界似的。 那個時候也不知道怎麼學習怎麼入門,很是苦惱,所以就在淘網上花了20元買了些教程,既然自己踩過坑,就不希望還有人像我這樣繼續

Web前端開發之響應式佈局碼動未來

Web前端開發之響應式佈局(碼動未來) 隨著移動裝置的普及,移動web在前端工程師們的工作中佔有越來越重要的位置。移動裝置更新速度頻繁,手機廠商繁多,導致的問題是每一臺機器的螢幕寬度和解析度不一樣。這給我們在編寫前端介面時增加了困難,適配問題在當下顯得越來越突出。記得剛剛開始開發移動端產品的

【HTML5移動開發】[rem + 百分比佈局] 載入抖動高度不一致解的決方法

解決移動端rem+百分比佈局載入瞬間頁面抖動(高度不一致)的方法 以下的內容和觀點未經大牛級別驗證,有錯誤的地方請大牛留言指教~! 移動端佈局有很多種,這裡我最常使用到rem+ 百分比的佈局方式(高度/字型設定rem單位,寬度設定百分比)來處理螢幕相容,這種方法在相容上是

手機移動web頁面的排版與佈局一點經驗尺寸單位相容行。

總之一句話, 儘量用mm 毫米作為標準單位. 總之一句話, 儘量用mm 毫米作為標準單位. 總之一句話, 儘量用mm 毫米作為標準單位. 採用新的相對單位 rem 首先設定html的 font-size 為根大小. html{ font-size:

微信小程式開發——Flex彈性佈局

WeChat小程式交流(QQ群:769977169)Flex彈性佈局說明圖譜Flex彈性佈局使用示例:1、水平排列,右對齊view { display: flex; justify-content:flex-end; }2、水平排列,居中對齊view { disp

Flex彈性佈局——屬性總結

Flex不止有“容器屬性”來控制底下各個子元素的佈局,還有專門用於子元素自身設定的“子元素屬性”。 緊接著上一篇,繼續總結: (二)子元素屬性 1、order 定義子元素的排列順序。數值越小,排列越靠前,預設為0。 假設有以下標籤: <d

Flex彈性佈局——屬性總結

前言 最近小程式的勢頭漸漸變猛,一方面有微信逐漸完善的生態社群,另一方面又有百度、阿里甚至頭條都開始構建自己的小程式生態。在移動端的相容需求越來越多,那麼提高開發效率自然也就成了前端的需求,Flex佈局是個好東西。 一、Flex與傳統盒子的對比 傳統佈局的核心是盒子

H5移動開發基礎多指操作、案例-相簿

多指操作、案例-相簿 多指操作 旋轉 縮放 實現安卓多指事件 案例-相簿 多指操作 // gesturestart:手指觸碰元素,螢幕上有兩個或兩個以上的手指 oBox.addEventListener