Flexbox不是全宽

fig*_*r20 2 html css css3 flexbox

我有一个像这样的基本弹性盒..

.masonry_container {
  display: flex;
}

.masonry_left_col {
  border: 1px solid grey;
}

.masonry_right_col {
  border: 1px solid grey;
}
Run Code Online (Sandbox Code Playgroud)
<div class="masonry_container">

  <div class="masonry_left_col">
    Content
  </div>

  <div class="masonry_right_col">
    Content
  </div>

</div>
Run Code Online (Sandbox Code Playgroud)

为什么不延伸到全宽?

我知道这可能很简单,但我无法解决,我哪里出错了?

Joh*_*nes 10

容器实际上 100%宽,即跨越窗口的整个宽度.但是使用默认的弹性设置,其子级将简单地左对齐,并且仅与其内容一样宽.

但是,如果您应用flex-grow: 1;子元素以允许它们变宽,它们将拉伸并填充容器的整个宽度.

.masonry_container {
  display: flex;
}

.masonry_left_col {
  border: 1px solid grey;
  flex-grow: 1;
}

.masonry_right_col {
  border: 1px solid grey;
  flex-grow: 1;
}
Run Code Online (Sandbox Code Playgroud)
<div class="masonry_container">

  <div class="masonry_left_col">
    Content
  </div>

  <div class="masonry_right_col">
    Content
  </div>

</div>
Run Code Online (Sandbox Code Playgroud)

或者,如果您只是希望弹性项目在容器内左右移动而不拉伸,则添加justify-items: space-between到容器中

.masonry_container {
  display: flex;
  justify-content: space-between;
}

.masonry_left_col {
  border: 1px solid grey;
}

.masonry_right_col {
  border: 1px solid grey;
}
Run Code Online (Sandbox Code Playgroud)
<div class="masonry_container">

  <div class="masonry_left_col">
    Content
  </div>

  <div class="masonry_right_col">
    Content
  </div>

</div>
Run Code Online (Sandbox Code Playgroud)


Mic*_*l_B 7

Flex 容器确实扩展了整个宽度——它是一个块级元素。

.masonry_container {
  display: flex;
  border: 1px solid red;
}

.masonry_container > div {
  border: 1px solid grey;
  background-color: lightgreen;
}
Run Code Online (Sandbox Code Playgroud)
<div class="masonry_container">
  <div class="masonry_left_col">Content</div>
  <div class="masonry_right_col">Content</div>
</div>
Run Code Online (Sandbox Code Playgroud)

但弹性项目有两个默认设置会阻止自动扩展:

这意味着项目占用其内容的长度并且不占用可用空间。

对于要展开的项目,您需要覆盖flex-grow默认值。

.masonry_container {
  display: flex;
  border: 1px solid red;
}

.masonry_container > div {
  flex-grow: 1;
  border: 1px solid grey;
  background-color: lightgreen;
}
Run Code Online (Sandbox Code Playgroud)
<div class="masonry_container">
  <div class="masonry_left_col">Content</div>
  <div class="masonry_right_col">Content</div>
</div>
Run Code Online (Sandbox Code Playgroud)