我有一個圖像繞行的彈性盒佈局,我想在單擊圖像時顯示一些資訊。此資訊應顯示在包含影像的行與其正下方的行之間,而不移動「列」。 這就是我想要的效果類型: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
的左側。這是一個工作範例的片段: