Bootstrap 侧边栏中有 4 个手风琴,带有拉伸的主动折叠

Bootstrap 4 accordion in sidebar with stretched active collapse

我正在尝试构建一个包含 Bootstrap 4 手风琴的边栏。我希望折叠窗格在激活时伸展,以便它们填充侧边栏中所有可用的 space(如果内容太大无法容纳,折叠窗格将必须获得滚动条)。

我试着把包装 #accordion 变成 d-flex flex-column 但这似乎还不够。 #accordion(边栏)周围的 div#accordionh-100 class,所以它们一直向下延伸。

我认为卡片、包装 headers 和折叠窗格是问题所在。但不确定。

手风琴标记的开头如下:

<div id="accordion" class="d-flex flex-column align-items-stretch h-100">

这个 jsFiddle 是我所拥有的一个简短示例。

没有办法做到这一点 w/o JavaScript 或一些额外的 CSS。问题是主动折叠 div 在 card 内部,但主动折叠 div 的父级 card 也需要增长以填充高度。

解决方法是折叠父卡和卡内的 div。这可以通过对每张卡片使用相同的 class 及其可折叠 div 来完成。例如,将 "collapseOne" class 添加到卡片和内部 div。然后切换折叠目标的按钮 (data-target=".collapseOne")。

https://www.codeply.com/go/ye633Zj3Yy

<div class="card collapse show collapseOne border-bottom-0" data-parent="#accordion">
        <div class="card-header" id="headingOne">
            <h5 class="mb-0">
                <button class="btn btn-link" data-toggle="collapse" data-target=".collapseOne" aria-expanded="true" aria-controls="collapseOne">
                  Collapsible Group Item #1
                </button>
              </h5>
        </div>
        <div id="collapseOne" class="collapse show fade collapseOne" aria-labelledby="headingOne" data-parent="#accordion">
            <div class="card-body">
                Content...
            </div>
        </div>
</div>

然后一些额外的 flexbox CSS 使 "active" 卡片填充高度,但在不活动时收缩...

.card {
    flex: 1 1 100%;
}

.collapse {
    flex: 0 0 auto;
}

.collapse.show {
    flex: 1 0 auto;
}

Demo