html - 如何在具有嵌套 flex 盒的 flex 盒子级之间均匀分配宽度?

标签 html css flexbox

我正在为我正在构建的网站开发一些 css3。我正在尝试创建一个“容器”类,它使用 Flexbox 使其所有子级具有相同的宽度。这工作正常,但是当我将一个“容器”和一个普通元素放入另一个“容器”中时,两个子元素的宽度不相等。

我不确定为什么这不起作用,因为它适用于任何非容器的元素。

HTML:

<div class="container">
  <div class="container">
    <div class="content-box">
      One Sixth
    </div>
    <div class="content-box">
      One Sixth
    </div>
    <div class="content-box">
      One Sixth
    </div>
  </div>
  <div class="content-box">
    One half
  </div>
</div>

CSS:

.container {
    display: flex;
    align-items: flex-start;
}

.container > * {
    flex-basis: 100%;
    min-width: 0;
}

.container > :not(:first-child) {
    margin-left: 2%;
}

Codepen 示例:https://codepen.io/NetworkOverflow/pen/XLbdqa

最佳答案

问题是,当您将一个容器放入另一个容器时,它会添加边距,因此您会看到右侧的空间加倍。

我会将您的容器设置为 justify-content: space- Between; ,它将内容元素推送到外部边缘。我使用 flex:1 而不是 flex-basis 来告诉浏览器每个元素应该占用相同的空间量。

你的 CSS 变成:

.container {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
}

.container > * {
    flex: 1;
    margin-left: 2%;
    min-width: 0;
}

.container > *:first-child {
    margin-left:0;
}

/* not needed
.container > :not(:first-child) {
    margin-left: 2%;
}
*/

更新:

根据使用情况,添加“调整大小”类有时会很有帮助,这些类会根据元素的数量强制使用flex-basis。这是 codepen示例。

.third {
  flex-basis: calc(33.3333% - 2%);
}
.half {
  flex-basis: calc(33.3333% - 2%);
}

关于html - 如何在具有嵌套 flex 盒的 flex 盒子级之间均匀分配宽度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56568628/

相关文章:

html - CSS 列表问题

html - 继承多行内联子项的宽度

html - Display flex 在 Chrome 和 Safari 中表现不同

css - 有人可以解释一下绝对定位的 Flex 子代吗

javascript - 如何使用 flexbox 对齐元素?

javascript - 悬停时更改直接 sibling

html - IE9 条件语句不起作用?

css - CSS 网格中相同宽度的列 - IE11

javascript - IE 不将基础应用于 css 中的背景图像定义

html - 形成双重邮寄问题