css佈局之flexbox學習

今天學習了flex佈局,發現它是真心強大,因此必須的記錄下。html

如下簡單的佈局要求是難以或不可能用這樣的工具方便且靈活的實現:瀏覽器

  • 垂直居中父內容的裏一塊內容。
  • 使容器的全部子項佔用等量的可用寬度/高度,而無論有多少寬度/高度可用。
  • 使多列布局中的全部列採用相同的高度,即便它們包含的內容量不一樣。

先上一個例子:工具

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style>
            section {
              height:100px;
              background: purple;
              display: flex;
              align-items: center;
              justify-content: space-around;
            }
            div {
              color: white;
              background: orange;
              flex: 1;
              margin-right: 10px;
            }
            div:last-child {
              margin-right: 0;
            }
            section, div {
              padding: 10px;
            }
        </style>
    </head>
    <body>
        <section>
          <div>This is a box</div>
          <div>This is a box</div>
          <div>This is a box</div>
        </section>
    </body>
</html
>

貼上結果圖(隨便拉寬紫色容器內黃色的div塊都能自適應寬度喲):佈局

再上一張flex模型說明圖學習

  • 主軸(main axis)是沿着 flex 元素放置的方向延伸的軸(好比頁面上的橫向的行、縱向的列)。該軸的開始和結束被稱爲 main startmain end
  • 橫軸(cross axis)是垂直於 flex 元素放置方向的軸。該軸的開始和結束被稱爲 cross startcross end
  • 設置了 display: flex 的父元素(在上面的例子中<section>)被稱之爲 flex 容器(flex container)
  • 在 flex 容器中表現爲 flexible 框的元素被稱之爲 flex 項(flex item)(本例中是<div> 元素)。

下面介紹下flex容器的6個屬性flex

一、flex-direction —— 決定主軸的方向(即flex項的排列方向)。其值有如下四個:ui

  row(默認值):主軸爲水平方向,起點在左端。spa

  row-reverse:主軸爲水平方向,起點在右端。code

  column:主軸爲垂直方向,起點在上沿。htm

  column-reverse:主軸爲垂直方向,起點在下沿。

二、flex-wrap —— 默認狀況下,項目都排在一條線(又稱"軸線")上。flex-wrap屬性定義,若是一條軸線排不下,如何換行。其值有如下三個:

  nowrap(默認):不換行。

  wrap:換行,第一行在上方。

  wrap-reverse:換行,第一行在下方。

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

四、justify-content —— justify-content屬性定義了項目在主軸上的對齊方式。其值有如下五個:

  flex-start(默認值):左對齊。

  flex-end:右對齊。

  center: 居中。

  space-between:兩端對齊,項目之間的間隔都相等。

  space-around:每一個項目兩側的間隔相等。因此,項目之間的間隔比項目與邊框的間隔大一倍。

五、align-items —— justify-content屬性定義項目在交叉軸上如何對齊。其值有如下五個:

  flex-start:交叉軸的起點對齊。

  flex-end:交叉軸的終點對齊。

  center:交叉軸的中點對齊。

  baseline: 項目的第一行文字的基線對齊。

  stretch(默認值):若是項目未設置高度或設爲auto,將佔滿整個容器的高度。

六、align-content —— align-content屬性定義了多根軸線的對齊方式。若是項目只有一根軸線,該屬性不起做用。其值有如下六個:

  flex-start:與交叉軸的起點對齊。

  flex-end:與交叉軸的終點對齊。

  center:與交叉軸的中點對齊。

  space-between:與交叉軸兩端對齊,軸線之間的間隔平均分佈。

  space-around:每根軸線兩側的間隔都相等。因此,軸線之間的間隔比軸線與邊框的間隔大一倍。

  stretch(默認值):軸線佔滿整個交叉軸。

而後是flex 項(flex item)的6個屬性:

  orderorder屬性定義項目的排列順序。數值越小,排列越靠前,默認爲0。

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

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

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

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

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

 

以上內容參考來自:https://developer.mozilla.org/zh-CN/docs/Learn/CSS/CSS_layout/Flexboxhttp://www.ruanyifeng.com/blog/2015/07/flex-grammar.html?utm_source=tuicool

相關文章
相關標籤/搜索