【发布时间】:2021-03-02 05:54:28
【问题描述】:
我有一个响应式列数网格(台式机上 3 个,平板电脑上 2 个,移动设备上 1 个),当您展开/折叠子项时,所有内容都会在列之间移动。我也想保持秩序:
如何防止这种情况发生?也许有flexbox 解决方案?
例子:
var coll = document.getElementsByClassName("collapsible");
var i;
for (i = 0; i < coll.length; i++) {
coll[i].addEventListener("click", function() {
this.classList.toggle("active");
var content = this.nextElementSibling;
if (content.style.display === "block") {
content.style.display = "none";
} else {
content.style.display = "block";
}
});
}
@media only screen and (max-width: 360px) {
ul {
-moz-column-count: 1;
-moz-column-gap: 20px;
-webkit-column-count: 1;
-webkit-column-gap: 20px;
column-count: 1;
column-gap: 20px;
}
}
@media only screen and (min-width: 360px) {
ul {
-moz-column-count: 3;
-moz-column-gap: 20px;
-webkit-column-count: 2;
-webkit-column-gap: 20px;
column-count: 2;
column-gap: 20px;
}
}
ul li {
-webkit-column-break-inside: avoid;
page-break-inside: avoid;
break-inside: avoid;
}
.content {
padding: 0 18px;
display: none;
overflow: hidden;
background-color: #f1f1f1;
}
<ul>
<li><span class="collapsible">Item 1 (click to unfold)</span>
<div class="content">
<p>Lorem ipsum...</p>
</div>
</li>
<li><span class="collapsible">Item 2 (click to unfold)</span>
<div class="content">
<p>Lorem ipsum...</p>
</div>
</li>
<li><span class="collapsible">Item 3 (click to unfold)</span>
<div class="content">
<p>Lorem ipsum...</p>
</div>
</li>
<li><span class="collapsible">Item 4 (click to unfold)</span>
<div class="content">
<p>Lorem ipsum...</p>
</div>
</li>
<li><span class="collapsible">Item 5 (click to unfold)</span>
<div class="content">
<p>Lorem ipsum...</p>
</div>
</li>
<li><span class="collapsible">Item 6 (click to unfold)</span>
<div class="content">
<p>Lorem ipsum...</p>
</div>
</li>
<li><span class="collapsible">Item 7 (click to unfold)</span>
<div class="content">
<p>Lorem ipsum...</p>
</div>
</li>
<li><span class="collapsible">Item 8 (click to unfold)</span>
<div class="content">
<p>Lorem ipsum...</p>
</div>
</li>
<li><span class="collapsible">Item 9 (click to unfold)</span>
<div class="content">
<p>Lorem ipsum...</p>
</div>
</li>
<li><span class="collapsible">Item 10 (click to unfold)</span>
<div class="content">
<p>Lorem ipsum...</p>
</div>
</li>
<li><span class="collapsible">Item 11 (click to unfold)</span>
<div class="content">
<p>Lorem ipsum...</p>
</div>
</li>
</ul>
我玩过flexbox 和grid,但我无法解决。
【问题讨论】:
-
如果你想更改单个元素的高度,你不能依赖任何根据高度自动将元素分成列的机制,但期望分布跨列保持不变。所以你需要从将项目分成两个不同的容器元素的东西开始,或者类似的东西。
-
@CBroe 谢谢,我认为可能存在一个我不知道的 CSS 解决方案。
-
看来你使用了imgur链接。而是使用stackoverflow的图片上传,否则imgur会清除未使用的图片。
-
@nurgasemetey 谢谢我改了。
标签: html css flexbox css-grid column-count