【发布时间】:2019-12-28 12:48:43
【问题描述】:
我在 CSS flex 容器中有一组可扩展的 div。
Codepen - https://codepen.io/vijayvmenon/pen/bGNRwvd
CSS:
.collapsible {
background-color: #777;
color: white;
cursor: pointer;
padding: 18px;
width: 100%;
border: none;
text-align: left;
outline: none;
font-size: 15px;
}
.content {
padding: 0 18px;
max-height: 0;
overflow: hidden;
transition: max-height 0.2s ease-out;
background-color: #f1f1f1;
}
当我单击任何 div 时,该行中的其他 div 也会展开。如何通过仅扩展我单击的 div 而不扩展行中的其他 div 来解决此问题?
我正在使用 flex 容器,因为我正在构建一个响应式页面并且有更多组件,这里不包括。是否可以使用 flex/grid 容器?请告诉我。 我可以包装 div 并使其响应的任何其他解决方案都应该没问题。
我在使用聚合物框架时创建了一个类似的问题 - Collapsible div inside a CSS grid container expands full width
因为我在这里没有得到任何帮助,所以想用 Vanilla Javascript 创建一个。请帮忙。
注意:我事先不知道项目的实际数量,它是使用聚合物库中的“dom-repeat”呈现的。所以我只能有一个包含完整项目集的容器 div。我不能为每一列项目设置封闭的 div(除非有办法做到这一点)
【问题讨论】:
-
其他 div 实际上并没有展开,因为您看不到隐藏的文本。
-
这和布局有关吧?当一个 div 展开时,您可以检查元素并查看其他具有“内容”类的 div 的最大高度仍为 0。此外,如果您减小屏幕宽度并且 div 垂直堆叠,则问题不存在。我觉得它与 flex 容器有关。但不确定如何解决。
-
这是因为当拥有
flex-direction: row;和flex-wrap: wrap;时,您将创建包含每个项目的行。因此,如果它强制它,这些行会扩展为内部的项目。您需要一个列结构,其中项目可以垂直移动。但仅使用 CSS 更难解决。 -
列数总是3吗?
-
它是响应式的。列数取决于列表中的项目数。如果屏幕很大,例如在 Mac 中,由于 flex 容器和更多空间的可用性,它将显示三列。在较小的屏幕中,它将显示 2 列,而在移动设备中,它将垂直堆叠。
标签: javascript html css