画像がラップされたフレックスボックス レイアウトがあり、画像がクリックされたときに情報を表示したいと考えています。情報は、「列」を移動せずに、画像を含む行とそのすぐ下の行の間に表示される必要があります。 これは私が望むタイプの効果です: http://olmenta.altervista.org (本をクリックしたとき)。
私がやったことは次のとおりです: https://jsfiddle.net/fabhpnw9/3/
var coll = document.getElementsByClassName("rectangle"); 変数 i; for (i = 0; i < coll.length; i ) { coll[i].addEventListener("クリック", function() { this.classList.toggle("アクティブ"); var content = this.nextElementSibling; if (content.style.display === "ブロック") { content.style.display = "なし"; } それ以外 { content.style.display = "ブロック"; } }); }
.flex-container { ディスプレイ: フレックス; ギャップ: 10px; フレックスラップ: ラップ; コンテンツの位置揃え: 中央; } .rectangle { 幅: 200ピクセル; 高さ: 50ピクセル; 背景色: 赤; カーソル: ポインタ; } 。文章 { 表示: なし。 位置: 絶対; }
<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 を通じて、コンテンツをどこにどのように表示するかを制御できます。デフォルトのブロック スタイルを使用するか、フレックスボックス/グリッド レイアウトを使用するかに関係なく、コンテンツは通常のドキュメント フローの外側に配置されます。これらは通常の要素なので、基本的には何でも起こります。
デフォルトでは、ユーザーが他の場所をクリックしても、
detail/summary
は開いたままになります。 現在「公開」されているコンテンツを 自動的に閉じるには、JavaScript が必要です。ユーザーは「閉じるボタン」が表示されないと混乱する傾向があるため、そこに「閉じるボタン」を追加しました。ただし、情報ボックスを閉じるには、情報ボックス内の任意の場所をクリックします。
私はこれを少しやりすぎて、サンプル サイトにできるだけ近づけようとしながら、コードを完全に無視するレスポンシブ デモを作成しました (申し訳ありません!)。該当するところにはコメントしました。不明な場合は、コメントで教えてください。
######断片######
注:.flex-item
のactive
クラスの切り替えに切り替えると、アクティブな.flex-item
に高さを追加できます。 # #.textスペースを空けてください。
.text
これは実際の例のスニペットです:要素を正しく配置するには、
.flex-item(または
position: static) を配置しないことが重要です。それ以外の場合、
.textの
left: 0は親の
.flex-itemの左側になります。