J'ai une mise en page flexbox avec une image enroulée autour et je souhaite afficher des informations lorsque l'on clique sur l'image. Les informations doivent apparaître entre la ligne contenant l'image et la ligne directement en dessous, sans déplacer la « colonne ». C'est le type d'effet que je souhaite : http://olmenta.altervista.org (quand vous cliquez sur un livre).
C'est ce que j'ai fait : 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>
La "colonne" bouge en raison du changement de taille des éléments flexibles. Je peux résoudre ce problème en ajoutant « position:absolute » au texte, mais le texte entre alors en conflit avec la ligne suivante. Savez-vous comment faire pour que les colonnes ne bougent pas et que le texte n'entre pas en conflit avec la ligne suivante ?
L'élément de divulgation
Détails dispose déjà d'un mécanisme d'activation/désactivation intégré au navigateur. Alors pourquoi ne pas l'utiliser et modifier son comportement en fonction de nos besoins.
Le principe de base est, nous avons besoin de Javascript pour
detail/summary
fermer automatiquement le contenu actuellement "public".Clip
Si nous passons à laisser de l'espace dans
.flex-item
上切换active
类,我们可以为活动.flex-item
添加高度,以便为.text
.Remarque : Pour positionner correctement le côté gauche de
.text
元素,重要的是不要定位.flex-item
s(或position: static
)。否则.text
的left: 0
将位于父级.flex-item
.Voici un extrait d'un exemple fonctionnel :