【发布时间】:2016-09-29 22:42:46
【问题描述】:
我正在实现带有哈希标签链接的纯 CSS 选项卡。我非常接近,但不能完全让柔性包装正常工作。为了让所有东西都能按照我想要的方式工作,:target(我之前已经用单选按钮做到了这一点,这提供了更多的灵活性),我需要同一级别的所有选项卡和所有部分,所以我有:
body
section
anchor
section
anchor
...
然后我可以使用 flexbox ordering 使所有锚点首先出现并适当地设置样式,将所有部分设置为 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>
Slightly easier to play with jsbin
问题在于第一行中的选项卡拉伸到可见部分的高度,而不是折叠到其内容的高度。即使是特定的height 和max-height 似乎也被忽略了。
请注意,这个问题专门针对使用 flexbox 包装时的行高。我知道在 css 和 js 中构建选项卡的一百万种不同方法。我特意寻找对flex-wrap的更深入了解。
【问题讨论】:
-
那么,当标签换行时,您究竟希望发生什么?也许你可以说明你想要的结果。
-
@Michael_B 运行示例 - 您看到它们如何拉伸到与部分相同的高度,而不是折叠到其内容的大小?我希望它们看起来像标签,但它们都被拉长了。我希望两行都根据内容调整大小
-
弹性容器的两个初始设置是
align-items: stretch和align-content: stretch。您可以通过将值更改为flex-start来覆盖它。 -
@Michael_B
align-content似乎让我非常接近,但由于某种原因,这使得section不再垂直填充。 -
所以您希望
stretch用于宽屏,flex-start用于窄屏?