如何在弹性布局中混合宽度和百分比(左/右)?

Hao*_* Wu 3 html css flexbox responsive

我有 3 个块,我需要:

  • 第一个块需要 200 像素宽并接触左侧。
  • 第二个块位于第一个块之后,其右边缘恰好位于其容器宽度的 50% 处
  • 第三个块将接管剩余的空间。

我在一些游戏引擎中做了类似的东西: 在此输入图像描述

但是如何用css来实现呢?

我不想嵌套内部 div,因为它们扮演着相同的角色。


我尝试了这个但不起作用:(

* {
  box-sizing: border-box;
}

.wrapper {
  width: 100%;
  display: flex;
  position: relative;
}

.wrapper > * {
  height: 300px;
  display block;
}

.wrapper > *:nth-child(1) {
  background-color: salmon;
  width: 200px;
}

.wrapper > *:nth-child(2) {
  background-color: khaki;
  right: 50%;
}

.wrapper > *:nth-child(3) {
  background-color: violet;
  width: 50%;
}
Run Code Online (Sandbox Code Playgroud)
<div class="wrapper">
  <pre>
    left: 0;
    width: 200px;
  </pre>
  <pre>
    left: 200px;
    right: 50%;
  </pre>
  <pre>
    left: 50%;
    right: 0;
  </pre>
</div>
Run Code Online (Sandbox Code Playgroud)

kuk*_*kuz 5

您可以设置flex: 0 0 50%第三个子元素,这意味着该元素不会增长、收缩,并且始终占据 Flexbox 容器宽度的一半。

现在,为了允许第二个子元素占据其他两个元素留下的剩余空间,您可以设置flex-grow: 1和设置min-width: 0(允许它比其固有宽度进一步缩小 - 请注意,min-width对于弹性项目,默认值为 auto )。

请参阅下面的演示:

* {
  box-sizing: border-box;
}

.wrapper {
  width: 100%;
  display: flex;
  position: relative;
}

.wrapper > * {
  height: 300px;
  display: block;
}

.wrapper > *:nth-child(1) {
  background-color: salmon;
  width: 200px;
}

.wrapper > *:nth-child(2) {
  background-color: khaki;
  flex-grow: 1; /* grow width automatically if needed */
  min-width: 0; /* allow shrinking below default width */
}

.wrapper > *:nth-child(3) {
  background-color: violet;
  flex: 0 0 50%; /* added */
}
Run Code Online (Sandbox Code Playgroud)
<div class="wrapper">
  <pre>
    left: 0;
    width: 200px;
  </pre>
  <pre>
    left: 200px;
    right: 50%;
  </pre>
  <pre>
    left: 50%;
    right: 0;
  </pre>
</div>
Run Code Online (Sandbox Code Playgroud)