寫在前面
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下執行一般都...