アコーディオンパネルと言えば、jQueryで!ってなるかもしれないけど、htmlとcssだけでは出来ないかな?と思いチャレンジしてみました。
まずは以前の投稿にある、「HTMLとCSSでスマホ用メニュー」の応用で出来そうなので、チェックボックスとラベルタグを使ってみます。
とりあえずは定義リストでベースを組んで何とかしようと思ったのだが、考えれば考えるほど無理です。なぜだめかと言うとdlの中にネスト出来るのはdtとddのみ。
なので定義リストは辞めてdivでコーディングします。
更に当初の予定から変更したのは、チェックボックス。チェックボックスは複数の項目で複数選択できる為、使えません。今回はラジオボタンに変更です。
<div id="accordion"> <label for="cont1"> <input name="accordion" type="radio" id="cont1" checked> <div class="title">タイトル1</div> <div class="description">内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1</div> </label> <label for="cont2"> <input type="radio" name="accordion" id="cont2"> <div class="title"> タイトル2 </div> <div class="description">内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2</div> </label> <label for="cont3"> <input type="radio" name="accordion" id="cont3"> <div class="title"> タイトル3 </div> <div class="description">内容3内容3内容3</div> </label> </div>
このhtmlではlabelタグを使うことが重要です。
ラジオボタンは表示させず文字をラジオボタン状態にするにはlabelタグで囲んでやります。
* { margin: 0; padding: 0; } input { display: none; } #accordion { width: 300px; border: solid 1px #666; margin: auto; } .title { background-color: #0CF; padding: 5px;-webkit-transition: all 0.5s; -moz-transition: all 0.5s; -ms-transition: all 0.5s; -o-transition: all 0.5s; transition: all 0.5s; } .description { height: 0px; overflow: hidden; -webkit-transition: all 0.5s; -moz-transition: all 0.5s; -ms-transition: all 0.5s; -o-transition: all 0.5s; transition: all 0.5s; } input:checked + div.title { background-color:#09F; } input:checked + div + div { height: 100px; }