html - 等宽 Flexbox 行,无论列数或列内容如何

标签 html css flexbox

我正在尝试通过 Flexbox 创建三行,其中包含可变数量的列(顶部和底部的行将在数量上匹配)和一个中间列,该列只是一列。

由于列数是可变的,因此父级上没有设置宽度。

我正在努力让中间列的宽度与顶部和底部行的宽度相匹配。

section {
  margin: 0 auto;
  display: flex;
}

.col {
  width: 100px;
  height: 100px;
  border-color: #000;
  border-style: solid;
  border-width: 1px 0px 1px 1px;
}

.col:last-child {
  border-right: 1px solid #000;
}

.middle {
  height: 100px;
  width: inherit;
  border-color: #000;
  border-style: solid;
  border-width: 0px 1px 0px 1px;
}
<section>
  <div class="col">1</div>
  <div class="col">2</div>
  <div class="col">3</div>
  <div class="col">4</div>
  <div class="col">5</div>
</section>
<section>
  <div class="middle">Middle</div>
</section>
<section>
  <div class="col">1</div>
  <div class="col">2</div>
  <div class="col">3</div>
  <div class="col">4</div>
  <div class="col">5</div>
</section>

https://jsfiddle.net/o5xLuq51/

最佳答案

使这些元素的整体容器(在本例中恰好是 body 元素)成为具有列方向的内联级 Flex 容器。

这将创建一个列,其宽度由最长的行设置。

由于 Flex 元素的初始设置为 align-self:stretch,因此所有未定义宽度的行都将扩展容器的整个宽度 ( more details )。

然后要让 .middle 扩展其父级的整个宽度,请使用 flex-grow: 1

/* NEW */
body {
  display: inline-flex;
  flex-direction: column;
  /* border: 1px dashed red; */ /* uncomment to see container borders */
}

section {
  /* margin: 0 auto; */
  display: flex;
}
.col {
  width: 100px;
  height:100px;
  border-color: #000;
  border-style: solid;
  border-width: 1px 0px 1px 1px;
}
.col:last-child {
  border-right: 1px solid #000;
}
.middle {
  flex-grow: 1; /* NEW */
  height: 100px;
  /* width: inherit; */
  border-color: #000;
  border-style: solid;
  border-width: 0px 1px 0px 1px;
}
<section>
  <div class="col">1</div>
  <div class="col">2</div>
  <div class="col">3</div>
  <div class="col">4</div>
  <div class="col">5</div>
</section>
<section>
  <div class="middle">Middle</div>
</section>
<section>
  <div class="col">1</div>
  <div class="col">2</div>
  <div class="col">3</div>
  <div class="col">4</div>
  <div class="col">5</div>
</section>

关于html - 等宽 Flexbox 行,无论列数或列内容如何,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46895237/

相关文章:

html - Firefox 加载条件注释中引用的所有 css 文件

html - flex 容器内的 block 元素未按预期运行

html - 在不增加导航栏大小的情况下打开菜单

javascript - 在我的网页中调整对象网页的大小

html - Bootstrap 中的中心文本

jquery - 为什么 div 在部分 View 中回发后重复使用相同的 id 和类,MVC

html - 为什么溢出-y : hidden creating a horizontal scroll bar in my flex layout?

html - 如何使选择的输入在所有平台的所有浏览器中看起来都一样?

HTML 下拉菜单不覆盖在其他网页元素之上

asp.net - 为什么按钮的文本不受包含按钮的容器上的 css 样式规则的约束?