深入理解flex佈局

前言

隨着電子產品的快速迭代,傳統的前端佈局越來越難以是配多端的屏幕顯示,無論是table佈局還是float佈局在移動端適配上都有着很大的侷限性。09年,W3C提出了一種新的方案—-Flex佈局,可以簡便、完整、響應式地實現各種頁面佈局,flex的應用可以極大程度上補充傳統佈局的不足之處。

flex佈局是什麼

Flex是flex box的縮寫意爲彈性佈局,用來爲盒狀模型提供最大的靈活性。
特點:採用flex佈局的元素成爲flex容器,他的所有子元素自動成爲容器的成員。
借用騰訊雲社區的一張圖


由圖中我們可以看出flex佈局其實是將我們的元素看成一個一左上角爲原點的直角座標系

如何使用flex佈局

  • 主軸(flex佈局以主軸和交叉軸爲主的。理解他們是掌握flex佈局的基礎。)

    主軸由flex-direction定義他可以去四個值:row row-reverse column column-reverse

    1. row 或者 row-reverse,你的主軸將沿着 inline 方向延伸。
    2. column 或者 column-reverse,你的主軸會沿着上下方向延伸,及block方式。
    3. 交叉軸垂直於主軸,所以如果你的flex-direction (主軸) 設成了 row row-reverse則交叉軸爲垂直方向
    4. 如果flex-direction (主軸) 設成了 column column-reverse則交叉軸爲水平方向。
  • 按需固定元素位置(容器內元素屬性設置)

    1. justify-content - 控制主軸上所有 flex 項目的對齊(相比margin auto要方便的多)。
    2. align-items - 控制交叉軸上所有 flex 項目的對齊(有了這個屬性不用再考慮父元素有多高top是多少了)。
    3. align-self - 控制交叉軸上的單個 flex 項目的對齊。
    4. align-content - 控制“多條主軸”的 flex 項目在交叉軸的對齊(要使得 align-content 生效,flex 容器的height要大於 flex 項目的可視內容。然後它會將所有的 flex 項目打包成一塊之後再對齊剩下的空間)。
  • 應對頁面彈性伸縮(容器內元素屬性設置)

    1. flex-shrink/grow: 比例縮小/放大

      flex-grow:flex-grow屬性默認等於0,即使用本來的寬度,不拉伸。等於1時,就表示該項目寬度拉伸,佔據當前行的所有剩餘寬度。

      flex-shrink:flex-shrink的默認值爲1,當父元素的寬度小於所有子元素的寬度的和時,子元素的寬度會減小。值越大,減小的越厲害。如果值爲0,表示不減小。

    2. flex-basis(初始值:auto):指定了item在flex佈局中的初始大小(前提是不改變盒模型的box-sizing),所謂的初始尺寸就是元素在flex-grow和flex-shrink生效前的尺寸。另外其設置的優先級高於width。

  • flex 屬性總結(這裏只做簡要說明,詳細請查看mdn文檔)

    1. 容器屬性
      flex-flow:屬性是flex-direction屬性和flex-wrap屬性的簡寫形式

      flex-direction:屬性決定主軸的方向

      flex-wrap:屬性決定軸線排不下,如何換行

      justify-content:屬性決定項目在主軸上的對齊方式

      align-items:屬性決定項目在交叉軸上的對齊方式

      align-content:屬性定義了多根軸線的對齊方式(一條軸線時不起作用)

    2. 項目的屬性

      order:定義項目的排列項目

      flex-grow:定義項目的放大

      flex-shrink:定義項目的縮小

      flex-basis:定義項目的基本大小

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

      align-self:單個項目定義的屬性,可覆蓋align-items屬性。

爲什麼要使用flex佈局

  1. flex佈局的思想簡單明瞭初學者很容易上手
  2. 他可以很好的適應多端佈局(響應各種頁面)
  3. 爲盒狀模型提供最大的靈活性

總結

隨着當前電子產品的快速發展,適應各種設備的顯示已成爲我們前端開發者必備的技能。5-10年前我們只用考慮幾種的設備適配,到如今的十幾種細分來說甚至幾十種,這就需要我們掌握一種可以輕鬆實現頁面響應式佈局的技能,而flex便可以滿足我們當前的需求。

注意:

Internet Explorer 10: 使用-ms-前綴;

UC瀏覽器: 使用-webkit-前綴。

現在,IE11 已經支持display: flex,但是在使用的時候會有一些bug。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章