CSS弹性盒子布局flex
flex布局:
flex布局是繼標準流布局、浮動布局、定位布局后的第四種布局方式。這種方式可以非常優雅的實現子元素居中或均勻分布,甚至可以隨著窗口縮放自動適應。flex布局在瀏覽器中存在一定的兼容性(具體參考:https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_Flexible_Box_Layout/Using_CSS_flexible_boxes#%E6%B5%8F%E8%A7%88%E5%99%A8%E5%85%BC%E5%AE%B9%E6%80%A7。但是在小程序中,是完全兼容flex布局的,并且微信官方也是推薦使用flex布局的。下面就來詳細的講下flex布局。
一個小例子:
看以下代碼:
<view class='outter'><view class='inner'>1</view><view class='inner'>2</view> </view> .outter{display: flex;justify-content: space-between;width: 300px;height: 200px;background: pink; }.outter .inner{background: gray;width: 100px;height: 100px; }最后的效果圖:
基本概念:
設置在主軸上的排列方式:
默認情況下,主軸的方向是從左到右。在主軸方向上,可以通過justify-content屬性來設置他們的排列方式。排列方式有以下幾種:
設置在側軸上的排列方式:
默認情況下,側軸的方向是從上到下。在側軸方向上,可以通過align-items屬性來設置他們的排列方式。排列方式有以下幾種:
效果圖為:
然后wxss文件為:
.outter{display: flex;align-items: baseline;width: 300px;height: 200px;background: pink; } .outter .inner{...}那么效果圖為:
更換主軸和側軸方向
主軸默認的方向是從左到右,側軸的方向默認是從上到下,當然也可以進行修改。可以通過flex-direction進行修改。可以修改的參數為以下:
.
.
.
換行
默認情況下,元素個數如果超過一定數量,那么在一行當中就排列不下。此時flex默認的處理方式是壓縮元素,使其能在一行中排列下來。比如以下代碼:
<view class='outter'><view class='inner'>1</view><view class='inner'>2</view><view class='inner'>3</view><view class='inner'>4</view> </view> .outter{display: flex;width: 300px;height: 200px;background: pink; }.outter .inner{background: gray;width: 100px;height: 100px;border: 1px solid #ccc; }那么會把這四個元素擠壓在一行中。即使給元素設置了寬度也沒有用的。效果圖如下:
可以通過flex-wrap來改變排列的方式。可以設置的屬性如下:
.
.
.
align-content屬性
在排列中,如果有多行,那么這個屬性是設置多行之間的排列方式。可以通過align-content屬性來確定排列的方式。可以設置以下值。
2. flex-end:末尾段對齊。效果圖如下:
6. stretch:默認方式,如果沒有給元素設置高度,那么會占滿整個交叉軸。
效果圖如下:
元素(子容器)的相關屬性
flex-basis:
定義了在分配多余空間之前,項目占據的主軸空間,瀏覽器根據這個屬性,計算主軸是否有多余空間。
默認值:auto,即項目本來的大小, 這時候 item 的寬高取決于 width 或 height 的值。
當主軸為水平方向的時候,當設置了 flex-basis,項目的寬度設置值會失效,flex-basis 需要跟 flex-grow 和 flex-shrink 配合使用才能發揮效果。
當 flex-basis 值為 0 時,是把該項目視為零尺寸的,故即使聲明該尺寸為 140px,也并沒有什么用。
當 flex-basis 值為 auto 時,則跟根據尺寸的設定值(假如為 100px),則這 100px 不會納入剩余空間。
flex-grow:
設置元素是否需要擴大的比例。默認值為0,即如果存在剩余空間,也不放大。比如有以下代碼:
wxss代碼為:
.outter{display: flex;width: 300px;height: 300px;flex-wrap: wrap;background: pink; }.outter .inner{background: gray;width: 100px;height: 100px;border: 1px solid #ccc;box-sizing: border-box; }.outter .inner1{flex-grow: 2; }.outter .inner2{flex-grow: 1; }效果圖為:
因為兩個元素分別占了2份,1份,所以第一個元素是占據了整個容器寬度的2/3,第二個元素占據了整個容器寬度的1/3。
另外,如果設置flex-grow為0,那么他的寬度將會保持為設置的寬度,如果寬度沒有設置,那么將根據他的子元素來保留寬度。假如代碼為:
wxss代碼為:
.outter .inner1{flex-grow: 0; }.outter .inner2{flex-grow: 1; }效果圖為:
如果把inner1的width刪掉,那么效果圖為:
flex-shrink屬性:
定義了項目的縮小比例,默認為1,即如果空間不足,該項目將縮小。比如有以下代碼:
1234wxss的代碼如下:
.outter{display: flex;width: 300px;height: 300px;background: pink; }.outter .inner{background: gray;width: 100px;height: 100px;border: 1px solid #ccc;box-sizing: border-box; }.outter .inner2{flex-shrink: 0; }效果圖為:
因為給inner2設置了flex-shrink為0,所以即使在空間不夠的情況下,他也不會被壓縮。
flex屬性:
flex屬性是flex-grow flex-shrink flex-basis三個屬性的簡寫。假設以上三個屬性同樣取默認值,則 flex的默認值是0 1 auto。
關于flex的取值,有以下幾種方式:
auto:等價于1 1 auto。也就是允許增長,允許縮小,寬度為自動。
none:等價于0 0 auto。也就是不允許增長,不允許縮小,寬度為自動。
非負數字:這個數字表示的是flex-grow的值,flex-shrink為1,表示允許縮小,flex-basis為0%。可以認為他就是把剩余的空間進行填充。比如以下代碼是等價的:
.item {flex: 1;}.item {flex-grow: 1;flex-shrink: 1;flex-basis: 0%;}0:對應的三個值分別為0 1 0%。比如以下代碼是等價的:
.item {flex: 0;} .item {flex-grow: 0;flex-shrink: 1;flex-basis: 0%; }長度或者百分比:則這個值視為flex-basis的值,而flex-grow為1,flex-shrink為1。比如以下代碼是等價的:
.item-1 {flex: 0%;} .item-1 {flex-grow: 1;flex-shrink: 1;flex-basis: 0%; }.item-2 {flex: 24px;} .item-2 {flex-grow: 1;flex-shrink: 1;flex-basis: 24px; }兩個非負數字:分別視為flex-grow和flex-shrink的值,flex-basis取0%,如下是等同的:
.item {flex: 2 3;} .item {flex-grow: 2;flex-shrink: 3;flex-basis: 0%; }一個非負數字和一個長度或百分比:則分別視為 flex-grow 和 flex-basis 的值,flex-shrink 取 1,如下是等同的:
.item {flex: 11 32px;} .item {flex-grow: 11;flex-shrink: 1;flex-basis: 32px; }更多關于flex布局請參考:
總結
以上是生活随笔為你收集整理的CSS弹性盒子布局flex的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机课堂热身游戏,简单的两款小游戏,带
- 下一篇: 现代 CSS 解决方案:文字颜色自动适配