【移動端debug-2】Flexbox在移動端的兼容實踐


最近在項目中用到了flexbox,總結一下使用心得。

一、什么是flexbox,干嘛使的?

曾幾何時,我們特別希望能像word一樣,在排版時有個分散對齊選項(平均分配子元素寬度)這樣我就可以任意在父元素里添加子元素的個數,而不用經過繁瑣的計算。

css3中的flexbox可以實現這一點,並且還有很多很多別的高端上檔次的用法,包括垂直居中、反向排列子元素等等……本文先介紹其中一種比較常用到的方法,別的案例碰到了再補充。

 

二、flexbox的兼容性問題

由於歷史原因,flexbox的標准比較混亂,目前通用的版本就有三種:

老版本:display:box 和 display:inline-box(前者是塊級元素,后者是內聯元素)

混合版本(該版本僅ie10支持,移動端完全不用考慮):display:flexbox 和 display:inline-flexbox(同上)

新版本:display:flex 和 display:inline-flex(同上)

每種版本的支持的瀏覽器不同,而且要針對不同瀏覽器添加前綴適配,為了兼容移動端的大部分瀏覽器,提煉如下:

display: -webkit-box;      /* 老版本 - 適配iOS 6-, Safari 3.1-6 */
display: -webkit-flex;     /* 新版本 - 適配Chrome */
display: flex;             /* 新版本,- 適配Opera 12.1, Firefox 20+ */

在這里他們的順序非常重要。“display”屬性本身並不添加任何瀏覽器前綴,我們需要確保我們老語法不要覆蓋新語法讓瀏覽器(可能總是會)同時支持。

 

三、使用方法:

要使用flex需要先了解以下概念:

1、伸縮盒子和伸縮項目:伸縮盒子就是父元素,伸縮項目就是子元素,只有先設置了父元素為flexbox,子元素里的伸縮相關屬性才能生效。

2、主軸和側軸:頁面橫向的軸是主軸,縱向的軸是側軸。

3、伸縮流:伸縮盒子內的元素排列方式,類似流水順序一樣,因此稱之為流。

 

由於flex的屬性繁多,一上來就列舉一堆屬性概念不方便閱讀學習,下面直接通過案例來了解flex是怎么用的,這樣能先對這個css3的新屬性有個直觀的了解,之后可以自行查閱其他屬性。

案例:設置一個伸縮盒子(父元素),無論添加多少個伸縮項目(子元素),都讓它們平均分配寬度,如圖:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">

    <title></title>
    <style>
        .flex-parent {
            /*設置父元素為伸縮容器*/
            display: -webkit-box; /*老版本:iOS 6-, Safari 3.1-6*/
            display: -webkit-flex; /*新版本:Chrome*/
            display: flex; /*標准規范:Opera 12.1, Firefox 20+*/

            /*設置父元素內部的伸縮子元素項目換行規則:水平排列(row)不換行(nowrap)*/
            -webkit-box-orient: horizontal; /*老版本:iOS 6-, Safari 3.1-6*/
            -webkit-flex-flow: row nowrap; /*新版本:Chrome*/
            flex-flow: row nowrap; /*標准規范:Opera 12.1, Firefox 20+*/
        }

        .flex-son {
            /*設置子元素伸縮項目的伸縮比例*/
            -webkit-box-flex: 1; /*老版本:iOS 6-, Safari 3.1-6*/
            -webkit-flex: 1; /*新版本:Chrome*/
            flex: 1; /*標准規范:Opera 12.1, Firefox 20+*/

            /*此處無需設置寬度,因為flexbox會自動伸縮*/
            height: 2rem;
            margin: 0 0.5rem;
            background: #000;
        }
    </style>
</head>

<body>

<div class="flex-parent">
    <div class="flex-son"></div>
    <div class="flex-son"></div>
    <div class="flex-son"></div>
</div>

</body>
</html>

 更多flexbox的使用方法可參考大漠的《圖解CSS3》及w3c的flexbox標准原文http://www.w3.org/TR/2015/WD-css-flexbox-1-20150514/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM