我有一个将图像 Package 在行上的弹性框布局,我想在单击图像时显示一些信息。这些信息将显示在包含图像的行和它下面的行之间,而不移动"列"。这是我想要的效果类型: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>
由于弹性项目的大小发生了变化,"列"发生了移动。我可以通过添加"位置:绝对"到文本,但随后文本与下一行冲突。你看到我如何既能使列不移动,又能使文本不与下一行冲突了吗?
2条答案
按热度按时间xzlaal3s1#
如果我们切换到在
.flex-item
上切换active
类,我们可以向活动的.flex-item
添加一个高度,以便为.text
留出空间。注意:为了正确定位
.text
元素,一定不要定位.flex-item
(或position: static
)。否则.text
的left: 0
将位于父.flex-item
的左侧。下面是一个工作示例的片段:
希望这能帮上忙。
ibps3vxo2#
The Details disclosure element已经在浏览器中内置了一个 * open/close * 机制,所以为什么不使用它并修改它的行为来满足我们的需求呢?
基本原则是
detail/summary
保持打开状态,我们需要一些Javascript来 * 自动关闭 * 当前"披露"的内容。我做得有点过火,创建了一个响应式演示,完全忽略了你的代码(对不起!),同时尽可能地接近示例站点。我在适用的地方注解了所有内容。如果有不清楚的地方,请在注解中告诉我。
x一个一个一个一个x一个一个二个一个x一个一个三个一个