Flex布局的相容性

2021-07-10 16:52:07 字數 2156 閱讀 2674

寫在前面

flex布局早在2023年就有了,而現在是2023年6月8日,使用最新的flex語法會發現支援程度並不好,即使是在「高階」瀏覽器上也是如此,比如chrome、firefox、safari、android、ios safari下支援程度各不相同

網上現有的**中充斥著各種版本,在chrome下執行一般都沒有問題,firefox一般也還好,但android與ios safari下就顯得非常無力了。之所以會出現這樣的局面,主要是歷史原因,從2023年到2023年,期間w3c規範有了多次更新,瀏覽器支援程度也就有了差異

一.w3c各個版本的flex

2009 version

標誌:display: box; or a property that is box- (eg. box-pack)

2011 version

標誌:display: flexbox; or the flex() function or flex-pack property

2012 version

標誌:display: flex/inline-flex; and flex- properties

2014 version

新增了對flex項z-index的規定

2015 w3c editor』s draft

沒有大的改動

p.s.注意2015的是w3c editor』s draft,只是個草案,還處於修修改改的階段,還沒有徵集瀏覽器**商的意見

二.瀏覽器相容性

關於flex的w3c規範:

瀏覽器相容性可以參考caniuse:

根據caniuse的資料可以總結如下:

ie10部分支援2012,需要-ms-字首

android4.1/4.2-4.3部分支援2009 ,需要-webkit-字首

safari7/7.1/8部分支援2012, 需要-webkit-字首

ios safari7.0-7.1/8.1-8.3部分支援2012,需要-webkit-字首

所以需要考慮新版本2012:

而android需要考慮舊版本2009:

三.瀏覽器相容的flex語法

上面分析得很清楚,針對需要相容的目標使用對應版本的語法就好了,下面給出常用的布局**:

/* 子元素-平均分欄 */

.flex1

/* 父元素-橫向排列(主軸) */

.flex-h

/* 父元素-橫向換行 */

.flex-hw

/* 父元素-水平居中(主軸是橫向才生效) */

.flex-hc

/* 父元素-縱向排列(主軸) */

.flex-v

/* 父元素-縱向換行 */

.flex-vw

/* 父元素-豎直居中(主軸是橫向才生效) */

.flex-vc

/* 子元素-顯示在從左向右(從上向下)第1個位置,用於改變源文件順序顯示 */

.flex-1

/* 子元素-顯示在從左向右(從上向下)第2個位置,用於改變源文件順序顯示 */

.flex-2

為了更好的相容性,我們需要給容器宣告flex-h/flex-v,而不是一般的flex:

/* 父元素-flex容器 */

.flex

所以,建議在需要相容android時(2009版語法)採用flex-h/flex-v宣告容器使用flex模式,在不需要相容android時(2012版語法)使用flex設定容器

注意:上面給的**並不是完全相容各個高階瀏覽器的,但要比任何其它現有**相容性好,具體相容性測試結果請看demo

四.flex布局demo

測試結果:

android4.2.2不支援換行

android4.2.2下偽元素位置表現不一致

ios safari 7.1的表現與chrome28、chrome43、firefox的表現一致

更多測試結果請反饋給我,謝謝

注意 :從測試結果可以發現flex布局會把偽元素當作元素來分配空間(文件好像有提到給偽元素設定position: fixed/absolute;可以避免這一情況,本文暫未驗證),但我們一般希望偽元素只有裝飾作用,不影響布局,這與我們的預期不一致。所以, 當flex布局中有偽元素時要特別小心,盡可能多地進行瀏覽器相容性測試,或者改用float布局

布局與相容性

1.不要用hack,一定有更好的解決辦法。很多情況都是因為 結構不夠好才會出現相容性問題。2.思考如何用最少的標籤及屬性實現頁面。3.理解結構,表現,行為分離的意義。4.布局前一定要先分析頁面結構,磨刀不誤砍柴工,分析怎麼用更好的辦法實現,理清思路後,再切圖寫 5.深刻理解類的概念,注重歸類元素,多...

flex布局相容性問題

標誌 display box or a property that is box eg.box pack 標誌 display flexbox or the flex function or flex pack property 標誌 display flex inline flex and fle...

flexbox布局的相容性

flex布局早在2009年就有了,而現在是2015年6月8日,使用最新的flex語法會發現支援程度並不好,即使是在 高階 瀏覽器上也是如此,比如chrome firefox safari android ios safari下支援程度各不相同 網上現有的 中充斥著各種版本,在chrome下執行一般都...