Flex-wrap 具有不同高度的行

2024-01-16

我正在实现带有哈希标签链接的纯 CSS 选项卡。我非常非常接近,但无法完全让柔性包装正常工作。为了让一切按照我想要的方式工作:target(我之前已经使用单选按钮完成了此操作,这提供了更多的灵活性),我需要所有选项卡和所有部分都处于同一级别,因此我有:

body
  section
  anchor
  section
  anchor
  ...

然后我可以使用 Flexbox 排序使所有锚点首先出现并适当设置样式,将所有部分设置为宽度 100% 并使用flex-wrap允许它们换行到下一行。问题是我似乎无法控制第一行的高度。这里发生了什么?

body {
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
  margin: 0;
  padding: 0;
  height: 100vh;
  outline: 1px solid green;
}
body > a {
  padding: 10px;
  margin: 0 5px;
  order: -1;
  flex-grow: 0;
  border: solid gray;
  border-width: 1px 1px 0 1px;
}
body > a:last-of-type {
  order: -2;
}
section {
  flex-grow: 1;
  width: 100%;
  background-color: cornsilk;
  display: none;
  border-top: 1px solid grey;
}
section:last-of-type {
  display: flex;
}
a {
  font-weight: normal;
}
a:last-of-type {
  font-weight: bold;
}
:target {
  display: flex;
}
:target ~ section {
  display: none;
}
:target ~ a {
  font-weight: normal;
}
:target + a {
  font-weight: bold;
}
<section id="advanced">
	Advanced Stuff
</section>
<a href="#advanced">Advanced</a>

<section id="home">
	Home Things
</section>
<a href="#home">Home</a>

使用 jsbin 玩起来稍微容易一些 http://jsbin.com/kufele/edit?html,css,output

问题是第一行中的选项卡拉伸到可见部分的高度,而不是折叠到其内容的高度。即使是特定的height and max-height似乎被忽略了。

请注意,这个问题具体是关于使用弹性盒包装时的行高。我知道用 css 和 js 构建选项卡的一百万种不同方法。我专门寻求更深入的了解flex-wrap.


Flex 容器的两个初始设置是align-items: stretch and align-content: stretch。您可以通过将值更改为来覆盖它flex-start.

但这似乎只解决了部分问题。您还希望选定的包装物品能够拉伸容器的整个高度。

这没有发生,因为当弹性项目换行时,它们只需要包含其内容所需的最小尺寸。

来自 Flexbox 规范:

6. 柔性线 https://www.w3.org/TR/css3-flexbox/#flex-lines

在多行柔性容器中(即使只有一行), 每条线的交叉尺寸是包含该线所需的最小尺寸 线上的弹性项目(由于对齐后align-self),以及 线条在 Flex 容器内与align-content财产。

换句话说,当基于行的弹性容器中有多行时,每行的垂直高度(“十字尺寸”) 是个“包含线路上的弹性项目所需的最小尺寸”.

为了使您的布局正常工作,您需要行方向和列方向的 Flex 容器的组合,以及对 HTML 的调整。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flex-wrap 具有不同高度的行 的相关文章