Flex佈局

本文整理自阮一峯大神的博客,原文地址http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html

佈局的傳統解決方案,基於盒狀模型,依賴 display屬性 + position屬性 + float屬性。它對於那些特殊佈局非常不方便,比如,垂直居中就不容易實現。2009年,W3C提出了一種新的方案—-Flex佈局,可以簡便、完整、響應式地實現各種頁面佈局。目前,它已經得到了所有瀏覽器的支持,這意味着,現在就能很安全地使用這項功能。Flex佈局將成爲未來佈局的首選方案。

Flex佈局是什麼

Flex是Flexible Box的縮寫,意爲彈性佈局,用來爲盒狀模型提供最大的靈活性。任何容器都可以指定爲flex佈局。
注意:設爲flex佈局以後,子元素的float,clear,vertical-align屬性將失效

基本概念

採用Flex佈局的元素,稱爲Flex容器(flex container),簡稱”容器”。它的所有子元素自動成爲容器成員,稱爲Flex項目(flex item),簡稱”項目”。
容器默認存在兩根軸:水平的主軸(main axis)和垂直的交叉軸(cross axis)。主軸的開始位置(與邊框的交叉點)叫做main start,結束位置叫做main end;交叉軸的開始位置叫做cross start,結束位置叫做cross end。
項目默認沿主軸排列。單個項目佔據的主軸空間叫做main size,佔據的交叉軸空間叫做cross size。

容器的屬性

以下6個屬性設置在容器上:

  • flex-direction
    • row(默認) | row-reverse | column | column-reverse
  • flex-wrap
    • nowrap(默認) | wrap | wrap-reverse
  • flex-flow
    • flex-flow屬性是flex-direction屬性和flex-wrap屬性的簡寫形式,默認值爲row nowrap
    • (flex-direction) || (flex-wrap)
  • justify-content
    • justify-content屬性定義了項目在主軸上的對齊方式
    • flex-start(默認值) | flex-end | center | space-between | space-around
  • align-items
    • align-items屬性定義項目在交叉軸上如何對齊
    • flex-start | flex-end | center | baseline | stretch(默認值,如果項目未設置高度或設爲auto,將佔滿整個容器的高度)
  • align-content
    • align-content屬性定義了多根軸線的對齊方式。如果項目只有一根軸線,該屬性不起作用。通俗的講,就是當項目數變多時,後邊的項目會在flex-wrap:wrap時會另起一行,此時稱多出了一根橫軸,其實就是多個行在豎直方向上的對齊方式
    • flex-start | flex-end | center | space-between | space-around | skretch(默認值,軸線佔滿整個交叉軸)

項目的屬性

以下6個屬性設置在項目上:

  • order
    • order屬性定義項目的排列順序。數值越小,排列越靠前,默認爲0
    • order: (integer);
  • flex-grow
    • flex-grow屬性定義項目的放大比例,默認爲0,即如果存在剩餘空間,也不放大
    • flex-grow: (number);
  • flex-shrink
    • flex-shrink屬性定義了項目的縮小比例,默認爲1,即如果空間不足,該項目將縮小
    • flex-shrink: (number);
    • 負值對該屬性無效
  • flex-basis
    • flex-basis屬性定義了在分配多餘空間之前,項目佔據的主軸空間(main size)。瀏覽器根據這個屬性,計算主軸是否有多餘空間。它的默認值爲auto,即項目的本來大小。
    • (length) | auto;
    • 它可以設爲跟width或height屬性一樣的值(比如350px),則項目將佔據固定空間
  • flex
    • flex屬性是flex-grow, flex-shrink 和 flex-basis的簡寫,默認值爲0 1 auto。後兩個屬性可選
    • none | [ <’flex-grow’> <’flex-shrink’>? || <’flex-basis’> ]
    • 該屬性有兩個快捷值:auto (1 1 auto) 和 none (0 0 auto)。建議優先使用這個屬性,而不是單獨寫三個分離的屬性,因爲瀏覽器會推算相關值。
  • align-self
    • align-self屬性允許單個項目有與其他項目不一樣的對齊方式,可覆蓋align-items屬性。默認值爲auto,表示繼承父元素的align-items屬性,如果沒有父元素,則等同於stretch。
    • auto | flex-start | flex-end | center | baseline | skretch
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章