menu
menu

キーワード検索

 

前月(3月)の人気記事トップ10

  1. ( 1 - ) 【CSS】CSSだけでドロップダウンメニュー
  2. ( 6 ↑) 【CSS】CSSだけでサイズ可変・スマホ対応のアコーディオン
  3. (10 ↑) 【Mac】Macのユーザー名とアカウント名を変更する
  4. ( 2 ↓) 【iPhone・iPad】投稿の準備中にエラーが起きました。後でやり直してください。
  5. ( 3 ↓) 【HTML5】スマホサイトの作成・基本編
  6. ( 5 ↓) 【CSS】CSSだけでブロック要素の表示非表示(トグルボタン)
  7. ( - ↑) 【決定版】レスポンシブデザインのブレークポイントはこれで決まり❗
  8. ( 9 ↑) 【jQuery】表示しているブラウザの高さを取得してCSSのheightに指定
  9. ( 7 ↓) 【Mac】iMovieの保存場所を変更する
  10. ( - ↑) 【Mac】MacにInkscapeをインストール
このエントリーをはてなブックマークに追加

【CSS】CSSだけで横方向に展開するサイズ可変・スマホ対応のアコーディオン

  • Labs

CSS3

こんにちは(・∀・)

CSS3のAnimationやtransitionといったプロパティのおかげでJavaScriptを使わなくても動きのあるWebサイトが作れるようになってきました。そこで今回はCSSだけで作る、サイズが可変してスマホにも対応したアコーディオンをご紹介します。

Contents

  1. チェックボックスでアコーディオン
  2. ラジオボタンでアコーディオン

スマホ対応のアコーディオン

チェックボックスを使ったアコーディオンとラジオボタンを使ったアコーディオンの2種類です。それぞれの特質にあわせた形でアコーディオンが展開されます。チェックボックスを使ったアコーディオンはその性質上、ボタンを選択(クリック)したら選択した分すべて展開しますが、ラジオボタンのアコーディオンはnameでグループになっているので選択(クリック)した分だけ展開します。また、最初から展開している状態で表示したい場合はinput要素にcheckedを入れればページを開いた時点でその要素は開いて表示されます。

サンプルは横幅100%で可変になっています。min-widthを300pxに設定してありますので、そのサイズまでブラウザ幅を縮めると横スクロールバーが出ます。チェックボックスやラジオボタンがトリガーとなり展開する仕組みですのでアコーディオンだけではなく、ツリーメニューやタブレイアウトでも使えそうですね。

IEは10以上で正しく動作します。

1. チェックボックスでアコーディオン
HTML

<div class="sample-accordion">
<div class="ac-content">
<label for="ac-cap1">1</label>
<input id="ac-cap1" type="checkbox" checked>
<div class="ac-cont">
<p>コンテンツ1</p>
</div>
<label for="ac-cap2">2</label>
<input id="ac-cap2" type="checkbox">
<div class="ac-cont">
<p>コンテンツ2</p>
<p>コンテンツ2</p>
</div>
<label for="ac-cap3">3</label>
<input id="ac-cap3" type="checkbox">
<div class="ac-cont">
<p>コンテンツ3</p>
<p>コンテンツ3</p>
<p>コンテンツ3</p>
</div>
<!--ac-content--></div>
<!--sample-accordion--></div>
CSS

.sample-accordion {
  min-width: 300px;
  margin: 0 auto;
}
.sample-accordion .ac-content {
  margin: 0 10px;
}
.sample-accordion input {
  display: none;
}
.sample-accordion label {
  display: block;
  background: #9fb7d4;
  cursor: pointer;
  padding: 10px;
  border-bottom: 1px solid #fff;
}
.sample-accordion label:hover {
  background: #ccc;
}
.sample-accordion .ac-cont {
  transition: 0.2s;
  height: 0;
  overflow: hidden;
  background: #ddd;
  padding: 0 10px;
}
.sample-accordion input:checked + .ac-cont {
  height: auto;
  padding: 10px;
}
@media (min-width: 768px) {
.sample-accordion {
  width: 600px;
  height: 300px;
  margin: 0 auto;
  overflow: hidden;
  background: #9fb7d4;
}
.sample-accordion .ac-content {
  margin: 0;
  padding: 0;
  display: flex;
}
.sample-accordion input {
  display: none;
}
.sample-accordion label {
  height: 300px;
  background: #9fb7d4;
  cursor: pointer;
  padding: 10px;
  border-right: 1px solid #fff;
}
.sample-accordion label:hover {
  background: #ccc;
}
.sample-accordion .ac-cont {
  width: 138px;
  height: 300px;
  display: none;
  background: #ddd;
  border-right: 1px solid #fff;
}
.sample-accordion input:checked + .ac-cont {
  width: 138px;
  height: 300px;
  padding: 10px;
  display: block;
}
/* ** */}
Result

サンプルデモはこちら

2. ラジオボタンでアコーディオン
HTML

<div class="sample-accordion">
<div class="ac-content">
<label for="ac-cap1">1</label>
<input id="ac-cap1" type="radio" name="ac" checked>
<div class="ac-cont">
<p>コンテンツ1</p>
</div>
<label for="ac-cap2">2</label>
<input id="ac-cap2" type="radio" name="ac">
<div class="ac-cont">
<p>コンテンツ2</p>
<p>コンテンツ2</p>
</div>
<label for="ac-cap3">3</label>
<input id="ac-cap3" type="radio" name="ac">
<div class="ac-cont">
<p>コンテンツ3</p>
<p>コンテンツ3</p>
<p>コンテンツ3</p>
</div>
<label for="ac-cap4">4</label>
<input id="ac-cap4" type="radio" name="ac">
<div class="ac-cont">
<p>コンテンツ4</p>
<p>コンテンツ4</p>
<p>コンテンツ4</p>
<p>コンテンツ4</p>
</div>
<label for="ac-cap5">5</label>
<input id="ac-cap5" type="radio" name="ac">
<div class="ac-cont">
<p>コンテンツ5</p>
<p>コンテンツ5</p>
<p>コンテンツ5</p>
<p>コンテンツ5</p>
<p>コンテンツ5</p>
</div>
<!--ac-content--></div>
<!--sample-accordion--></div>
CSS

.sample-accordion {
  min-width: 300px;
  margin: 0 auto;
}
.sample-accordion .ac-content {
  margin: 0 10px;
}
.sample-accordion label {
  display: block;
  background: #9fb7d4;
  cursor: pointer;
  padding: 10px;
  border-bottom: 1px solid #fff;
}
.sample-accordion label:hover {
  background: #ccc;
}
.sample-accordion input {
  display: none;
}
.sample-accordion .ac-cont {
  transition: 0.2s;
  height: 0;
  overflow: hidden;
  background: #ddd;
  padding: 0 10px;
}
.sample-accordion input:checked + .ac-cont {
  height: auto;
  padding: 10px;
}
@media (min-width: 768px) {
.sample-accordion {
  width: 600px;
  height: 300px;
  margin: 0 auto;
  overflow: hidden;
}
.sample-accordion .ac-content {
  margin: 0;
  padding: 0;
  display: flex;
}
.sample-accordion input {
  display: none;
}
.sample-accordion label {
  height: 300px;
  background: #9fb7d4;
  cursor: pointer;
  padding: 10px;
  border-right: 1px solid #fff;
}
.sample-accordion label:hover {
  background: #ccc;
}
.sample-accordion .ac-cont {
  width: 374px;
  height: 300px;
  display: none;
  background: #ddd;
  border-right: 1px solid #fff;
}
.sample-accordion input:checked + .ac-cont {
  width: 374px;
  height: 300px;
  padding: 10px;
  display: block;
}
/* ** */}
Result

サンプルデモはこちら


関連リンク

【CSS Tips】CSSだけで横に展開するアコーディオン
【jQuery】jQueryでスマホ画面は縦方向PC画面は横方向に展開するアコーディオン
【jQuery】サイズ可変・スマホ対応のアコーディオン

参考

かつてはJavaScriptを利用していたものの、今ではCSSのみで実装できる10の小技
CSSだけでメニューが開いたり閉じたりするアコーディオンを作る!javascript不要

  • カテゴリー:Labs
このエントリーをはてなブックマークに追加