为什么子div不会超出flex行容器

时间:2019-09-03 19:59:37

标签: html css

  

查看codepen中的问题:https://codepen.io/pencillrpal/pen/QWLOLGv

我有一个flex容器,其中将有一个水平滑块,其元素的长度与整个页面的宽度一样长。

但是我意识到我无法控制子元素的宽度,因为它们将始终具有使它们适合容器的宽度,并且不会延伸到容器之外。

我发现了一个窍门。如果我将我的孩子的div一张一张地包裹起来,它将按我的意愿工作。

为什么这种方式起作用?

.container {
  display: flex;
  flex-direction: row;
  justify-content: center;
  height: 40vh;
  max-width: 100%;
  overflow-x: hidden;
  border: 5px solid black;
  margin: 0 auto;
}

.box {
  position: relative;
  width: 90vw;
  margin: 10px;
  line-height: 10vh;
  text-align: center;
  background: black;
  color: white;
  border: 5px solid red;
}
<h1>Box should have 100vw width</h1>
<div class="container">
  <div class="box">
    <h3>Box</h3>
  </div>
  <div class="box">
    <h3>Box</h3>
  </div>
  <div class="box">
    <h3>Box</h3>
  </div>
</div>

<h1>This one has though</h1>
<div class="container">
  <div>
    <div class="box">
      <h3>Box</h3>
    </div>
  </div>
  <div>
    <div class="box">
      <h3>Box</h3>
    </div>
  </div>
  <div>
    <div class="box">
      <h3>Box</h3>
    </div>
  </div>
</div>

1 个答案:

答案 0 :(得分:2)

可以控制flex子级的宽度。所有flex子代都有默认的flex值来控制flex-growflex-shrink属性。禁用这些属性,即可控制宽度。

将这些行添加到CSS。

/**
 * Disable flex grow and shrink so that it no longer tries to divide the
 * space between the .box elements.
 *
 * Use flex-basis or width to control the width of the element.
 */
.box {
    flex-grow: 0;
    flex-shrink: 0;
    flex-basis: 90vw;
    width: 90vw;
}