3 回答

TA貢獻1911條經驗 獲得超7個贊
短分析
flex-grow
flex-basis
.button { flex-basis: 33.33%; }
#number0 { flex-basis: calc(66.67% + 10px); }
* { box-sizing: border-box; }
.numbers { display: flex; flex-direction: column;}.row { display: flex; flex-direction: row; flex-grow: 1; justify-content: space-between;}.button { display: flex; flex-basis: 33.33%; justify-content: center; align-items: center; margin: 5px; border-radius: 5px; border: 1px solid gray; background: rgba(255, 255, 255, 0.2); cursor: pointer;}#number0 { flex-basis: calc(66.67% + 10px); }* { box-sizing: border-box; }
<div class="numbers"> <div class="row"> <div class="button number" id="number1">1</div> <div class="button number" id="number2">2</div> <div class="button number" id="number3">3</div> </div> <div class="row"> <div class="button number" id="number4">4</div> <div class="button number" id="number5">5</div> <div class="button number" id="number6">6</div> </div> <div class="row"> <div class="button number" id="number7">7</div> <div class="button number" id="number8">8</div> <div class="button number" id="number9">9</div> </div> <div class="row"> <div class="button number" id="number0">0</div> <div class="button" id="colon">:</div> </div></div>
擴展分析
你寫道:
看起來,Flexdiv中的內容會影響到它的計算大小。 flex-grow
財產。我做錯什么了嗎?
你寫道:
在下面提供的小提琴中,你會看到一個數字墊。除底部行外,所有行都包含3個數字。該行的“0”應為兩個數字的寬度,因此 flex-grow: 2
和“:”是一個數字的大小,因此 flex-grow: 1
..我是不是漏掉了什么?
flex-grow
flex-grow
flex-grow: 1
flex-grow: 2
flex-grow: 1
.
但是,從上述因素到第4行布局的第二個10 px邊距在哪里?
在第4行上取消對齊的原因是,第4行的空隙比其他行少一個,這意味著第4行的空閑空間比其他行多10 px。
.numbers { display: flex; flex-direction: column;}.row { display: flex; flex-direction: row; flex-grow: 1; justify-content: space-between;}.button { display: flex; flex-grow: 1; justify-content: center; align-items: center; /* margin: 5px; */ border-radius: 5px; border: 1px solid gray; background: rgba(255, 255, 255, 0.2); cursor: pointer;}.button#number0 { flex-grow: 2;}.button#colon { flex-grow: 1;}
<div class="numbers"> <div class="row"> <div class="button number" id="number1">1</div> <div class="button number" id="number2">2</div> <div class="button number" id="number3">3</div> </div> <div class="row"> <div class="button number" id="number4">4</div> <div class="button number" id="number5">5</div> <div class="button number" id="number6">6</div> </div> <div class="row"> <div class="button number" id="number7">7</div> <div class="button number" id="number8">8</div> <div class="button number" id="number9">9</div> </div> <div class="row"> <div class="button number" id="number0">0</div> <div class="button" id="colon">:</div> </div></div>
那么,第四行到第二行10%的保證金又會發生什么呢?
以下是如何 flex-grow
分配第四行的額外空間:
保留的Flex項(內容為“0”)
flex-grow: 2
. (.button#number0
(在您的代碼中。) Flex項目權限(內容為“:”)
flex-grow: 1
. (.button#colon
(在您的代碼中。) 第二個項間邊距僅出現在包含三個FLEX項的行上,寬度為10 px。(代碼在每個項目周圍顯示5 px,但在css中 ..此外,在柔性箱中,
無邊緣塌陷 .)的總和
flex-grow
價值是三。讓我們除以10 px乘以3,現在我們知道1的比例是3.33px。 因此,左邊的Flex項獲得6.66px的額外空間,而Flex Item右側的額外空間為3.33px。 假設剩下的柔韌物品
flex-grow: 3
相反。然后,左邊的FLEX項將得到7.5px,而FLEX項的右側將得到2.5px。
“0”的右側應與其上方的8、5和2對齊。有點不對勁。
flex-grow
flex-basis
.button { flex-basis: 33.33%; }
#number0 { flex-basis: calc(66.67% + 10px); }
* { box-sizing: border-box; }
.numbers { display: flex; flex-direction: column;}.row { display: flex; flex-direction: row; flex-grow: 1; justify-content: space-between;}.button { display: flex; flex-basis: 33.33%; justify-content: center; align-items: center; margin: 5px; border-radius: 5px; border: 1px solid gray; background: rgba(255, 255, 255, 0.2); cursor: pointer;}#number0 { flex-basis: calc(66.67% + 10px); }* { box-sizing: border-box; }
<div class="numbers"> <div class="row"> <div class="button number" id="number1">1</div> <div class="button number" id="number2">2</div> <div class="button number" id="number3">3</div> </div> <div class="row"> <div class="button number" id="number4">4</div> <div class="button number" id="number5">5</div> <div class="button number" id="number6">6</div> </div> <div class="row"> <div class="button number" id="number7">7</div> <div class="button number" id="number8">8</div> <div class="button number" id="number9">9</div> </div> <div class="row"> <div class="button number" id="number0">0</div> <div class="button" id="colon">:</div> </div></div>
~MDN ~MDN ~W3C
額外:CSS網格解決方案
.numbers { display: grid; grid-template-columns: repeat(auto-fill, minmax(26%, 1fr)); grid-gap: 10px;}#number0 { grid-column: span 2;}/* non-essential decorative styles */.button { display: flex; justify-content: center; align-items: center; border-radius: 5px; border: 1px solid gray;}
<div class="numbers"> <div class="button number" id="number1">1</div> <div class="button number" id="number2">2</div> <div class="button number" id="number3">3</div> <div class="button number" id="number4">4</div> <div class="button number" id="number5">5</div> <div class="button number" id="number6">6</div> <div class="button number" id="number7">7</div> <div class="button number" id="number8">8</div> <div class="button number" id="number9">9</div> <div class="button number" id="number0">0</div> <div class="button" id="colon">:</div></div>

TA貢獻1776條經驗 獲得超12個贊
我認為邁克爾·B說的一切都是正確的。只有解決辦法有點尷尬。我個人不喜歡卡卡。只是感覺不對勁。
你遇到的問題是一個更普遍的問題。你把太多的責任放在一個元素上。在這種情況下,.button班級,等級。彈性和保證金與彈性增長是太多的責任。試著把它拆開。它意味著更多的DOM元素,但它為您節省了很多痛苦。
.numbers {
display: flex;
flex-direction: column;
max-width: 200px;
margin: 0 auto;
}
.row {
display: flex;
flex-direction: row;
flex-grow: 1;
justify-content: space-between;
}
.row > .box {
display: flex;
flex-basis: 33.3333%;
justify-content: center;
align-items: center;
}
.row > .box.box-2 {
flex-basis: 66.6667%;
}
.button {
border-radius: 5px;
border: 1px solid gray;
background: rgba(255, 255, 255, 0.2);
cursor: pointer;
width: auto;
text-align: center;
margin: 5px;
width: 100%;
}
<div class="numbers">
<div class="row">
<div class="box"><div class="button number" id="number1">1</div></div>
<div class="box"><div class="button number" id="number2">2</div></div>
<div class="box"><div class="button number" id="number3">3</div></div>
</div>
<div class="row">
<div class="box"><div class="button number" id="number4">4</div></div>
<div class="box"><div class="button number" id="number5">5</div></div>
<div class="box"><div class="button number" id="number6">6</div></div>
</div>
<div class="row">
<div class="box"><div class="button number" id="number7">7</div></div>
<div class="box"><div class="button number" id="number8">8</div></div>
<div class="box"><div class="button number" id="number9">9</div></div>
</div>
<div class="row">
<div class="box box-2"><div class="button number" id="number0">0</div></div>
<div class="box"><div class="button" id="colon">:</div></div>
</div>
</div>
- 3 回答
- 0 關注
- 668 瀏覽
相關問題推薦
添加回答
舉報