folderデザインしたい

クリックで内容を展開するアコーディオンメニューをCSSだけで実装する方法

クリックで内容を展開するアコーディオンメニューをCSSだけで実装する方法

クリックで内容を展開するアコーディオンメニューをCSSだけで実装する方法 - https://do.gt-gt.org/how-to-make-accordionmenu/

個人サイトでも、HTMLとCSSをコピペするだけでカンタンに実装できる、アコーディオンメニューを紹介します。

アコーディオンメニューとは

アコーディオンメニューとは、クリック・タップでコンテンツが開閉するボックスのことです。以下に実際のアコーディオンメニューを設置したので、クリックしてみてください。

ここをクリックで展開

ここに内容

「ここをクリックで展開」と書かれた文字をクリック・タップすると詳細な内容が下に出現します。企業サイトのQ&Aなどでよく見かけるものですね。個人サイトにおいても、ネタバレ回避のワンクッションとして使ったり、長くなってしまったコンテンツをしまっておいたり、いろんな用途に使えそうです。また、クリックで見えるようになる本文には、HTMLタグを使用することもできます。

実はこのアコーディオンメニュー、HTMLだけで実現できるんです

<details>
<summary>ここをクリックで展開</summary>
ここに内容
</details>

シンプルなHTMLで表現できて、とても使いやすいですね。ただ、これだけでは味気ないので、CSSでデザインとアニメーションを調整したものを次項から紹介します。HTMLとCSSをコピペするだけなので、実装はとってもカンタンです。

HTMLコードサンプル

HTMLコードは、以下のように記述してください、

<details class="accordion">
  <summary class="accordion_title">ここをクリックすると展開します。</summary>
  <div class="accordion_contents">
    <p>詳細なテキストが入ります。</p>
  </div>
</details>

CSSコードサンプル

CSSは、3種のデザインを用意しました。いずれもクリックするとアニメーションしながらコンテンツが展開します。お好みのデザインのもののCSSをコピーしてご利用ください。

またお使いのテンプレートによっては、元のCSSが競合してデザインが崩れてしまう場合があります。その場合はご自分で修正していただきますようよろしくお願いします。

ブラウザや環境によってはアニメーションが適用されない場合があります。ご了承下さい。またHTML・CSSのカスタマイズは自由です。

ボーダー付きボックス

.accordion  {
  margin: 30px auto;
}

.accordion_title {
  position: relative;
  border: none;
  display: block;
  list-style: none;
  width: 100%;
  cursor: pointer;
  background: #ffffff;
  border: 2px solid #d8d8d8;
  padding: 1.4em 1.6em 1.4em;
  line-height: 1.6em;
}

summary.accordion_title::-webkit-details-marker {
  display:none;
}

.accordion_title:after {
  content: "+";
  position: absolute;
  top: calc(50% - 0.5em);
  right: 20px;
  line-height: 1;
  padding: 0;
  pointer-events: none;
}

.accordion::details-content {
  opacity: 0;
  block-size: 0;
  transition: .3s;
  transition-property: display, opacity, block-size, padding;
  transition-behavior: allow-discrete;
  line-height: 1.6em;
}

.accordion .accordion_content {
  padding: 0 2em 0 3em;
}

.accordion .accordion_content > *:first-of-type {
  margin-top: 0;
}

.accordion .accordion_content > *:last-of-type {
  margin-bottom: 0;
}

.accordion[open]::details-content {
  opacity: 1;
  block-size: auto;
  block-size: calc-size(auto, size);
}

.accordion[open] .accordion_content {
  padding: 1.4em 2em 1.4em 3em;
}

.accordion[open] .accordion_title:after {
  content: "-";
}

ボーダーなしボックス

.accordion  {
  margin: 30px auto;
}

.accordion_title {
  position: relative;
  border: none;
  display: block;
  list-style: none;
  width: 100%;
  cursor: pointer;
  background: #d2d2d2;
  padding: 1.4em 1.6em 1.4em;
  line-height: 1.6em;
}

summary.accordion_title::-webkit-details-marker {
  display:none;
}

.accordion_title:after {
  content: "+";
  position: absolute;
  top: calc(50% - 0.5em);
  right: 20px;
  line-height: 1;
  padding: 0;
  pointer-events: none;
}

.accordion::details-content {
  opacity: 0;
  block-size: 0;
  transition: .3s;
  transition-property: display, opacity, block-size, padding;
  transition-behavior: allow-discrete;
  line-height: 1.6em;
  background: #ffffff;
}

.accordion .accordion_content {
  padding: 0 1.4em;
}

.accordion .accordion_content > *:first-of-type {
  margin-top: 0;
}

.accordion .accordion_content > *:last-of-type {
  margin-bottom: 0;
}

.accordion[open]::details-content {
  opacity: 1;
  block-size: auto;
  block-size: calc-size(auto, size);
}

.accordion[open] .accordion_content {
  padding: 1.4em;
}

.accordion[open] .accordion_title:after {
  content: "-";
}

下線ボックス

.accordion  {
  margin-inline: 0;
  border-bottom:1px solid #a9a9a9
}

.accordion_title {
  position: relative;
  border: none;
  display: block;
  list-style: none;
  width: 100%;
  cursor: pointer;
  padding: 1.4em 2em 1.4em 1.4em;
  line-height: 1.6em;
}

summary.accordion_title::-webkit-details-marker {
  display:none;
}

.accordion_title:after {
  content: "+";
  position: absolute;
  top: calc(50% - 0.5em);
  right: 20px;
  line-height: 1;
  padding: 0;
  pointer-events: none;
}

.accordion::details-content {
  opacity: 0;
  block-size: 0;
  transition: .3s;
  transition-property: display, opacity, block-size, padding;
  transition-behavior: allow-discrete;
  line-height: 1.6em;
}

.accordion .accordion_content {
  padding: 0 2em 0 3em;
}

.accordion .accordion_content > *:first-of-type {
  margin-top: 0;
}

.accordion .accordion_content > *:last-of-type {
  margin-bottom: 0;
}

.accordion[open]::details-content {
  opacity: 1;
  block-size: auto;
  block-size: calc-size(auto, size);
}

.accordion[open] .accordion_content {
  padding: 0 2em 1.4em 3em;
}

.accordion[open] .accordion_title:after {
  content: "-";
}

この記事を書いた人

ガタガタ

このサイトと、このサイトの掲載記事のほとんどと、このサイトで配布しているプログラムやテンプレートのすべてを作った人。絵を描いたり、文章を書いたりして暮らしています。

関連記事

デベロッパーツールの使い方を画像付き解説!CSS編集の強力な味方にしよう
folderデザインしたい favorite 16

デベロッパーツールの使い方を画像付き解説!CSS編集の強力な味方にしよう

YouTubeの埋め込みの縦横比を一定のままレスポンシブ対応させる方法
folderデザインしたい favorite 26

YouTubeの埋め込みの縦横比を一定のままレスポンシブ対応させる方法

HTMLテンプレートを自前カスタマイズしてもダサくならないためのデザインの考え方
folderデザインしたい favorite 60

HTMLテンプレートを自前カスタマイズしてもダサくならないためのデザインの考え方

個人サイトに可愛いアイコンを無料導入!Line Awesomeの使い方
folderデザインしたい favorite 53

個人サイトに可愛いアイコンを無料導入!Line Awesomeの使い方

加工ソフト不要!CSSだけで写真やイラストを加工し雰囲気を変える方法
folderデザインしたい favorite 4

加工ソフト不要!CSSだけで写真やイラストを加工し雰囲気を変える方法

ファビコンの設定方法!サイト独自のアイコンを作ってオリジナリティアップ
folderデザインしたい favorite 27

ファビコンの設定方法!サイト独自のアイコンを作ってオリジナリティアップ