- flex-grow
flex-grow 只有在 flex 容器中有剩余空間時才會生效鱼蝉。flex 項的 flex-grow 屬性指定該 flex 項相對于其他 flex 項將拉伸多少洒嗤,以填充 flex 容器。默認值為1魁亦。當設置為 0 時渔隶,該 flex 項將不會被拉伸去填補剩余空間。在這個例子中洁奈,兩個項的比例是 1:2间唉,意思是在被拉伸時绞灼,第一個 flex 項將占用剩余空間的 1/3,而第二個 flex 項將占據(jù)剩余空間的2/3呈野。(如果item不定義flex-grow镀赌,也不定義寬度,則item寬度由內容決定)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<style>
.flex-container {
display: flex;
width: 180px;
padding: 10px;
background-color: #F0f0f0;
}
.flex-item1 {
flex-grow: 0;
}
.flex-item2 {
flex-grow: 1;
}
.flex-item3 {
flex-grow: 2;
}
.flex-container .flex-item {
padding: 20px 0;
text-align: center;
width: 30px;
background-color: #B1FF84;
}
.flex-container .flex-item:first-child {
background-color: #F5DE25;
}
.flex-container .flex-item:last-child {
background-color: #90D9F7;
}
</style>
<body>
<div class="flex-container">
<div class="flex-item flex-item1">1</div>
<div class="flex-item flex-item2">2</div>
<div class="flex-item flex-item3">3</div>
</div>
</div>
</body>
</html>
上例中际跪,item的寬度即使不定義商佛,item2和item3也會拉升,item1寬度由內容決定
- flex-basis
flex-basis屬性定義了項目占據(jù)的主軸空間姆打。瀏覽器根據(jù)這個屬性良姆,計算主軸多余空間或不足空間的大小。它的默認值為auto幔戏,即項目的本來大小
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>flesbox</title>
<style>
.wrapper {
display: flex;
flex-flow: row wrap;
font-weight: bold;
text-align: center;
background-color: red;
}
.item {
background-color: pink;
margin: 10px;
}
body {
padding: 2em;
}
</style>
</head>
<body>
<div class="wrapper">
<div class="item item1">item1</div>
<div class="item item2">item1</div>
</div>
</body>
</html>
容器寬度默認充滿父元素
flex-grow默認是0(不會拉升填充剩余空間)玛追,這樣每個item的默認寬度是由內容決定
效果圖如下:
設置item的寬度,讓其超過容器闲延,由于設置了flex-flow: row wrap;這時候會換行
.item {
background-color: pink;
margin: 10px;
width: 80%;
}
如果同時設置了width和flex-basis,以flex-basis為準
.item {
background-color: pink;
margin: 10px;
width: 80%;
flex-basis: 100px;
}
相當于:
.item {
background-color: pink;
margin: 10px;
width: 100px;
}
如果flex-basis設置為auto痊剖,則item的寬度取width的值
.item {
background-color: pink;
margin: 10px;
width: 80%;
flex-basis: auto;
}
和
.item {
background-color: pink;
margin: 10px;
width: 80%;
}
是一個意思
max-width/min-width不會因為flex-basis失效
.item {
background-color: pink;
margin: 10px;
flex-basis: 800px;
max-width: 100px;
}
item的寬度不會大于100px
- flex-shrink
任何情況下,item都會被container包裹垒玲,不會超過陆馁,如果container空間不夠,item會自動壓縮
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<style>
.flex-container {
display: flex;
width: 50px;
}
/* 以下為輔助樣式 */
.flex-container {
background-color: #F0f0f0;
}
.flex-container .flex-item {
width: 50px;
text-align: center;
background-color: #B1FF84;
}
.flex-container .flex-item:first-child {
background-color: #F5DE25;
}
.flex-container .flex-item:last-child {
background-color: #90D9F7;
}
</style>
<body>
<div class="flex-container">
<div class="flex-item">1</div>
<div class="flex-item">2</div>
</div>
</body>
</html>
上例中item的寬度會縮小到25px
之所以會自動壓縮合愈,是因為flex-shrink的默認值是1叮贩,容器寬度不夠容納所有item時,flex-shrink規(guī)定了item縮短的比例佛析,默認是平均縮短
- flex-grow益老、flex-shrink都是優(yōu)先保證其定義的寬度,有剩余或不夠時寸莫,把剩余或不夠的部分按指定的比例分配
比如這個
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
#box {
width: 100%;
height: 100px;
display: flex;
margin: 10px;
}
#left,
#right {
flex-basis: 400px;/* 或width:200px */
height: 100px;
margin: 10px;
background-color: #999;
}
#center {
flex-grow: 1;
height: 100px;
margin: 10px;
background-color: #f00;
}
</style>
</head>
<body>
<div id="box">
<div id="left">left</div>
<div id="center">center</div>
<div id="right">right</div>
</div>
</body>
</html>
縮小時捺萌,開始左右兩側div固定為400px,逐漸壓縮中間的div膘茎,中間的div只夠容納其內容桃纯,無法再壓縮時,再壓縮左右兩側div
拉升時辽狈,左右兩側從小于400px逐漸拉升到400px后保持400px 慈参,再拉升則剩余的空間都加到中間div上
可以把box的min-width限定為1000px呛牲,以使其足夠容納左右各400px的固定長度刮萌,這樣左右兩個div長度就不會變化了,瀏覽器縮小到不夠顯示時會出現(xiàn)滾動條
#box {
min-width: 1000px;
height: 100px;
display: flex;
margin: 10px;
}
- flex 是 flex-grow娘扩、flex-shrink着茸、flex-basis的縮寫壮锻,
flex-grow默認值是0,flex-shrink默認值是1涮阔,flex-basis是auto(item寬度)
所以flex 的默認值是 0 1 auto