彈性布局flex
任何容器都可以使用彈性布局 .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