目錄
一.什么是Flex布局
二.Flex布局使用
2.1Flex使用語法
2.2基本概念
三.容器的屬性
3.1所有屬性概述
3.2flex-direction
3.3flex-wrap
3.4flex-flow
3.5justify-content
3.6align-items
3.7align-content
四.項目(子元素)的屬性
4.1所有屬性概述
4.2order
4.3flex-grow
4.4flex-shrink
4.5flex-basis
4.6flex
4.7align-self
一.什么是Flex布局
Flex布局可以:“簡便、完整、響應式”的實現各種頁面布局
Flex是“Flexible?box”的縮寫,意為“彈性布局”,用來為“盒子模型”提供“最大的靈活性”
二.Flex布局使用
2.1Flex使用語法
任何一個容器都可以指定為Flex布局
使用方法:
.box {display:flex;
}
行內元素也可以使用Flex布局:
.box {display:inline-flex;
}
值得注意的是,使用Flex布局后,子元素的“float”、“clear”、“vertical-align”屬性將失效
2.2基本概念
采用Flex布局的元素,稱為Flex容器,簡稱“容器”,它的所有子元素自動成為容器成員,稱為Flex項目,簡稱“項目”
容器默認存在兩根軸:“水平的主軸(main axis)”和“垂直的交叉軸(cross axis)”
主軸的開始位置(與邊框的交叉點)叫“main start”,結束位置叫“main end”
交叉軸的開始位置叫“cross start”,結束位置叫“cross?end”
項目默認沿主軸排列,單個項目占據的主軸空間叫作“main size”,占據的交叉軸空間叫作“corss?size”
簡化:“x軸為主軸”、“y軸為交叉軸”
三.容器的屬性
3.1所有屬性概述
Flex容器一共有六大屬性,在這里我們給出:
- flex-direction:內部元素的排列方式:從左到右、從右到左、從上到下、從下到上
- flex-wrap:子元素的換行方式:不換行、換行(第一行在上面、第二行在上面)
- flex-flow:子元素的排列方式和換行方式的簡寫
- justify-content:子元素的水平對齊方式
- align-items:子元素的垂直對齊方式
- align-content:設置多個元素組成的整塊的對齊方式
3.2flex-direction
flex-direction決定主軸的方向(即項目的排列方向)
簡化:
內部元素的排列方式---->(從左到右、從右到左、從上到下、從下到上)
.box {flex-direction:row | row-reverse | column | column-reverse;
}
圖示:
下面以一個代碼為例,表示四個方向的排列:
<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>Flex</title></head><body><div class="div"><div class="divC" style="width: 100px;height: 100px;background-color: aqua;"></div><div class="divC" style="width: 100px;height: 100px;background-color: black;"></div><div class="divC" style="width: 100px;height: 100px;background-color: blue;"></div></div><style type="text/css">.div{/* 設置為flex布局 */display: flex;/* 默認:從左往右 */flex-direction: row;/* row(默認值):主軸為水平方向,起點在左端。row-reverse:主軸為水平方向,起點在右端。column:主軸為垂直方向,起點在上沿。column-reverse:主軸為垂直方向,起點在下沿。 */}</style></body>
</html>
上面的“flex-direction”為“row”時效果:
上面的“flex-direction”為“row-reverse”時效果:
上面的“flex-direction”為“column”時效果:
上面的“flex-direction”為“column-reverse”時效果:
3.3flex-wrap
默認情況下,項目都排在一條線(軸線)上,flex-wrap定義如果一條軸線排不下,如何換行
簡化:
子元素的換行方式:不換行、換行(第一行在上面、第二行在上面)
.box {flex-wrap:nowrap | wrap | warp-reverse;
}
nowraop(默認) 不換行 :
warp?換行(第一行在上):
wrap-reverse?換行(第二行在上):
3.4flex-flow
flex-flow屬性是flex-direction屬性和flex-wrap屬性的簡寫形式,默認值為:“row?nowrap”
簡化:
是子元素的排列方式和換行方式的簡寫
.box {flex-flow:<flex-direction> || <flex-wrap>;
}
3.5justify-content
justify-content屬性定義了項目在主軸上的對齊方式
簡化:
設置子元素的水平對齊方式
.box {justify-content:flex-start | flex-end | center | space-between | space-around;
}
圖示:
詳細說明:
- flex-start(默認值):左對齊
- flex-end:右對齊
- center:居中
- space-between:兩端對齊,項目之間的間隔相等
- space-around:每個項目兩側的間隔相等,所以,項目之間的間隔比的項目與邊框的間隔大一倍
3.6align-items
align-items屬性定義項目在交叉軸上如何對齊
簡化:
設置子元素的垂直對齊方式
格式:
.box {align-items:flex-start | flex-end | center | baseline | stretch;
}
圖示:
詳細說明:
- flex-start:交叉軸的起點對齊(頂部對齊)
- flex-end:交叉軸的終點對齊(底部對齊)
- center:交叉軸的中點對齊(垂直對齊)
- baseline:項目的第一行文字的基線對齊(基于內部第一行文本對齊)
- stretch(默認值):如果項目未設置成高度或設為auto,將占滿整個容器的高度(高度占滿整個容器)
3.7align-content
align-content屬性定義了多根軸線的對齊方式,如果項目只有一根軸線,該屬性不起作用
簡化:
設置多個元素組成的整塊的對齊方式
格式:
.box {align-content:flex-start | flex-end | center | space-between | space-around | stretch;
}
圖示:
詳細說明:
- flex-start:與交叉軸的起點對齊(頂部對齊)
- flex-end:與交叉軸的終點對齊(底部對齊)
- center:與交叉軸的中點對齊(居中對齊)
- sapce-between:與交叉軸兩端對齊,軸線之間的間隔平均分布
- space-around:每根軸線兩側的間隔相等,所以軸線之間的間隔比軸線與邊框之間的間隔大
- stretch(默認值):軸線占滿整個交叉軸(高度占滿整個容器)
四.項目(子元素)的屬性
4.1所有屬性概述
- order:按照數字大小設置各個元素之間的排列方式
- flex-grow:按照權重分配剩余空間進行等比例放大
- flex-shrink:按照權重進行等比例縮小
- felx-basis:設置子元素原始所占主軸空間大小(寬度)
- flex:設置放大、縮小和原始大小的縮寫,建議優先使用此方式
- align-self:單獨設置特定元素的對齊方式,忽略“align-items”
4.2order
order屬性定義項目的排列順序,數值越小,排列越靠前,默認為0
簡化:
按照數字大小設置各個元素之間的排列方式
格式:
.item {order:<integer>;
}
圖示:
4.3flex-grow
flex-grow屬性定義項目的放大比例,默認為0,即如果存在剩余空間,也不放大
簡化:
按照權重分配剩余空間進行等比例放大
格式:
.item{flex-grow:<number>;
}
提示:
如果所有項目的flex-grow都為1,那么它們將均勻分配剩余空間。
如果某個項目flex-grow為2,其余項目為1,那么前者分配到的空間將比后者大一倍
圖示:
4.4flex-shrink
flex-shrink屬性定義了項目的縮小比例,默認為1,即如果空間不足,該項目將縮小
簡化:
按照權重進行等比例縮小
格式:
.item{flex-shrink:<number>;
}
提示:
負值是一個無效的數值
如果某個項目屬性值為0,那么該項目將不會縮小,而是讓其它項目縮小
圖示:
4.5flex-basis
flex-basis屬性定義了在分配多余空間之前,項目占據的主軸空間(main size)
瀏覽器根據這個屬性計算是否有多余空間,默認值為“auto”,即項目本來大小
簡化:
設置子元素原始所占主軸空間大小(寬度)
提示:
它可以設為跟width或height一樣的值,那么項目將會占據固定空間
格式:
.item{flex-basis:<length> | auto;
}
4.6flex
flex屬性是flex-grow,flex-shrink,flex-basis的簡寫,默認值為“0 1?auto”,后兩個屬性可選
簡化:
設置放大、縮小、原始大小的簡寫,建議優先使用該方式
提示:
該屬性有兩個快捷值:“auto(1 1 auto)”、“none(0 0 auto)”
建議優先寫這兩個快捷值
格式:
.item {flex:none | [<flex-grow> <flex-shrink> <flex-basis>];
}
4.7align-self
align-self屬性允許單個項目與其他項目有不一樣的對齊方式,可以覆蓋“align-items”屬性
默認值為“auto”,表示繼承父元素的“align-items”屬性,如果沒有父元素,那么等同于“stretch”
簡化:
單獨設置特定元素的方式,忽略align-items
格式:
.item {align-self:auto | flex-start | flex-end | center | baseline | stretch;
}
圖示: