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

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

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

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

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

HTML

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

CSS

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

Q&A

解決済

3回答

579閲覧

CSSのみでのアコーディオンメニュー

isseidayo

総合スコア12

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

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

HTML

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

CSS

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

0グッド

0クリップ

投稿2017/11/07 05:47

こんにちは!
CSSのみでのアコーディオンメニューを実装しようと考えておりますが
以下のサンプルにさらに動きを加えたいと思っております。

参考サイト
https://codepen.io/takanorip/pen/mExJOZ

HTML

1<div class="menu"> 2 <label for="menu_bar01">MENU01</label> 3 <input type="radio" name="radio" id="menu_bar01" class="accordion" /> 4 <ul id="links01"> 5 <li><a href="">Link01</a></li> 6 <li><a href="">Link02</a></li> 7 <li><a href="">Link03</a></li> 8 <li><a href="">Link04</a></li> 9 </ul> 10 <label for="menu_bar02">MENU02</label> 11 <input type="radio" name="radio" id="menu_bar02" class="accordion" /> 12 <ul id="links02"> 13 <li><a href="">Link01</a></li> 14 <li><a href="">Link02</a></li> 15 <li><a href="">Link03</a></li> 16 <li><a href="">Link04</a></li> 17 </ul> 18</div>

css

1.menu { 2 max-width: 400px; 3 margin: 0 auto; 4 padding: 0; 5} 6 7.menu a { 8 display: block; 9 padding: 10px; 10 text-decoration: none; 11 color: #000; 12 line-height: 1; 13} 14 15label { 16 display: block; 17 margin: 0 0 2px 0; 18 padding :12px; 19 line-height: 1; 20 color :#fff; 21 background :#007bbb; 22 cursor :pointer; 23} 24 25input { 26 display: none; 27} 28 29.menu ul { 30 margin: 0; 31 padding: 0; 32 background :#f4f4f4; 33 list-style: none; 34} 35 36.menu li { 37 max-height: 0; 38 overflow-y: hidden; 39 -webkit-transition: all 0.5s; 40 -moz-transition: all 0.5s; 41 -ms-transition: all 0.5s; 42 -o-transition: all 0.5s; 43 transition: all 0.5s; 44} 45 46#menu_bar01:checked ~ #links01 li, 47#menu_bar02:checked ~ #links02 li { 48 max-height: 46px; 49 opacity: 1; 50}

~現在の動き~
MENU01を押すとMENU01内容が表示する
MENU01が開いているときにMENU02を押すとMENU01が閉まりMENU02の内容が表示される

上記の動きに加え以下の動作も加えたい
MENU01を押すとMENU01内容が表示される
MENU01をもう一度押すとMENU01が閉まる

※CSSのみで実装を考えております。

ご教示お願い致します。

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

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

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

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

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

guest

回答3

0

ベストアンサー

例えばこんなかんじでやればできますが、ホントにやる意味があるかどうかは疑問

CSS

1input[type=radio].accordion:not(:checked)+label{ 2display:none; 3} 4input[type=radio].accordion:checked+label+label{ 5display:none; 6} 7 8input[type=radio].accordion:checked+label+label+ul{ 9display:block; 10} 11input[type=radio].accordion:not(:checked)+label+label+ul{ 12display:none; 13}

HTML

1<input type="radio" name="radio" id="menu_bar00" class="accordion" /> 2<div class="menu"> 3 <input type="radio" name="radio" id="menu_bar01" class="accordion" /> 4 <label for="menu_bar00" class="open">MENU01o</label></label> 5 <label for="menu_bar01" class="close">MENU01c</label></label> 6 <ul id="links01"> 7 <li><a href="">Link1-01</a></li> 8 <li><a href="">Link1-02</a></li> 9 <li><a href="">Link1-03</a></li> 10 <li><a href="">Link1-04</a></li> 11 </ul> 12 <input type="radio" name="radio" id="menu_bar02" class="accordion" /> 13 <label for="menu_bar00" class="open">MENU02o</label> 14 <label for="menu_bar02" class="close">MENU02c</label> 15 <ul id="links02"> 16 <li><a href="">Link2-01</a></li> 17 <li><a href="">Link2-02</a></li> 18 <li><a href="">Link2-03</a></li> 19 <li><a href="">Link2-04</a></li> 20 </ul> 21</div>

よくみたらkei344さんとほぼ同じ感じですね

投稿2017/11/07 06:53

yambejp

総合スコア114839

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

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

isseidayo

2017/11/07 07:00

ありがとうございました。 こちらの方法で実装が可能になりました。 また一つお勉強になりました。
yambejp

2017/11/07 07:08

すみません、検証用につけたopen,closeクラスは使ってないので意味ないです ラベルの文字も微妙に調整入っていますが、同じモノでもよいでしょう
isseidayo

2017/11/07 07:10

こちらで問題ありません。ラベルの文字は異なった方が仕組みがどのようになっているのかがとてもわかりやすかったです。こちらを参考に実装致します。ありがとうございました。
guest

0

CSSは書きませんがHTMLはこうすれば応用できます。

HTML

1<div class="menu"> 2 <input type="radio" name="radio" id="menu_bar00" class="accordion" /> 3 <input type="radio" name="radio" id="menu_bar01" class="accordion" /> 4 <label for="menu_bar01">MENU01</label> 5 <label class="hidden" for="menu_bar00">MENU01</label> 6 <ul id="links01"> 7 <li><a href="">Link01</a></li> 8 <li><a href="">Link02</a></li> 9 <li><a href="">Link03</a></li> 10 <li><a href="">Link04</a></li> 11 </ul> 12 <input type="radio" name="radio" id="menu_bar02" class="accordion" /> 13 <label for="menu_bar02">MENU02</label> 14 <label class="hidden" for="menu_bar00">MENU02</label> 15 <ul id="links02"> 16 <li><a href="">Link01</a></li> 17 <li><a href="">Link02</a></li> 18 <li><a href="">Link03</a></li> 19 <li><a href="">Link04</a></li> 20 </ul> 21</div>

投稿2017/11/07 06:16

kei344

総合スコア69407

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

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

isseidayo

2017/11/07 06:37

ご回答ありがとうございました。 https://codepen.io/takanorip/pen/mExJOZ こちらのサイトで上記のソースを入れてみましたが MENU01が重複してしまいます。 class="hidden"は以下のCSSをいれてみましたが思うような動作にはなりませんでした。 .hidden { visibility:hidden; display:none; }
guest

0

どのような理由があっての「CSSオンリー」なのでしょうか。

コードを見ての通り、この実装は内部的にラジオボタンを使って実装しています。そして、ラジオボタンの「チェックされた」「されていない」をアコーディオンが「開いた」「閉じた」として表現している、という寸法です。

ところが、JavaScriptを使わないラジオボタン単体では全部からチェックを外す方法がないので、このアコーディオンも、「一度開けばどれかが開いたまま」ということになります。

理論上、CSSはチューリング完全とのことで、CSSだけでマインスイーパーを作った例もありますが、本来想定した使い方ではないので、「閉じられるアコーディオン」の実装も、必要以上に迂遠で難解なものになることが予想されます。

投稿2017/11/07 06:07

maisumakun

総合スコア145184

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

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

isseidayo

2017/11/07 06:10

ご回答ありがとうございます。 確かに現在ラジオボタンになっております。これをチェックボックスに切り替えると開いたままになってしまいます。 なぜ、CSSオンリーかと申しますと、スマホでモーダルの上でアコーディオンメニューを実装させようとしていますが、Javascriptの上でJavascriptがうまく動きません。 そこでアコーディオンメニューをCSSオンリーに切り替えました。。。
maisumakun

2017/11/07 06:12

JavaScriptで生成したものといっても、HTMLはHTMLなので、適切にハンドリングすればJavaScriptを適用させることもできます(モーダル表示のライブラリに、「表示直後のコールバック」とかそういうのはありませんか?)。
isseidayo

2017/11/07 06:19

お世話になります。モーダルウィンドウは下記のサイトのものを実装しています。 https://syncer.jp/jquery-modal-window 私自身Javascriptがわかりません。素人で申し訳ありません。 表示後のコールバックにつてもわかりません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問