display:flex;多行多列布局學習

  從之前的table佈局到如今的div佈局,再到將來的flex佈局,CSS重構方面對展現行和適應性的要求愈來愈高;css

  首先來比較一下佈局方式的更新意義:html

    table佈局:web

      優勢:一、兼容性好,ie六、ie7或者什麼稀奇古怪的瀏覽器,table佈局能夠用最小的代價兼容這些稀奇古怪的瀏覽器;瀏覽器

           二、自適應性,根據內容自適應內部元素的寬高;佈局

         三、開發時間短;性能

      缺點:一、table嵌套table,性能差;學習

         二、對SEO不友好;flex

         三、樣式可塑性差,沒法準確實現設計圖效果;優化

         四、不利於後期維護;flexbox

 

    div+css佈局:

      優勢:一、頁面代碼精簡。加載速度獲得很大的提升

         二、對於開發者來講,代碼精簡,便於閱讀和維護

         三、利於SEO優化;

      缺點:對於列表類的內容,沒法自適應添加列,添加列時,得從新計算每一個元素的寬度,從新設置CSS;
 
    flexbox佈局:(應該算是div+css的進階)
      優勢:一、靈活方便,功能強大,不論是縱向橫向,自適應寬高,Flexbox 就是一種「彈性佈局」模型,能很好支持不一樣視口尺寸和設備。
      缺點:一、兼容性差,兼容狀況以下圖;
         二、容器、項目中屬性設置內容比較多,需多加練習;
 
 
  屬性詳解:
    一、flexbox容器屬性:(父級):
      Flex是Flexible Box的縮寫,意爲"彈性佈局",用來爲盒狀模型提供最大的靈活性。
Webkit內核的瀏覽器,必須加上-webkit前綴。
.box{ display: -webkit-flex; /* Safari */ display: flex; }

      ①、flex-direction: row | row-reverse | column | column-reverse;

        決定主軸的方向(即項目的排列方向)。分別爲沿主軸從左往右、沿主軸從右往左、沿交叉軸從上往下、沿交叉軸從下往上。

        

      ②、flex-wrap:nowrap | wrap | wrap-reverse;

        (默認)nowrap 不換行;  warp:換行; wrap-reverse:換行後,第一行在下方,或者右方(column方式的話);

      ③、flex-flow:<flex-direction> || <flex-wrap>;

        flex-flow屬性是flex-direction屬性和flex-wrap屬性的簡寫形式,默認值爲flex-flow: row nowrap。

      ④、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;

        flex-start:交叉軸的起點對齊。
        flex-end:交叉軸的終點對齊。
        center:交叉軸的中點對齊。
        baseline: 項目的第一行文字的基線對齊。
        stretch(默認值):若是項目未設置高度或設爲auto,將佔滿整個容器的高度。

        align-items屬性定義項目在交叉軸上如何對齊。若是項目沒有設置高度,默認的stretch會讓項目充滿整個容器;

        

      ⑥、align-content: flex-start | flex-end | center | space-between | space-around | stretch;

        align-content屬性定義了多根軸線的對齊方式。若是項目只有一根軸線,該屬性不起做用。

        flex-start:與交叉軸的起點對齊。
        flex-end:與交叉軸的終點對齊。
        center:與交叉軸的中點對齊。
        space-between:與交叉軸兩端對齊,軸線之間的間隔平均分佈。
        space-around:每根軸線兩側的間隔都相等。因此,軸線之間的間隔比軸線與邊框的間隔大一倍。
        stretch(默認值):軸線佔滿整個交叉軸。

         

 

    二、flexitem項目屬性:(子級):
      ①、order:屬性定義項目的排列順序。數值越小,排列越靠前,默認爲0。能夠爲賦值。
        

      ②、flex-grow屬性定義項目的放大比例,默認爲0,即若是存在剩餘空間,也不放大。

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

        

      ③、flex-shrink屬性定義了項目的縮小比例,默認爲1,即若是空間不足,該項目將縮小。

        若是全部項目的flex-shrink屬性都爲1,當空間不足時,都將等比例縮小。

        若是一個項目的flex-shrink屬性爲0,其餘項目都爲1,則空間不足時,前者不縮小。負值無效。

        

      ④、flex-basis屬性定義了在分配多餘空間以前,項目佔據的主軸空間(main size)。

        瀏覽器根據這個屬性,計算主軸是否有多餘空間。它的默認值爲auto,即項目的原本大小。

        

      ⑤、flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ];

        flex屬性是flex-grow, flex-shrink 和 flex-basis的簡寫,默認值爲0 1 auto。

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

        後兩個屬性可選。經常使用方式:flex: 1;

        

      ⑥、align-self: auto | flex-start | flex-end | center | baseline | stretch;

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

        

 
  特別的用法:
    1、移動端頂部左中右佈局方式
      

    2、均等分間距設置

      

 

 
       display:flex 多欄多列布局
         
注意:在使用flebox佈局時,子元素必須保證爲display:block; 否則在X5內核瀏覽器中沒法自適應間距;
  項目中使用一個ul 包含 5個li,就是由於設置了li display:inline-block致使橫向沒法適應間距;
還有 flexbox的兼容寫法:
display:-webkit-box;
  display:-webkit-flex;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-pack:justify;
  -webkit-justify-content:space-between;
  -ms-flex-pack:justify;
  justify-content:space-between;
相關文章
相關標籤/搜索