Ich habe ein Flexbox-Layout mit einem umschlossenen Bild und möchte einige Informationen anzeigen, wenn auf das Bild geklickt wird. Die Informationen sollten zwischen der Zeile, die das Bild enthält, und der Zeile direkt darunter erscheinen, ohne dass die „Spalte“ verschoben wird. Dies ist die Art von Effekt, die ich möchte: http://olmenta.altervista.org (wenn Sie auf ein Buch klicken).
Das habe ich gemacht: https://jsfiddle.net/fabhpnw9/3/
var coll = document.getElementsByClassName("rectangle"); 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"; } }); }
.flex-container { display: flex; gap: 10px; flex-wrap: wrap; justify-content: center; } .rectangle { width: 200px; height: 50px; background-color: red; cursor: pointer; } .text { display: none; position: absolute; }
<div class="flex-container"> <div class="flex-item"> <div class="rectangle"></div> <div class="text">Lorem ipsum dolor sit amet, consectetur adipiscing elit</div> </div> <div class="flex-item"> <div class="rectangle"></div> <div class="text">Lorem ipsum dolor sit amet, consectetur adipiscing elit</div> </div> <div class="flex-item"> <div class="rectangle"></div> <div class="text">Lorem ipsum dolor sit amet, consectetur adipiscing elit</div> </div> <div class="flex-item"> <div class="rectangle"></div> <div class="text">Lorem ipsum dolor sit amet, consectetur adipiscing elit</div> </div> <div class="flex-item"> <div class="rectangle"></div> <div class="text">Lorem ipsum dolor sit amet, consectetur adipiscing elit</div> </div> <div class="flex-item"> <div class="rectangle"></div> <div class="text">Lorem ipsum dolor sit amet, consectetur adipiscing elit</div> </div> <div class="flex-item"> <div class="rectangle"></div> <div class="text">Lorem ipsum dolor sit amet, consectetur adipiscing elit</div> </div> <div class="flex-item"> <div class="rectangle"></div> <div class="text">Lorem ipsum dolor sit amet, consectetur adipiscing elit</div> </div> </div>
Die „Spalte“ verschiebt sich aufgrund der Größenänderung der Flex-Artikel. Ich kann dieses Problem lösen, indem ich „position:absolute“ zum Text hinzufüge, aber dann steht der Text in Konflikt mit der nächsten Zeile. Wissen Sie, wie ich dafür sorgen kann, dass sich die Spalten nicht verschieben und der Text nicht mit der nächsten Zeile in Konflikt gerät?
详细信息披露元素已经有一个浏览器内置的打开/关闭机制。那么为什么不使用它并修改其行为来满足我们的要求。
基本原则是
通过 CSS,我们可以控制内容的显示方式和位置。无论我们使用默认的块样式还是 Flexbox/Grid 布局,都将内容放置在常规文档流之外。它们是常规元素,所以基本上任何事情都会发生。
默认情况下,当用户点击其他地方时
detail/summary
保持打开状态,我们需要一些 Javascript 来自动关闭当前“公开”的内容。当用户没有看到“关闭按钮”时,他们往往会感到困惑,所以我在那里放了一个。但是,单击信息框中的任意位置将其关闭。
我对此有点过分了,创建了一个响应式演示,完全忽略了您的代码(抱歉!),同时尝试尽可能接近示例站点。我评论了所有适用的地方。如果不清楚,请在评论中告诉我。
片段
如果我们切换到在
.flex-item
上切换active
类,我们可以为活动.flex-item
添加高度,以便为.text
留出空间。注意:为了正确定位
.text
元素,重要的是不要定位.flex-item
s(或position: static
)。否则.text
的left: 0
将位于父级.flex-item
的左侧。这是一个工作示例的片段: