我有以下 HTML
<div class="container">
<div class="box box1">one 😎</div>
<div class="box box2">two 🍕</div>
<div class="box box3">three 🍟</div>
<div class="box box4">four 👍</div>
<div class="box box5">five 👀</div>
<div class="box box6">six 💩</div>
</div>
并使用 flexbox 使用此 CSS 设置样式
.container {
display:flex;
flex-wrap:wrap;
}
.box {
flex-basis:500px;
flex-grow:1;
}
.box3 {
flex-grow:10;
}
我假设 flex-grow:10;
会使 box 3
10 倍 比 box 4
出现在我的屏幕上,但我看到了这个:
为什么这不是大 10 倍?
这里是相对的CodePen
最佳答案
Is flex-grow affected by flex-basis?
在某种程度上,是的,因为 flex-grow
所做的是分配剩余的空间,在元素的大小减小之后,元素的大小可以通过内容或显式设置来调整。
例如,如果父项的宽度为 1000 像素,有 2 个子项,每个子项的宽度为 300 像素,则剩余空间将为 1000px-300px-300px = 400px。
如果一个child的flex grow值为1,另一个child为10,则前者为300px+(1/11*400px),后者为300px+(10/11*400px)
在这里阅读更多关于 flex-grow
的信息
因此,在您的情况下,每个元素设置为 500px,每行 2 个,当 剩余空间 时,该空间将在除 box3
以外的所有行上平均共享。在该行上,空间将与 10/11 共享 box3
,1/11 共享另一行。
在每行 3 个元素的情况下,box3
的共享将为 10/12,另外两个各为 1/12。
Why is this not 10 times bigger?
在这种情况下,当在元素上设置宽度时,flex-grow
在元素之间分配剩余的可用空间。
如果您想使用 flex-grow
来调整元素的大小,请给它们一个 flex-basis
的 0
。这将使 flex-grow
的计算相信这些元素是空的,并且它会大 10 倍。
/* We start writing out flexbox here. The above is just page setup */
.container {
display:flex;
flex-wrap:wrap;
}
.box {
flex-basis:0;
flex-grow:1;
overflow: hidden; /* to allow items to be smaller
than its content */
}
.box3 {
flex-grow:10;
}
/* CSS Normalize */
article,aside,details,figcaption,figure,footer,header,hgroup,nav,section,summary{display:block;}audio,canvas,video{display:inline-block;}audio:not([controls]){display:none;height:0;}[hidden]{display:none;}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;}a:focus{outline:thin dotted;}a:active,a:hover{outline:0;}h1{font-size:2em;}abbr[title]{border-bottom:1px dotted;}b,strong{font-weight:700;}dfn{font-style:italic;}mark{background:#ff0;color:#000;}code,kbd,pre,samp{font-family:monospace, serif;font-size:1em;}pre{white-space:pre-wrap;word-wrap:break-word;}q{quotes:\201C \201D \2018 \2019;}small{font-size:80%;}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline;}sup{top:-.5em;}sub{bottom:-.25em;}img{border:0;}svg:not(:root){overflow:hidden;}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em;}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0;}button,input{line-height:normal;}button,html input[type=button],/* 1 */
input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;}button[disabled],input[disabled]{cursor:default;}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0;}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none;}textarea{overflow:auto;vertical-align:top;}table{border-collapse:collapse;border-spacing:0;}body,figure{margin:0;}legend,button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0;}
/* Box-sizing border-box */
* { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; }
/* Some default styles to make each box visible */
.box {
color:white;
font-size: 50px;
text-align: center;
text-shadow:4px 4px 0 rgba(0,0,0,0.1);
padding:10px;
}
/* Colours for each box */
.box1 { background:#1abc9c;}
.box2 { background:#3498db;}
.box3 { background:#9b59b6;}
.box4 { background:#34495e;}
.box5 { background:#f1c40f;}
.box6 { background:#e67e22;}
.box7 { background:#e74c3c;}
.box8 { background:#bdc3c7;}
.box9 { background:#2ecc71;}
.box10 { background:#16a085;}
<div class="container">
<div class="box box1">one 😎</div>
<div class="box box2">two 🍕</div>
<div class="box box3">three 🍟</div>
<div class="box box4">four 👍</div>
<div class="box box5">five 👀</div>
<div class="box box6">six 💩</div>
</div>
关于html - flexbox 的增长是否受 flexbox-basis 的影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48380575/