1. 程式人生 > >彈性布局flex

彈性布局flex

em1 column 沒有 http width eight 技術 direct 多余

任何容器都可以使用彈性布局 .box{display: flex;}

行內元素也可以使用彈性布局:.box{display:inline-flex}

一、容器的6個屬性:flex-direction flex-wrap flex-flow justify-content align-items

flex-direction 決定主軸的方向

flex-direction 的四個值: row row-reverse column column-reverse

row 主軸為水平方向 起點在左

row-reverse 主軸為水平方向 起點在右

column 主軸為垂直方向 起點在上

column-reverse 主軸為垂直方向 起點在下

例子:

技術分享圖片

技術分享圖片

技術分享圖片

當flex-direction:column

技術分享圖片

二、flex-wrap 默認情況下 項目都排在一條線上 flex-wrap 屬性定義,如果一條軸線排不下 如何換行

flex-wrap的三個值:nowrap wrap wrap-reverse

nowrap 表示不換行

wrap 換行 第一行在上方

wrap-reverse 換行 第一行在下方

技術分享圖片

技術分享圖片

當flex-wrap:wrap 時

技術分享圖片

當flex-wrap:wrap-reverse時

技術分享圖片

三、flex-flow 為flex-direction和flex-wrap 的簡寫方式

例如:.box{flex-flow:row wrap;}

技術分享圖片

四、justify-content 定義了在主軸上的對齊方式

justify-content 的五個值 flex-start flex-end center space-between space-around

flex-start 左對齊

flex-end 右對齊

center 居中

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

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

justify-content:flex-start

技術分享圖片

justify-content:flex-end

技術分享圖片

justify-content:center

技術分享圖片

justify-content:space-between

技術分享圖片

justify-content:space-around

技術分享圖片

五、align-items 定義了在交叉軸上如何對齊

align-items的五個值:flex-start flex-end center baseline stretch

flex-start 交叉軸的起點對齊

flex-end 交叉軸的終點對齊

center 交叉軸的中點對齊

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

stretch 如果項目未設置高度或設置為auto 將占滿整個容器的高度

align-items:flex-start

技術分享圖片

align-items:flex-end

技術分享圖片

align-items:center

技術分享圖片

align-items:baseline

技術分享圖片

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

align-content的六個值:flex-start flex-end center space-between space-around stretch

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

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

center 與交叉軸的中點對齊

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

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

align-content:flex-start

技術分享圖片

align-content:flex-end

技術分享圖片

align-content:center

技術分享圖片

align-content:space-between

技術分享圖片

align-content:space-around

技術分享圖片

align-content:stretch (默認值) 軸線占滿整個交叉軸

七、項目的屬性

order flex-grow flex-shrink flex-basis flex align-self

1、order 屬性定義項目的排列順序。數值越小,排列越靠前 默認為0

2、flex-grow 屬性定義項目的放大比例 默認為0 即如果存在剩余空間 也不放大 如果所有項目的flex-grow屬性都為1 則它們將等分剩余的空間 如果一個項目的flex-grow 屬性為2 其他項目都為1 則前者占據的剩余空間將比其他多一倍

3、flex-shrink 屬性定義了項目的縮小比例,默認為1 即如果空間不足,該項目將縮小 如果所有項目的flex-shrink屬性都為1 當空間不足時,都將等比例縮小,如果一個項目的flex-shrink屬性為0 其他項都為1 則空間不足時,前者不縮小

技術分享圖片

技術分享圖片

技術分享圖片

item1 設置flex-shrink:0 當item1 的寬度不斷增大時 item2和item3 的寬度就等比例縮小

4、flex-basis 屬性定義了在分配多余空間之前,項目占據的主軸空間,瀏覽器根據這個屬性,計算主軸是否有多余空間 他的默認值為auto 即項目的本來大小 可以設為跟width 或height 屬性一樣的值 則項目占據固定空間

技術分享圖片

技術分享圖片

item2 的flex-basis設置為300px item 的width改變時 item3等比例的放大縮小 item2 則一直占據300px

5、flex 屬性是flex-grow flex-shrink 和flex-basis的簡寫 默認值為0 1 auto

6、align-self 屬性允許單個項目有與其他項目不一樣的對齊方式 可覆蓋align-items屬性。默認值為auto 表示繼承父元素的align-items屬性,如果沒有父元素的align-items 屬性,如果沒有父元素,則等同於stretch

align-self 的6個值 auto flex-start flex-end center baseline stretch

作用與align-items 的6個值的作用相同

align-self:auto

技術分享圖片

align-self:flex-start

技術分享圖片

align-self:flex-end

技術分享圖片

align-self:center

技術分享圖片

align-self:baseline(文字的基線對齊)

技術分享圖片

align-self:stretch (當項目沒有設置高度時 占據整個容器的高度)

彈性布局flex