Flex布局(彈性布局)
Flex是彈性布局,用來為盒狀模型提供最大的靈活性,任何一個容器都可以指定為Flex布局。行內元素也可以使用Flex布局。
采用Flex布局的元素,稱為Flex容器。flex item項目是Flex布局的元素,簡稱項目。
容器:水平的主軸(main axis)和垂直的交叉軸(cross axis),單個項目占據的主軸空間叫做main size,占據的交叉軸空間叫做cross size。
容器的屬性:
1、flex-direction:決定主軸的方向(即項目的排列方向),注意main-size的位置和主軸方向一致。
.box {flex-direction:row(row-reverse、column、column-reverse);}
row(默認值):主軸為水平方向,起點在左端。
row-reverse:主軸為水平方向,起點在右端。
column:主軸為垂直方向,起點在上沿。
column-reverse:主軸為垂直方向,起點在下沿。
2、flex-wrap:換行(如何換行)
.box{flex-wrap:nowrap(wrap、wrap-reverse)}
nowrap:不換行。
wrap:換行,第一行在上方。
wrap-reverse:換行,第一行在下方。
3、justify-content:定義項目在主軸上的對齊方式
.box{justify-content:flex-start(flex-end、center、space-between、space-around)}
flex-start(默認值):左對齊
center:居中
space-between:兩端對齊,項目之間的間隔都相等
space-around:每個項目兩側的間隔相等,所有,項目之間的間隔比項目與邊框的間隔大一倍
4、align-items:定義項目在交叉軸上如何對齊
.box{align-items:flex-start(flex-end,center、baseline、stretch)}
flex-start:交叉軸的起點對齊
flex-end:交叉軸的終點對齊
center:交叉軸的中點對齊
baseline:項目的第一行文字的基線對齊
5、algin-content:定義了多根軸線的對齊方式,如果項目只有一根軸線,該屬性不起作用
.box{align-content:flex-start(flex-end、center、stretch、space-between、space-around)}
flex-start:與交叉軸的起點對齊。
flex-end:與交叉軸的終點對齊。
center:與交叉軸的終點對齊。
space-between:與交叉軸兩端對齊,軸線之間的間隔平均分布
space-around:每根軸線兩側的間隔都相等。
stretch(默認值):軸線占滿整個交叉軸。
項目的屬性:
1、order:定義項目的排列順序,數值越小,排列越靠前,默認0,。
.item{order:<integer>;}
2、flex-grow:定義項目的放大比例,默認為0,即如果存在剩余空間,也不放大。
.item{flex-grow:<number>;}
3、flex-shrink:定義了項目的縮小比例,默認為1,即空間不足,該項目縮小,如果所有項目的flex-shrink屬性都為1,當空間不足時,都將等比例縮小,如果一個項目的flex-shrink
屬性為0,其他項目都為1,則空間不足時,前者不縮小,負數對該屬性無效。
4、flex-basis:定義了在分配多余空間之前,項目占據的主軸空間,瀏覽器根據這個屬性,計算主軸是否有多余空間,它的默認值為auto,即項目的本來大小。
5、align-self:允許單個項目有與其他項目不一樣的對齊方式,可覆蓋align-items屬性,默認值為auto,表示繼承父元素的align-items屬性,如果沒有父元素,則等於stretch。
Grid 布局 ,網格布局
Grid布局與Flex布局有一定的相似性,都可以指定,容器內部多個項目的位置
Flex布局:軸線布局,可以看做是一維布局。
Grid布局:則是將容器划分分成“行”和“列”,產生單元格,指定的項目所在的單元格,可以看做是二維布局。
1、grid-template-columns/row 屬性
columns 是定義了每一列的寬
row 是定義了每一行的高
2、repeat() 兩個參數 (重復n次,重復的值)
.box{
display:grid;
grid-template-columns:repeat(3,33.33%)
grid-template-row:repeat(3,33.33%)
}
3、可以給網格線起名字
.box{
display:grid;
grid-template-columns:[ ] 100px [ ] 100px [ ] 100px [ ]
grid-template-row:[ ] 100px [ ] 100px [ ] 100px [ ]
}
4、grid-row-gap屬性,grid-columns-gap屬性
grid-row-gap設置行與行的間隔(行間距)、
grid-columns-gap設置列與列的間隔(列間距)
5、網格布局允許指定區域(area),一個區域由單個或者多個單元格組成
grid-templace-area:header header header
main main sidebar
footer footer footer
如果某些區域不需要利用,則用點(.)表示。
6、justify-items,align-items,place-items 屬性
justify-items 設置單元格內容的水平位置
align-items 設置單元格內容的垂直位置
7、justify-content,align-content,place-content
justify-content 整個內容區域在容器里面的水平位置
align-content 整個內容區域在容器里面的垂直位置
8、grid-auto-columns,grid-auto-rows屬性
有時候,一些項目的指定位置,在現在有網格的外部,比如3行,但是某一個項目指定在第5行,這時瀏覽器會自動生成多余的網格。