我正在实现带有哈希标签链接的纯 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(使用前将#替换为@)