iT邦幫忙

2023 iThome 鐵人賽

DAY 14
0
自我挑戰組

30天前端網頁基礎觀念(HTML,CSS,Javascript,blender)系列 第 14

Day14 flex屬性的運用 flex-grow flex-shrink

  • 分享至 

  • xImage
  •  

前面都是介紹設定在flex元素的屬性,那今天就來說設定在flex元素內的子項目可以設定的屬性!/images/emoticon/emoticon01.gif

選手介紹

  • flex-grow
  • flex-shrink
  • flex-basis

flex-grow 擴展

可以決定彈性容器在分配空間時,彈性項目在主軸彈性行的剩餘空間中可以擴張的比例。

flex-grow 的數字使用規定要大於等於 0(小數點也可以)。

HTML

<div class="container">
        <div class="box-1">A</div>
        <div class="box-2">B</div>
        <div class="box-3">C</div>
</div>

CSS

.container{
            width: 960px;
            height: 600px;
            display: flex;
            background-color: black;
            margin: auto;
        }
.box-1,.box-2,.box-3{
            width: 100px;
            height: 200px;
            font-size: 40px;
            text-align: center;

}
.box-1{
          background-color: aqua;
}
.box-2{
          background-color: blueviolet;
}
.box-3{
          background-color: blanchedalmond;
}

https://ithelp.ithome.com.tw/upload/images/20230915/201581587ljIjOuFtI.png

這邊給物件高度的原因是因為如果沒有高度會拉伸,視覺上不好看。

接下來試著加看看flex-grow,沒有加的預設值就是0

.box-1{
          background-color: aqua;
          flex-grow:1;
          
}
.box-2{
          background-color: blueviolet;
}
.box-3{
          background-color: blanchedalmond;
}

圖1

https://ithelp.ithome.com.tw/upload/images/20230915/20158158qiYbg2pDnq.png

.box-1{
          background-color: aqua;
          flex-grow:1;
          
}
.box-2{
          background-color: blueviolet;
          flex-grow:2;
}
.box-3{
          background-color: blanchedalmond;
}

圖2

https://ithelp.ithome.com.tw/upload/images/20230915/20158158oaiTAXoMHD.png

那空間是怎麼計算的呢?

計算上是按照剩餘空間的給予佔比去做比例計算,所以還是可能出現設定比例一樣但結果不一樣的情形,那有可能就是剩餘空間的尺寸不一樣,不要誤以為 flex-grow 是在設定彈性項目的寬度比例。

拿這個例子來說,起始我的flex元素設定的寬度是900px,flex元素內的子元素每個寬度是100px。

所以主軸剩餘可用空間為900-100X3=600px,這600px會按照你給子元素grow的數值去分給子元素。

如果設定了flex-grow就算原本有設定的寬度就沒有用了。

上面的例子很明顯可以看出圖一把剩餘的空間600px都給了box1,box1的寬度變為700px。

圖二空間就是分給box1box2,但是因為grow的數值不同所以分到的空間不同。

600px除以3=200px,為什麼是3?因為flex-grow的數值分別是1跟2,1+2=3。

box1的flex-grow數值是1所以寬度變為300px而box2flex-grow數值是1寬度變為500px。


flex-shrink 壓縮

flex-shrink可以決定flex元素在分配空間時,flex元素內子項目在主軸彈性列超出的空間中可以被壓縮的比例。

.container {
			  width: 960px;
			  height: 600px;
			  display: flex;
			  background-color: black;
			  margin: auto;
}
.box-1,
.box-2,
.box-3 {
		   width: 400px;
		   height: 200px;
		   font-size: 40px;
		   text-align: center;
}
.box-1 {
		   background-color: aqua;
}
.box-2 {
		   background-color: blueviolet;
}
.box-3 {
		   background-color: blanchedalmond;
}

這邊我把寬度調高,讓子項目會超出flex元素。
https://ithelp.ithome.com.tw/upload/images/20230915/20158158YlpdIEqttb.png

.container {
			  width: 960px;
			  height: 600px;
			  display: flex;
			  background-color: black;
			  margin: auto;
}
.box-1,
.box-2,
.box-3 {
		   width: 400px;
		   height: 200px;
		   font-size: 40px;
		   text-align: center;
}
.box-1 {
		   background-color: aqua;
           flex-shrink: 2;
}
.box-2 {
		   background-color: blueviolet;
}
.box-3 {
		   background-color: blanchedalmond;
}

https://ithelp.ithome.com.tw/upload/images/20230915/20158158RBBqSrMAqm.png

這邊box-1就會被壓縮了。

.container {
			  width: 960px;
			  height: 600px;
			  display: flex;
			  background-color: black;
			  margin: auto;
}
.box-1,
.box-2,
.box-3 {
		   width: 400px;
		   height: 200px;
		   font-size: 40px;
		   text-align: center;
}
.box-1 {
		   background-color: aqua;
           flex-shrink: 0;
}
.box-2 {
		   background-color: blueviolet;
}
.box-3 {
		   background-color: blanchedalmond;
}

flex-shrink這個屬性的預設值是1,改為0就不會被壓縮

https://ithelp.ithome.com.tw/upload/images/20230915/20158158euuB2DQ7ee.png


那今天先介紹兩位選手,因為比較複雜明天在用一篇介紹第三位選手basis/images/emoticon/emoticon01.gif


上一篇
Day13 flex屬性的運用 align-content
下一篇
Day15 flex屬性的運用 flex-basis
系列文
30天前端網頁基礎觀念(HTML,CSS,Javascript,blender)30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言