質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

1回答

301閲覧

grid(或いはflex)レイアウト+横アコーディオンの合わせ技について

astaraea_lagoon

総合スコア5

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2022/08/18 10:15

前提

下記イメージ図のように2カラム目のB-1をクリックするとC1〜C3が3カラム目として出現するコンテンツの実装を考えております。

イメージ説明

実現したいこと

  • B-1を再度クリックすると3カラム目が非表示になり元に戻る
  • B-2をクリックするとC1〜C3ではなく新たにC4〜C6が表示される
  • 3カラム目出現時は1,2カラム目のwidthはその分縮小される(全体の幅は同じ)

の挙動も取り入れたく、当初はgrid(或いはflex)+アコーディオンの合わせ技でいけるかと実装を進めておりましたが、なかなかうまい組み合わせが思いつかず今に至る状態です。

疎い質問で恐れ入りますが何卒よろしくお願い申し上げます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

flex で実装してしみました。

html

1<div class="container"> 2 <div class="main box">A</div> 3 <div class="main"> 4 <div class="box b1">B-1</div> 5 <div class="box b2">B-2</div> 6 </div> 7 <div class="side1"> 8 <div class="box">C-1</div> 9 <div class="box">C-2</div> 10 <div class="box">C-3</div> 11 </div> 12 <div class="side2"> 13 <div class="box">C-4</div> 14 <div class="box">C-5</div> 15 <div class="box">C-6</div> 16 </div> 17</div>

css

1.container { 2 display: flex; 3 height: 200px; 4 gap: 5px; 5} 6.main { 7 width: 50%; 8 display: flex; 9 flex-direction: column; 10 gap: 5px; 11} 12.box { 13 border: solid 1px; 14} 15.b1, .b2 { 16 height: 50%; 17} 18.side1, .side2 { 19 width: 0px; 20 overflow: hidden; 21 display: flex; 22 flex-direction: column; 23 gap: 5px; 24 flex-shrink: 0; 25 transition: .5s; 26} 27.side1 .box, .side2 .box { 28 white-space: nowrap; 29 height: 50px; 30} 31.side1.open, .side2.open { 32 width: 30%; 33}

JavaScript/JQuery

1$(".b1").click(() => { 2 $(".side1").toggleClass("open"); 3 $(".side2.open").removeClass("open"); 4}) 5$(".b2").click(() => { 6 $(".side2").toggleClass("open"); 7 $(".side1.open").removeClass("open"); 8})

CodePenサンプル

投稿2022/08/18 12:38

hatena19

総合スコア33715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

astaraea_lagoon

2022/08/18 13:38

コード未提示にも関わらず、ご丁寧にありがとうございます。 display none利用しない、widthを0、と目から鱗でした。 頂いたサンプルを基に練り直してみます。実装出来次第ベストアンサーにさせていただきます。
hatena19

2022/08/18 13:42

アニメーションさせる必要がなければ、display:none/block でいいのですが、 アコーディオンというからにはアニメーションするものというイメージなので、widthを使いました。
astaraea_lagoon

2022/08/19 11:05

解説いただきましてありがとうございます。無事実装出来ました。 (C-1〜3とC4〜6の位置が微妙にズレておりましたため、gap: 5px;の適用箇所のみ変更いたしました。) animationの組み合わせによる3カラム目の見せ方も変更しやすくノーストレスでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問