1. 程式人生 > >快速瞭解 Flex 彈性佈局

快速瞭解 Flex 彈性佈局

引言:2009年,W3C提出了一種新的方案—-Flex佈局,Flex是Flexible Box的縮寫,意為”彈性佈局”,用來為盒狀模型提供最大的靈活性。轉眼就是18年,如今彈性佈局也出現了9年了,已經被大多瀏覽器所支援:Chrome 21+ , Opera 12.1+ , FireFox22+ , Safari6.1+ , IE10+ (IE,,咳咳 )。

此文對flex 進行一個簡單講述,希望通過此文能夠幫助快速上手瞭解這個佈局。

內容分為三個部分:Flex容器,容器屬性,以及專案屬性。

 

一、Flex容器:

                            (此圖引用自

菜鳥教程flex篇)

emmm ,個人感覺就是X Y軸,從做左到右,從上到下。

 

二、容器屬性:一共六個

1,flex-direction  : 決定主軸的方向(即專案的排列方向)

2,  flex-wrap : 如果一條軸線排不下,如何換行

3,  flex-flow:   flex-direction屬性和flex-wrap屬性的簡寫形式,預設值為row nowrap

4,  justify-content: 定義了專案在主軸上的對齊方式

5, align-items :定義專案在交叉軸上如何對齊

6, align-content: 定義了多根軸線的對齊方式。如果專案只有一根軸線,該屬性不起作用

 

首先,有請此次demo 的主角,一個基礎的佈局,其最初樣式:

<style>
    .box{
        margin: 50px auto;
        display: flex; /* 父元素宣告彈性佈局*/
        width: 400px;
        height: 400px;
        background-color: bisque;
    }
    .box1{
        width: 50px;
        height: 50px;
        text-align: center;
        line-height: 50px;
        background-color: aqua;
        margin: 2px;
    }
</style>

<body>
    <div class="box">
        <div class="box1">1</div>
        <div class="box1">2</div>
        <div class="box1">3</div>
        <div class="box1">4</div>
    </div>
</body>

  

可以看出,當我們設定父級元素 display flex 時,子元素就預設排成一排,這也是flex 佈局的特點之一,所以有時候也將其代替 浮動,或者 display:inline-block 排成一排的方案。

 

第一個屬性:

flex-direction: row | row-reverse | column | column-reverse; 對應方向即:X軸的左,右;以及Y軸的上,下

使用方式,直接在父級元素中新增語句flex-direction: row, flex-direction:row-reverse 等,其效果對應是:



第二個屬性:
 flex-wrap: nowrap | wrap | wrap-reverse; 即當子元素在一行排列,超出父元素時,其排列方式,對應為:
(1)nowrap(預設):不換行
(2)wrap:換行,第一行在上方。
(3)wrap-reverse:換行,第一行在下方。
我們將demo 的子元素增加幾個,進行測試,效果為:

看上圖,此時子元素因為不換行而被擠壓,失去了原有的寬度,但是比較有趣的是,如果是Y軸排列,不換行的話,子元素會超出父元素,而不會擠壓高度。

 

 

 

 

我們可以看到,換行後,換行間距非常大,兩行間並沒有貼近在一起。這個問題接下來會考慮解決,所以看到此處不需要考慮太多,只需記住換行效果即可。


第三個屬性:
flex-flow: <flex-direction> || <flex-wrap>;
flex-direction + flex-wrap 的縮寫形式
例如:




第四個屬性:
justify-content: flex-start | flex-end | center | space-between | space-around; 定義了專案在主軸上的對齊方式

 flex-start(預設值):左對齊

 flex-end:右對齊

 center: 居中

 space-between:兩端對齊,專案之間的間隔都相等

 space-around:每個專案兩側的間隔相等。所以,專案之間的間隔比專案與邊框的間隔大一倍

其效果對應為:





第五個屬性:
 align-items: flex-start | flex-end | center | baseline | stretch;定義專案在交叉軸上如何對齊。

1,flex-start:交叉軸的起點對齊,
2,flex-end:交叉軸的終點對齊
3,center:交叉軸的中點對齊。
4,baseline: 專案的第一行文字的基線對齊
5,stretch(預設值):如果專案未設定高度或設為auto,將佔滿整個容器的高度
其對應效果為:

 

第六個屬性:

  align-content: flex-start | flex-end | center | space-between | space-around | stretch; 定義了多根軸線的對齊方式。如果專案只有一根軸線,該屬性不起作用
 在換行屬性測試時,我們換行出現了行間距非常高的情況,而這個align-content 屬性,就可以解決其問題。

1,flex-start:與交叉軸的起點對齊,
2,flex-end:與交叉軸的終點對齊
3,center:與交叉軸的中點對齊
4,space-between: 與交叉軸兩端對齊,軸線之間的間隔平均分佈
5,space-around:每根軸線兩側的間隔都相等。所以,軸線之間的間隔比軸線與邊框的間隔大一倍
6,stretch(預設值):軸線佔滿整個交叉軸

其效果:

 

 

 三:專案屬性

未完待續