html - flexbox 的增长是否受 flexbox-basis 的影响?

标签 html css flexbox

我有以下 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 出现在我的屏幕上,但我看到了这个:

enter image description here

为什么这不是大 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-basis0 。这将使 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/

相关文章:

html - 如何确保代码跨多个浏览器工作?

html - 如何获取 div 动画的当前状态?

html - CSS 工具提示被截断

css - 如何在标签上应用 css 边距

html - 如何使用 CSS 使整个方形 div 可点击?

css - Chrome 和 Firefox 中 Bootstrap 菜单宽度问题中的 Flexbox 布局

html - 在高度为 100% 的 Bootstrap 4 flex 容器上填充

html - Flex box 没有相互对齐

javascript - 我如何淡入和淡出并改进我当前的 JavaScript

css - 为什么 CSS spinning 在移动设备上不起作用?