對display:flex的理解

 

使用flex佈局的容器(flex container),它內部的元素自動成爲flex項目(flex item)。容器擁有兩根隱形的軸,水平的主軸(main axis),和豎直的交叉軸。主軸開始的位置,即主軸與右邊框的交點,稱爲main start;主軸結束的位置稱爲main end;交叉軸開始的位置稱爲cross start;交叉軸結束的位置稱爲cross end。item按主軸或交叉軸排列,item在主軸方向上佔據的寬度稱爲main size,在交叉軸方向上佔據的寬度稱爲cross size。css

  此外,需注意使用flex容器內元素,即flex item的float,clear、vertical-align屬性將失效。瀏覽器

1.flex-direction

    決定主軸的方向,即項目排列的方向,有四個可能的值:row(默認)|row-reverse|column|column-reverse

    row:主軸爲水平方向,項目沿主軸從左至右排列

    column:主軸爲豎直方向,項目沿主軸從上至下排列

    row-reverse:主軸水平,項目從右至左排列,與row反向

    column-reverse:主軸豎直,項目從下至上排列,與column反向

 

以下代碼佈局

<style>
 #container {
    display: flex; //
    height:200px;
    width: 240px;
    flex-wrap: wrap;
默認狀況下,item排列在一條線上,即主軸上,flex-wrap決定當排列不下時是否換行以及換行的方式,可能的值nowrap(默認)|wrap|wrap-reverse
    nowrap:自動縮小項目,不換行
    wrap:換行,且第一行在上方
    wrap-reverse:換行,第一行在下面
    align-content: flex-start; 
 該屬性對單行彈性盒子模型無效。該屬性定義了當有多根主軸時,即item不止一行時,多跟主軸線做爲一個總體在交叉軸(即非主軸)軸上的對齊方式。即:定義項目多個軸線在
交叉軸上的對齊方式;
align-content可能值含義以下(假設主軸爲水平方向):       flex-start:左對齊       flex-end:右對齊       center:居中對齊       space- between:兩端對齊       space-around:沿軸線均勻分佈       stretch: 默認值。各行將根據其flex-grow值伸展以充分佔據剩餘空間。會拉伸容器內每行佔用的空間,填充方式爲給每行下方增長空白
      
該屬性對單行彈性盒子模型無效。拉伸全部行來填滿剩餘空間。剩餘空間平均的再分配給每一行。
    align-items: center;
 指定了當前Flex容器的每一行中的items項目在此行上在交叉軸上的對齊方式。指定的是項目在交叉軸上如何對齊;
指定了每一行內items相對彼此自身的在交叉軸上的對齊方式。可能的值有flex-start|flex-end|center|baseline|stretch,當主軸水平時,其具體含義爲
   flex-start:當items設置了高度時的默認值。頂端對齊 。(針對設置了高度的items)
   flex-end:底部對齊。(針對items設置了高度)
   center:豎直方向上居中對齊  (同上)
   baseline:item第一行文字的底部對齊  (同上)
   stretch:默認值。(針對沒有設置高度的items)當item都未設置高度,並且是單行時,item將和容器等高對齊。當item都設置了高度時,設置strentch與flex-start的效果
   同樣。當items有的設置了高度
    有的沒有設置高度,而且是單行。以下圖:

 由於單行設置align-content無效,因此若是items有設置高度,而且align-items設置爲align-items:center的效果以下圖flex

 

    background-color: #8c8c8c;
    justify-content: center
決定多行item(把全部行做爲一個總體)在主軸上的對齊方式,可能的值有flex-start(默認),flex-end,center,space-between,space-around。
當主軸沿水平方向時,具體含義爲    
   flex-start:左對齊    
   flex-end:右對齊   
   center:居中對齊   
   space- between:兩端對齊
  space-around:沿軸線均勻分佈
}
  
  div > div {
    border: 2px solid #8c8c8c;
    width: 50px;
  }
  
  #item1 {
    background-color: #8cffa0;
    height: 30px;
    width: 20px
  }
  
  #item2 {
    background-color: #a0c8ff;
   height: 50px;
   width: 30px;}
  
  #item3 {
    background-color: #ffa08c;
   height: 40px;
  }
  
  #item4 {
    background-color: #ffff8c;
   height: 60px;
  }
  
  #item5 {
    background-color: #ff8cff;
   height: 70px;
  }
  
  #item6 {
    background-color: #8cffff;
    height: 50px;
  } 
</style>

  <div id="container">
    <div id="item1"></div>
    <div id="item2"></div>
    <div id="item3"></div>
    <div id="item4"></div>
    <div id="item5"></div>
    <div id="item6"></div>
    <div id="item4"></div> 
     <div id="item5"></div>
    <div id="item6"></div>
    <div id="item3"></div> 
  </div>

設置父容器:spa

#container {
    display: flex;
    height:200px;
    width: 240px;
    flex-wrap: wrap;
    align-content: flex-start; 
    align-items: center;
    background-color: #8c8c8c;
    justify-content: center
  }

 效果以下:3d

設置父容器code

#container {
    display: flex;
    height:200px;
    width: 240px;
    flex-wrap: wrap;
    align-content:center; 
    align-items: flex-start;
    background-color: #8c8c8c;
    justify-content: flex-end
  }

設置父容器blog

 #container {
    display: flex;
    height:200px;
    width: 240px;
    flex-wrap: wrap;
    align-content:center; 
    align-items: center;
    background-color: #8c8c8c;
    justify-content: center
  }

效果以下繼承

 

item的屬性在item的style中設置。item共有以下六種屬性token

 item的屬性在item的style中設置。item共有以下六種屬性

  一、order

    order的值是整數,默認爲0,整數越小,item排列越靠前,以下圖所示代碼以下

複製代碼
<div class="wrap">
    <div class="div" style="order:4"><h2>item 1</h2></div>
    <div class="div" style="order:2"><h2>item 2</h2></div>
    <div class="div" style="order:3"><h2>item 3</h2></div>
    <div class="div" style="order:1"><h2>item 4</h2></div>
</div>
複製代碼

效果圖爲
  

 

.item { order: <integer>; } 

  二、flex-grow

    定義了當flex容器有多餘空間時,item是否放大。默認值爲0,即當有多餘空間時也不放大;可能的值爲整數,表示不一樣item的放大比例,如

<div class="wrap">
    <div class="div" style="flex-grow:1"><h2>item 1</h2></div>
    <div class="div" style="flex-grow:2"><h2>item 2</h2></div>
    <div class="div" style="flex-grow:3"><h2>item 3</h2></div>
</div>

即當有多餘空間時item一、item二、和item3以1:2:3的比例放大。

 

.item { flex-grow: <number>; /* default 0 */ } 

若是全部項目的flex-grow屬性都爲1,則它們將等分剩餘空間(若是有的話)。若是一個項目的flex-grow屬性爲2,其餘項目都爲1,則前者佔據的剩餘空間將比其餘項多一倍。

  三、flex-shrink

    定義了當容器空間不足時,item是否縮小。默認值爲1,表示當空間不足時,item自動縮小,其可能的值爲整數,表示不一樣item的縮小比例。

 

.item { flex-shrink: <number>; /* default 1 */ } 

若是全部項目的flex-shrink屬性都爲1,當空間不足時,都將等比例縮小。若是一個項目的flex-shrink屬性爲0,其餘項目都爲1,則空間不足時,前者不縮小。

負值對該屬性無效。

  四、flex-basis

    表示項目在主軸上佔據的空間,默認值爲auto。以下代碼

<div class="wrap">
    <div class="div" style="flex-basis:80px"><h2>item 1</h2></div>
    <div class="div" style="flex-basis:160px"><h2>item 2</h2></div>
    <div class="div" style="flex-basis:240px"><h2>item 3</h2></div>
</div>

  其效果圖爲

  

flex-basis屬性定義了在分配多餘空間以前,項目佔據的主軸空間(main size)。瀏覽器根據這個屬性,計算主軸是否有多餘空間。它的默認值爲auto,即項目的原本大小。

.item { flex-basis: <length> | auto; /* default auto */ } 

它能夠設爲跟widthheight屬性同樣的值(好比350px),則項目將佔據固定空間。

  五、flex

    flex屬性是flex-grow、flex-shrink和flex-basis三屬性的簡寫總和。

flex屬性是flex-growflex-shrink 和 flex-basis的簡寫,默認值爲0 1 auto。後兩個屬性可選。

.item { flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ] } 

該屬性有兩個快捷值:auto (1 1 auto) 和 none (0 0 auto)。

建議優先使用這個屬性,而不是單獨寫三個分離的屬性,由於瀏覽器會推算相關值。

  六、align-self

    align-self屬性容許item有本身獨特的在交叉軸上的對齊方式,它有六個可能的值。默認值爲auto

      auto:和父元素align-self的值一致

      flex-start:頂端對齊

      flex-end:底部對齊

      center:豎直方向上居中對齊

      baseline:item第一行文字的底部對齊

      stretch:當item未設置高度時,item將和容器等高對齊

  

 

 

align-self屬性容許單個項目有與其餘項目不同的對齊方式,可覆蓋align-items屬性。默認值爲auto,表示繼承父元素的align-items屬性,若是沒有父元素,則等同於stretch

.item { align-self: auto | flex-start | flex-end | center | baseline | stretch; } 

該屬性可能取6個值,除了auto,其餘都與align-items屬性徹底一致。

相關文章
相關標籤/搜索