我有一个图像绕行的弹性盒布局,我想在单击图像时显示一些信息。该信息应显示在包含图像的行与其正下方的行之间,而不移动“列”。 这就是我想要的效果类型:http://olmenta.altervista.org(当您单击一本书时)。
这是我所做的: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>
由于弹性项目的大小发生变化,“列”正在移动。 我可以通过在文本中添加“position:absolute”来解决此问题,但随后文本与下一行发生冲突。 你知道我如何才能让列不移动并且文本不与下一行冲突吗?
详细信息披露元素已经有一个浏览器内置的打开/关闭机制。那么为什么不使用它并修改其行为来满足我们的要求。
基本原则是
通过 CSS,我们可以控制内容的显示方式和位置。无论我们使用默认的块样式还是 Flexbox/Grid 布局,都将内容放置在常规文档流之外。它们是常规元素,所以基本上任何事情都会发生。
默认情况下,当用户点击其他地方时
detail/summary
保持打开状态,我们需要一些 Javascript 来自动关闭当前“公开”的内容。当用户没有看到“关闭按钮”时,他们往往会感到困惑,所以我在那里放了一个。但是,单击信息框中的任意位置将其关闭。
我对此有点过分了,创建了一个响应式演示,完全忽略了您的代码(抱歉!),同时尝试尽可能接近示例站点。我评论了所有适用的地方。如果不清楚,请在评论中告诉我。
片段
如果我们切换到在
.flex-item
上切换active
类,我们可以为活动.flex-item
添加高度,以便为.text
留出空间。注意:为了正确定位
.text
元素,重要的是不要定位.flex-item
s(或position: static
)。否则.text
的left: 0
将位于父级.flex-item
的左侧。这是一个工作示例的片段: