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

标签 html css flexbox responsive

我有 3 个 block ,我需要:

  • 第一个 block 需要 200 像素宽并触及左侧。
  • 第二个 block 紧跟在第一个 block 之后,它的右边缘刚好在其容器宽度的 50% 处
  • 第三 block 只是接管剩余的空间。

我在一些游戏引擎中做了类似的东西: enter image description here

但是我怎样才能用css实现呢?

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


我试过了,但是没用:(

* {
  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%;
}
<div class="wrapper">
  <pre>
    left: 0;
    width: 200px;
  </pre>
  <pre>
    left: 200px;
    right: 50%;
  </pre>
  <pre>
    left: 50%;
    right: 0;
  </pre>
</div>

最佳答案

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

现在要让第二个 child 占据其他两个元素留下的剩余空间,您可以设置flex-grow: 1 并设置min-width : 0(允许它比其固有宽度进一步缩小 - 请注意,对于 flex 元素,默认 min-width 是自动的)。

请看下面的演示:

* {
  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 */
}
<div class="wrapper">
  <pre>
    left: 0;
    width: 200px;
  </pre>
  <pre>
    left: 200px;
    right: 50%;
  </pre>
  <pre>
    left: 50%;
    right: 0;
  </pre>
</div>

关于html - 如何在 flex 布局中混合宽度和百分比(左/右)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56554367/

相关文章:

css - 更改 'ant design'中的箭头图标

html - Flexbox div 宽度在移动设备上溢出

html - 100% 高度,居中的人造列,右列有粘性页脚

html - 使用 CSS vh 单位和百分比时不显示内容

html - cakephp CSS问题

html - Chrome 正在垂直拉伸(stretch)我的图像,但是在 Firefox/Edge 中一切正常

html - flexbox,第一个元素 block 包装

java - 使用 iText 将 HTML 转换为 PDF

javascript - 加载 AngularJS 应用程序时避免显示 html Angular 标签

jquery - 悬停时逐行突出显示段落