display: flex屬性介紹


參考文章: 

阮大神的:Flexbox 布局的最簡單表單(主要講解項目item上的屬性)

另一位大神的:布局神器display:flex(整體講解的非常詳細)

  

之前沒有仔細看flex布局(彈性布局),設置子元素垂直居中都是通過css樣式設置的,最近看了flex的布局方式,感覺太好用了,比以前些樣式還省了許多的代碼,這里把大神們的內容總結一下,就當練習打字給自己做個筆記加深印象好了

 

(1)彈性布局是一種靈活、響應式的布局方式,目前的主流瀏覽器Chrome21+、Opear12.1+、Firefox22+、Safari6.1+、IE10+都已支持,可以放心使用

(2)彈性布局的使用-彈性布局設置的元素為父元素,其下的所以子元素稱為項目(item),如下,div是父元素,div下面的input和button則稱為項目

<div>
    <input placeholder="隨便輸入點什么"></input>
    <button>發送</button>
</div>

如果沒有給父元素div設置彈性布局,在瀏覽器上打開可以看到input跟button之間存在空白間隔,如下:

然后我們給div設置彈性布局屬性display:flex,發現input跟button之間的空白間隙消失了,如下:

這是因為彈性布局下,所有的項目(item)之間默認沒有間隔,並且有個特別的地方,就是不給項目設置高度的情況下,所有項目跟父元素等高

(3)設置在父元素上的屬性有:flex-direction、flex-wrap、flex-flow、justify-content、align-item、align-content六種

<div class="test">
      <input type="text" placeholder="隨便輸入點什么吧" />
      <button>send</button>
      <div class="hello-world">item1</div>
      <div class="hello-world">item2</div>
      <div class="hello-world">item3</div>
</div>
.test {
    width: 500px;
    height: 100px;
    display: flex;
    border: 1px solid red;
    box-sizing: border-box;
    /* justify-content: start; */
    /* flex-direction: column; */
    /* align-items: center; */
}
.hello-world {
    border: 1px solid blue;
}

 

① 項目在父元素下的排列方式屬性 flex-direction:row | row-reverse | column | column-reverse

row --- 默認值,項目橫向排列,第一個項目從父元素的最左邊邊線開始向右進行排列

row-reverse --- 項目橫向排列,第一個項目從父元素的最右邊邊線開始向左排列,如下:

column --- 項目縱向排列,第一個項目從父元素的頂部邊線開始自上而下進行排列

column-reverse --- 項目縱向排列,第一個項目從父元素的底部邊線開始自下而上進行排列

 

② 項目換行情況flex-wrap:nowrap | wrap | wrap-reverse

<div class="test">
      <input type="text" placeholder="隨便輸入點什么吧" />
      <button>send</button>
      <div class="hello-world">item1</div>
      <div class="hello-world">item2</div>
      <div class="hello-world">item3</div>
      <div class="hello-world">item4</div>
      <div class="hello-world">item5</div>
      <div class="hello-world">item6</div>
      <div class="hello-world">item7</div>
      <div class="hello-world">item8</div>
      <div class="hello-world">item9</div>
</div>

 

nowrap --- 默認值,不換行,所有項目都在一行展示,空間不足時,會撐破父元素寬度

wrap --- 可換行,排不下的項目在下一行展示,排滿的在第一行展示

wrap-reverse --- 可換行,多出來的項目展示在第一行,排滿的在后面展示

 

 

③ flex-flow:即flex-direction和flex-wrap屬性的縮寫,默認值為row nowrap,樣式寫法如下:

.test {
  flex-flow: row nowrap;
}

 

④ 項目在父元素中水平方向上的對齊方式屬性 justify-content:flex-start | flex-end | center | space-between | space-around

flex-start --- 默認項目在父元素中靠左對齊,項目之間沒有間隔

flex-end --- 靠右對齊,項目之間沒有間隔

center --- 居中對齊,項目之間沒有間隔,且在父元素中處於居中位置

space-between --- 兩端對齊,最靠邊的項目跟左右邊線沒有間隔,同一行上的所有項目間隔相等

space-around --- 居中對齊,兩側間隔相等,且同一行上的項目之間的間隔是兩側間隔的2倍

 

// 注意:設置項目水平方向上的對齊方式時,此時的項目高度是父元素高度除以項目的總行數,且上下行之間沒有間隔

 

⑤ 項目在父元素中縱向上的對齊方式align-items:flex-start | flex-end | center | baseline | stretch

stretch --- 默認對齊方式,如果項目未設置高度或高度為auto,那么項目高度值則為:父元素高度除以項目行數,上下行項目之間沒有間隔

flex-start --- 頂部對齊,項目高度自適應,上下行項目之間有間隔

flex-end --- 底部對齊,項目高度自適應,上下行項目之間有間隔

center --- 居中對齊,項目高度自適應,,上下行項目之間有間隔,項目距離父元素頂部和底部的間隔相同

baseline --- 項目第一行的文字基准線對齊,項目高度自適應

 

⑥ 定義多行項目時的對齊方式align-content:flex-start | flex-end | center | space-between | space-around | stretch

注意:如果項目只有一行時,不能使用此屬性,只能設置flex-wrap屬性

flex-start --- 垂直方向上頂部對齊

flex-end:--- 垂直方向上底部對齊

center --- 多行項目在父元素的垂直方向上居中對齊,

space-bewtne --- 在父元素的上下兩端對齊排列,每一個項目行之間的間隙是相等的

space-around --- 多行項目父元素的上下兩側排列,上下最外側的項目與邊線之間有間隔,且非兩側的項目間隔是最外側項目與父元素邊線間隔的兩倍

stretch --- 默認值,多行的項目占據整個父元素高度,且每一行之間沒有間隔,當未設置項目高度時,同行的項目的高度即最高項目項的高度除以項目的行數

 

(4)項目的屬性有:order、flex-grow、flex-shrink、flex-basis、flex、align-self

<div class="test2">
      <div class="mybox">1</div>
      <div class="mybox">2</div>
      <div class="mybox">3</div>
      <div class="mybox">4</div>
      <div class="mybox">5</div>
      <div class="mybox">6</div>
      <div class="mybox">7</div>
</div>
.test2 {
  width: 500px;
  height: 100px;
  display: flex;
  justify-content: space-between;
  border: 1px solid blue;
  box-sizing: border-box;
  align-items: center;
  margin-top: 200px;
}
.mybox {
  border: 1px solid red;
}

項目未設置屬性時的排列:

① order:定義項目的排列順序,數值越小,排列越靠前,數值可以為負數

② flex-grow:項目的放大比例,默認值為0(既不放大,也不縮小),比如一行有兩個項目,其中某一個項目的flex-grow屬性為0,另外一個設置為1,則flex-grow:0的寬度不變,flex-grow屬性的項目占據剩余寬度;若項目的flex-grow屬性都相等,則平分這一行的空間

③ flex-shrink:項目的縮小比例,默認值為1,且不能為負數;當同一行中所其他項目為1,一個項目的flex-shrink屬性為0時,當空間不足時,flex-shrink為0的項不縮小,其他項目會縮小,若所有項目的flex-shrink都為0,那么空間不足時,會撐破父元素

④ flex-basis:為項目分配指定大小的空間,比如給其中一個項目設置flex-basis:350px,則這個項目在空間充足的情況下,其寬度為350px,當空間不足時,實際該項目的寬度值會小於設置的值

空間足夠時:

空間不足時:

⑤ flex:flex屬性是flex-graw、flex-shrink、flex-basis三個屬性結合,默認值為 0 1 auto,第一個屬性是必須的,后兩個屬性可選

⑥ align-self:允許設置單個項目對齊方式,可設置值有auto、flex-start、flex-end、center、baseline、stretch,因為這個屬性是繼承與父元素的align-items屬性,假如所有項目是統一對齊樣式,則直接在父元素上進行設置align-items屬性即可,如果有的項目的對齊方式不一樣,可針對這個項目使用align-self進行設置,用法跟align-items屬性一樣

 

最后說一下flex彈性布局的優缺點吧,優點是布局容易上手,比較容易使用,缺點是:對IE10以下的瀏覽器還是沒能兼容到,其他瀏覽器倒是兼容的比較好了。。。


免責聲明!

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



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