Flex布局--必然的選擇


這篇文章是我在阮一峰老師的flex布局教程下,按照自己的理解重寫寫一遍,以便增強理解。如果你來到這里最好去看一下阮一峰大神的Flex布局教程

正式開始自己的。

說起布局方式,大家首先要了解css3有哪些布局方式,這里就不一一詳解了。網上一大堆,而且平時寫css3的時候大家一般也都會用到。

Flex布局:

1.概念:flex布局,英文全稱為:Flexible Box 也就是彈性盒子的意思。設置flex布局的元素叫做容器,其他的子元素叫做項目。恩,我之前還真不知道叫做項目,沒注意過。在容器中存在着兩根軸:主軸(水平)和交叉軸(垂直)。

然后我們先創建一個正常的li列表

<div>
    <ul>
        <li>first</li>
        <li>second</li>
        <li>third</li>
        <li>forth</li>
        <li>fifith</li>
    </ul>
</div>

在簡單設置一下css樣式,也不能太難看

  div{
      height: 500px;
      width: 500px;
      margin:0 auto;
      background-color: #333;
  }
  ul{
      padding: 20px;
      box-sizing: border-box;
  }
    div li{
        list-style: none;
        display: block;
        width: 200px;
        height:50px;
        text-align: center;
        line-height: 50px;
        font-size: 30px;
     margin:10px; } li:nth-child(n){ background-color: #007aff; } li:nth-child(2n){ background-color: #8a6de9; color: #fff; }

最終展現在我們眼前的效果就是

 

這個留着備用,我們繼續開始下面的流程。

2.作用在容器上面的6大屬性

         flex-direction
         align-items
         justify-content
         align-content
         flex-wrap
         flex-flow

2.1首先看第一個flex-direction屬性

在之前我們設置好得li列表上面我們做一下改動,給div增加新的樣式,為了方便容易看,我就直接在之前的樣式后面 繼續為 div 下ul元素添加樣式。

   div ul{
        display: flex;
    }

看一下效果

 

從原本的橫向排列,變成了縱向排列。而且之前我們設置的 每個li 的寬度已經不起作用了。當我們設置display:flex;的時候,主軸默認的方向是水平方向也就是我們看到的樣子。所以我們可以通過改變主軸的方向來隨意調整我們li的排列方式。

        /*設置主軸方向為垂直方向*/
        flex-direction: column;
        /*設置主軸方向為垂直方向,從下往上*/
        flex-direction: column-reverse;
        /*設置主軸方向為水平方向,從左往右*/
        flex-direction: row;
        /*設置主軸方向為水平方向,從右往左*/
        flex-direction: row-reverse;
        flex-direction: inherit;

flex-direction有五個屬性,也可以說四個,畢竟最后一個可以省去。我們只要記着兩個就行,column代表着垂直方向,row代表着水平方向。

2.2、這里我們看一下flex-wrap屬性。

上面我們看到,設置成flex布局之后,li的寬度發生了變化,而且沒有換行,擠在了一起。給樣式加上flex-wrap之后,看一下

    div ul{
        display: flex;
        flex-wrap: wrap;
    }

flex-wrap,默認是nowrap。不換行。所以就導致了我們之前的那種情況,現在我們設置成wrap,讓他根據寬度來決定是否換行。這樣一來,就和float一樣了。而且更加方便。flex-wrap還有一個屬性

 

    div ul{
        display: flex;
        flex-wrap: wrap-reverse;
    }

也就是顛倒個個。

2.3flex-flow也就是flex-direction和flex-wrap的結合體,沒什么好說的啦!

2.4justify-content

    div ul{
        display: flex;
        flex-wrap: wrap;
        justify-content: center;
    }

也就是設置垂直方向的排列方式,center就是居中。另外還有其他屬性space-between;space-around;這兩個屬性可以說是我經常用到的屬性。

2.4align-item這個就是水平方向的設置了。也justify-content相對應。也就不舉栗子了。

2.5align-content屬性定義的是多根線軸的對齊方式。具體樣式也上面那兩位幾乎一樣的。

3、在項目上的6大屬性。

        order
        flex-grow
        flex-shrink
        flex-basis
        align-self

3.1、order,設置數值,數值越小越靠前。例如我們給最后一個li添加order屬性。設置為-1,樣式為

    li:last-child{
        order: -1;
    }

可以看到第五個fifth排到了第一位!!這就很方便了。也很實用,說實話,我剛剛發現這個屬性的時候就想發現新大陸一樣激動(鬼知道哥倫布怎么想的)

3.2、flex-grow屬性。設置放大比例,默認值是0,例如我們給最后一個li增加屬性

    li:last-child{
      flex-grow: 1;
    }

3.3、flex-shrink就是縮小比例了。這個就不多說了。

3.4、flex-basis屬性則定義了在分配多余空間之前,項目占據的主軸空間。

3.5、flex屬性就是結合體.....我不是很熟練。還是一個個寫吧

3.6、align-self也就是一個特立獨行的存在。改變自己的排列方式。

 


免責聲明!

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



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