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

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

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

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

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

Q&A

解決済

1回答

3441閲覧

detailsで1つだけ開きたい(他は閉じる)

mi-ko

総合スコア1

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

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

0グッド

1クリップ

投稿2022/07/07 04:44

初めまして。
色々調べましたが、うまくいかないのでご教授いただければ幸いです。

キャラクター図鑑のようなものを作成しています。
サムネイルで3×n(スマホの場合)の一覧にし、クリックするとアコーディオンメニューとして詳細が見えます。
サムネイルで表示されるのがaccordion-ttlの写真と名前。
詳細がaccordion-txtの写真やone-fourの内容です。
※fourの内容はキャラによって増減します。

お伺いしたい点は、同列の1つ目を開いたまま2つ目をクリックすると詳細がかぶってしまうので、
”1つ開いたら前に開いていたものを閉じる”ようにしたいです。
detailsを使用して上記のようなことはできますでしょうか。

html

1<div class="item"> 2 <details class="accordion"> 3 <summary class="accordion-ttl"> 4 <img src="img.jpg"> 5 <h2>キャラ名</h2> 6 </summary> 7 <div class="accordion-txt"> 8 <img class="pic" src="img.jpg"> 9 <div class="one"> 10 <p class="yomi">yomigana</p> 11 <p class="name">キャラ名</p> 12 </div> 13 <div class="two"> 14 <p>Birthday : 0月</p> 15 <p>Blood : 0型</p> 16 </div> 17 <div class="three"> 18 <div class="four"> 19 <div class="question">趣味</div> 20 <div class="answer">回答</div> 21 </div> 22 <div class="four"> 23 <div class="question">好きな○○</div> 24 <div class="answer">回答</div> 25 </div> 26 <div class="four"> 27 <div class="question">好きな○○</div> 28 <div class="answer">回答</div> 29 </div> 30 </div> 31 </div> 32 </details> 33 </div> 34・・・ 35

css

1.item { 2 width: calc((100% - 1em * 2) / 3); 3} 4img { 5 width:30vw; 6 height:30vw; 7 object-fit: cover; 8 } 9 10.accordion-ttl { 11 list-style: none; 12} 13 14.item:nth-child(3n-2) .accordion-txt { 15 margin-left: 0; 16} 17.item:nth-child(3n-1) .accordion-txt { 18 margin: 0 calc(50% - 49vw); 19} 20.accordion-txt { 21 background:rgba(255, 255, 255, 0.8); 22 width: 98vw; 23 margin: 0 calc(10% - 70vw); 24 padding: 0.2em; 25 padding-bottom: 2em; 26 color: #020E34; 27 position: relative; 28} 29.accordion-txt p { 30 color: #020E34; 31} 32 33.pic { 34 position: absolute; 35 width: 160px; 36 height: 160px; 37 border-radius:0; 38 margin: 15px 0 0 15px; 39} 40.one { 41 margin-left: 193px; 42 margin-top: 15px; 43 text-align: center; 44} 45.name { 46 font-size:2.3em; 47 margin: 0; 48} 49.class { 50 font-size: 1em; 51} 52.two { 53 margin:3em auto; 54 padding:0.2em; 55 width:200px; 56 background:yellow; 57} 58.three { 59 display: grid; 60 grid-template-columns: repeat(2, 1fr); 61 grid-auto-rows:minmax(1em,auto); 62} 63.four { 64 display: grid; 65 padding:0.4em; 66 padding-top:1em; 67 border-bottom: 1px solid yellow; 68} 69 70 71.question { 72 font-size:1.1rem; 73} 74.answer { 75 font-size:0.7rem; 76 padding-left : 1em; 77 padding-top: 0.5em; 78}

js

1$(function(){ 2 $('.wrap .item .accordion .accordion-ttl').click(function(){ 3 $(this).next('.accordion-txt').slideToggle(); 4 $(this).toggleClass("open"); 5 6 $('.wrap .item .accordion .accordion-ttl').not($(this)).next('.accordion .accordion-txt').slideUp(); 7 $('.wrap .item .accordion .accordion-ttl').not($(this)).removeClass("open"); 8 }); 9});

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

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

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

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

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

guest

回答1

0

ベストアンサー

<details>: 詳細折りたたみ要素 - HTML: HyperText Markup Language | MDN

上記のtoggle イベントを使ってみました。

JavaScript

1const elems = document.querySelectorAll("details.accordion"); 2let openelem = null; 3for(elem of elems){ 4 elem.addEventListener("toggle", event => { 5 if (event.target.open) { 6 if (openelem !== null) openelem.open = false; 7 openelem = event.target; 8 } else { 9 if (openelem === event.target) {openelem = null} 10 } 11 }); 12}

投稿2022/07/07 14:42

hatena19

総合スコア33715

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

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

mi-ko

2022/07/08 00:22

ご返信ありがとうございます。 お送りいただいた内容で解決しました!! 色々試してもなかなかできなかったので、助かりました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問