Saya mempunyai susun atur kotak flex dengan imej dibalut di sekelilingnya dan saya ingin memaparkan beberapa maklumat apabila imej itu diklik. Maklumat harus muncul di antara baris yang mengandungi imej dan baris betul-betul di bawahnya, tanpa mengalihkan "lajur". Ini ialah jenis kesan yang saya inginkan: http://olmenta.altervista.org (apabila anda mengklik pada buku).
Ini yang saya lakukan: 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>
"Lajur" bergerak kerana perubahan saiz item flex. Saya boleh menyelesaikan masalah ini dengan menambah "kedudukan:mutlak" pada teks, tetapi kemudian teks bercanggah dengan baris seterusnya. Adakah anda tahu bagaimana saya boleh membuat lajur tidak bergerak dan teks tidak bercanggah dengan baris seterusnya?
Elemen pendedahan perincian sudah mempunyai mekanisme hidup/mati terbina dalam penyemak imbas. Jadi mengapa tidak menggunakannya dan mengubah suai tingkah lakunya untuk memenuhi keperluan kami.
Prinsip asasnya ialah
Dengan CSS, kami boleh mengawal cara dan tempat kandungan dipaparkan. Sama ada kami menggunakan gaya blok lalai atau susun atur Flexbox/Grid, kandungan diletakkan di luar aliran dokumen biasa. Mereka adalah elemen biasa, jadi pada asasnya apa-apa boleh berlaku.
Secara lalai ia kekal terbuka apabila pengguna mengklik di tempat lain
detail/summary
, kami memerlukan beberapa Javascript untuk menutup secara automatik kandungan "awam" pada masa ini.Pengguna cenderung keliru apabila mereka tidak melihat "Butang Tutup", jadi saya meletakkannya di sana. Walau bagaimanapun, klik di mana-mana dalam kotak maklumat untuk menutupnya.
Saya melampaui batas dengan perkara ini dan mencipta demo responsif yang mengabaikan kod anda sepenuhnya (maaf!) sambil cuba mendekati tapak contoh yang mungkin. Saya mengulas di mana-mana yang berkenaan. Jika kurang jelas, sila beritahu saya dalam komen.
Klip
Jika kita beralih kepada meninggalkan ruang di
.flex-item
上切换active
类,我们可以为活动.flex-item
添加高度,以便为.text
.Nota: Untuk meletakkan bahagian kiri
.text
元素,重要的是不要定位.flex-item
s(或position: static
)。否则.text
的left: 0
将位于父级.flex-item
dengan betul.Berikut ialah coretan contoh yang berfungsi: