もくじ
アコーディオンメニュー(折りたたみメニュー)をJavaScriptを使用せずに、HTMLとCSSのみで実装する方法を紹介します。
アコーディオンをHTMLのみで実装する方法は以下の記事で紹介してます。
【CSS不要】HTMLのみでアコーディオン(開閉ボタン)を実装する方法
もくじ【サンプル】HTMLのみでアコーディオンメニューを実装【実装コード】HTMLのみでアコーディオンメニューを実装detailsタグとsummaryタグにCSS当ててデザインを調整【サンプル】CSS ...
アコーディオンをjQueryで実装する方法は以下の記事で紹介してます。
【jQuery】アコーディオン(開閉ボタン)を実装する方法
もくじjQueryを使用したアコーディオンサンプルjQueryを使用したアコーディオンコピペ用コード使用方法 Q&A動かないのですが、どうすれば良いですか?アコーディオンの追加方法は?レスポンシブに対 ...
アコーディオンをJavaScriptで実装する方法は以下の記事で紹介してます。
【JavaScript】jQuery未使用でアコーディオン(開閉ボタン)を実装する方法
もくじJavaScriptを使用したアコーディオンサンプルJavaScriptを使用したアコーディオンコピペ用コード使用方法 Q&Aアコーディオンの追加方法は?一つ目のアコーディオンを開いた状態にする ...
【単体用】アコーディオン(折りたたみメニュー)
【単体用】HTML・CSS
<div class="menu-box">
<input id="check-box" type="checkbox">
<label class="menu-label-title" for="check-box">
<span class="menu-title">Q.クリック</span>
<span></span>
<span></span>
</label><!-- .menu-label-title -->
<div class="menu-text">A.テキスト</div>
</div><!-- .menu-box -->
.menu-box {
border: solid 1px #c0c0c0;
}
.menu-box .menu-label-title {
display: block;
padding: 20px 25px;
cursor: pointer;
position: relative;
}
.menu-box .menu-title {
display: block;
padding-right: 50px;
}
.menu-box .menu-label-title span:nth-child(2),
.menu-box .menu-label-title span:nth-child(3) {
display: block;
width: 16px;
border-bottom: solid 1px #c0c0c0;
position: absolute;
top: 50%;
right: 25px;
transform: translateY(-50%);
-webkit-transform: translateY(-50%);
-ms-transform: translateY(-50%);
}
.menu-box .menu-label-title span:nth-child(2) {
transform: rotate(45deg);
right: 36px;
}
.menu-box .menu-label-title span:nth-child(3) {
transform: rotate(-45deg);
}
.menu-box .menu-text {
display: none;
padding: 20px 0;
margin: 0 25px;
border-top: dotted 1px #c0c0c0;
}
/* 折り畳みメニューを追加する場合 */
.menu-box #check-box {
display: none;
}
.menu-box #check-box:checked ~ .menu-text {
display: block;
}
.menu-box #check-box:checked ~ .menu-label-title span:nth-child(2) {
transform: rotate(-45deg);
}
.menu-box #check-box:checked ~ .menu-label-title span:nth-child(3) {
transform: rotate(45deg);
}
/* ここまで */
【単体用】アコーディオン(折りたたみメニュー)を複数利用する場合
<div class="menu-box">
<input id="check-box" type="checkbox">
<label class="menu-label-title" for="check-box">
<span class="menu-title">Q.クリック</span>
<span></span>
<span></span>
</label><!-- .menu-label-title -->
<div class="menu-text">A.テキスト</div>
</div><!-- .menu-box -->
上記のコードを必要な数任意の場所に貼り付け。
貼り付けた2つ目以降のid="check-box"とfor="check-box"のcheck-boxを固有値に変更する。
sampleの例だと下記のようになります。
<div class="menu-box">
<input id="check-box" type="checkbox">
<label class="menu-label-title" for="check-box">
<span class="menu-title">Q.クリック</span>
<span></span>
<span></span>
</label><!-- .menu-label-title -->
<div class="menu-text">A.テキスト</div>
</div><!-- .menu-box -->
<div class="menu-box">
<input id="check-box2" type="checkbox">
<label class="menu-label-title" for="check-box2">
<span class="menu-title">Q.クリック</span>
<span></span>
<span></span>
</label><!-- .menu-label-title -->
<div class="menu-text">A.テキスト</div>
</div><!-- .menu-box -->
最後に、CSSの46行目「/* 折り畳みメニューを追加する場合 */」から
62行目「/* ここまで */」のセレクタを変更。
今回のサンプルの例だと下記のようになります。(1~45行目は省略)
/* 折り畳みメニューを追加する場合 */
.menu-box #check-box,
.menu-box #check-box2 {
display: none;
}
.menu-box #check-box:checked ~ .menu-text,
.menu-box #check-box2:checked ~ .menu-text {
display: block;
}
.menu-box #check-box:checked ~ .menu-label-title span:nth-child(2),
.menu-box #check-box2:checked ~ .menu-label-title span:nth-child(2) {
transform: rotate(-45deg);
}
.menu-box #check-box:checked ~ .menu-label-title span:nth-child(3),
.menu-box #check-box2:checked ~ .menu-label-title span:nth-child(3) {
transform: rotate(45deg);
}
/* ここまで */
【2段用】アコーディオン(折りたたみメニュー)
【2段用】HTML・CSS
<div class="double-menu-box">
<div class="menus-box">
<input id="double-check-box" type="checkbox">
<label class="menu-label-title" for="double-check-box">
<span class="menu-title">Q.クリック</span>
<span></span>
<span></span>
</label><!-- .menu-label-title -->
<div class="menu-text">A.テキスト</div>
</div><!-- .menus-box -->
<div class="menus-box">
<input id="double-check-box2" type="checkbox">
<label class="menu-label-title" for="double-check-box2">
<span class="menu-title">Q.クリック</span>
<span></span>
<span></span>
</label><!-- .menu-label-title -->
<div class="menu-text">A.テキスト</div>
</div><!-- .menus-box -->
</div><!-- .double-menu-box -->
.double-menu-box {
border: solid 1px #c0c0c0;
}
.double-menu-box .menus-box {
border-top: dashed 1px #c0c0c0;
}
.double-menu-box .menus-box:first-child {
border-top: none;
}
.double-menu-box .menu-label-title {
display: block;
padding: 20px 25px;
cursor: pointer;
position: relative;
}
.double-menu-box .menu-title {
display: block;
padding-right: 50px;
}
.double-menu-box .menu-label-title span:nth-child(2),
.double-menu-box .menu-label-title span:nth-child(3) {
display: block;
width: 16px;
border-bottom: solid 1px #c0c0c0;
position: absolute;
top: 50%;
right: 25px;
transform: translateY(-50%);
-webkit-transform: translateY(-50%);
-ms-transform: translateY(-50%);
}
.double-menu-box .menu-label-title span:nth-child(2) {
transform: rotate(45deg);
right: 36px;
}
.double-menu-box .menu-label-title span:nth-child(3) {
transform: rotate(-45deg);
}
.double-menu-box .menu-text {
display: none;
padding: 20px 0;
margin: 0 25px;
border-top: dotted 1px #c0c0c0;
}
.double-menu-box .menus-box #double-check-box,
.double-menu-box .menus-box #double-check-box2 {
display: none;
}
.double-menu-box .menus-box #double-check-box:checked ~ .menu-text,
.double-menu-box .menus-box #double-check-box2:checked ~ .menu-text {
display: block;
}
.double-menu-box .menus-box #double-check-box:checked ~ .menu-label-title span:nth-child(2),
.double-menu-box .menus-box #double-check-box2:checked ~ .menu-label-title span:nth-child(2) {
transform: rotate(-45deg);
}
.double-menu-box .menus-box #double-check-box:checked ~ .menu-label-title span:nth-child(3),
.double-menu-box .menus-box #double-check-box2:checked ~ .menu-label-title span:nth-child(3) {
transform: rotate(45deg);
}
【3段以上用】アコーディオン(折りたたみメニュー)
【3段以上用】HTML・CSS
<div class="triple-menu-box">
<div class="menus-box">
<input id="triple-check-box" type="checkbox">
<label class="menu-label-title" for="triple-check-box">
<span class="menu-title">Q.クリック</span>
<span></span>
<span></span>
</label><!-- .menu-label-title -->
<div class="menu-text">A.テキスト</div>
</div><!-- .menus-box -->
<div class="menus-box">
<input id="triple-check-box2" type="checkbox">
<label class="menu-label-title" for="triple-check-box2">
<span class="menu-title">Q.クリック</span>
<span></span>
<span></span>
</label><!-- .menu-label-title -->
<div class="menu-text">A.テキスト</div>
</div><!-- .menus-box -->
<div class="menus-box">
<input id="triple-check-box3" type="checkbox">
<label class="menu-label-title" for="triple-check-box3">
<span class="menu-title">Q.クリック</span>
<span></span>
<span></span>
</label><!-- .menu-label-title -->
<div class="menu-text">A.テキスト</div>
</div><!-- .menus-box -->
<!-- 折り畳みメニューを追加する場合はこの下に追加 -->
</div><!-- .triple-menu-box -->
.triple-menu-box {
border: solid 1px #c0c0c0;
}
.triple-menu-box .menus-box {
border-top: dashed 1px #c0c0c0;
}
.triple-menu-box .menus-box:first-child {
border-top: none;
}
.triple-menu-box .menu-label-title {
display: block;
padding: 20px 25px;
cursor: pointer;
position: relative;
}
.triple-menu-box .menu-title {
display: block;
padding-right: 50px;
}
.triple-menu-box .menu-label-title span:nth-child(2),
.triple-menu-box .menu-label-title span:nth-child(3) {
display: block;
width: 16px;
border-bottom: solid 1px #c0c0c0;
position: absolute;
top: 50%;
right: 25px;
transform: translateY(-50%);
-webkit-transform: translateY(-50%);
-ms-transform: translateY(-50%);
}
.triple-menu-box .menu-label-title span:nth-child(2) {
transform: rotate(45deg);
right: 36px;
}
.triple-menu-box .menu-label-title span:nth-child(3) {
transform: rotate(-45deg);
}
.triple-menu-box .menu-text {
display: none;
padding: 20px 0;
margin: 0 25px;
border-top: dotted 1px #c0c0c0;
}
/* 折り畳みメニューを追加する場合 */
.triple-menu-box .menus-box #triple-check-box,
.triple-menu-box .menus-box #triple-check-box2,
.triple-menu-box .menus-box #triple-check-box3 {
display: none;
}
.triple-menu-box .menus-box #triple-check-box:checked ~ .menu-text,
.triple-menu-box .menus-box #triple-check-box2:checked ~ .menu-text,
.triple-menu-box .menus-box #triple-check-box3:checked ~ .menu-text {
display: block;
}
.triple-menu-box .menus-box #triple-check-box:checked ~ .menu-label-title span:nth-child(2),
.triple-menu-box .menus-box #triple-check-box2:checked ~ .menu-label-title span:nth-child(2),
.triple-menu-box .menus-box #triple-check-box3:checked ~ .menu-label-title span:nth-child(2) {
transform: rotate(-45deg);
}
.triple-menu-box .menus-box #triple-check-box:checked ~ .menu-label-title span:nth-child(3),
.triple-menu-box .menus-box #triple-check-box2:checked ~ .menu-label-title span:nth-child(3),
.triple-menu-box .menus-box #triple-check-box3:checked ~ .menu-label-title span:nth-child(3) {
transform: rotate(45deg);
}
/* ここまで */
【3段以上用】アコーディオン(折りたたみメニュー)を4段以上利用する場合
<div class="menus-box">
<input id="triple-check-box" type="checkbox">
<label class="menu-label-title" for="triple-check-box">
<span class="menu-title">Q.クリック</span>
<span></span>
<span></span>
</label><!-- .menu-label-title -->
<div class="menu-text">A.テキスト</div>
</div><!-- .menus-box -->
上記のコードを必要な数29行目の「 折り畳みメニューを追加する場合はこの下に追加 」の直下に貼り付け。
貼り付けた部分のid="triple-check-box"とfor="triple-check-box"のtriple-check-boxを固有値に変更する。
sampleの例だと下記のようになります。
<div class="triple-menu-box">
<div class="menus-box">
<input id="triple-check-box" type="checkbox">
<label class="menu-label-title" for="triple-check-box">
<span class="menu-title">Q.クリック</span>
<span></span>
<span></span>
</label><!-- .menu-label-title -->
<div class="menu-text">A.テキスト</div>
</div><!-- .menus-box -->
<div class="menus-box">
<input id="triple-check-box2" type="checkbox">
<label class="menu-label-title" for="triple-check-box2">
<span class="menu-title">Q.クリック</span>
<span></span>
<span></span>
</label><!-- .menu-label-title -->
<div class="menu-text">A.テキスト</div>
</div><!-- .menus-box -->
<div class="menus-box">
<input id="triple-check-box3" type="checkbox">
<label class="menu-label-title" for="triple-check-box3">
<span class="menu-title">Q.クリック</span>
<span></span>
<span></span>
</label><!-- .menu-label-title -->
<div class="menu-text">A.テキスト</div>
</div><!-- .menus-box -->
<!-- 折り畳みメニューを追加する場合はこの下に追加 -->
<div class="menus-box">
<input id="triple-check-box4" type="checkbox">
<label class="menu-label-title" for="triple-check-box4">
<span class="menu-title">Q.クリック</span>
<span></span>
<span></span>
</label><!-- .menu-label-title -->
<div class="menu-text">A.テキスト</div>
</div><!-- .menus-box -->
</div><!-- .triple-menu-box -->
最後に、CSSの54行目「/* 折り畳みメニューを追加する場合 */」から
78行目「/* ここまで */」のセレクタを変更。
今回のサンプルの例だと下記のようになります。(1~53行目は省略)
/* 折り畳みメニューを追加する場合 */
.triple-menu-box .menus-box #triple-check-box,
.triple-menu-box .menus-box #triple-check-box2,
.triple-menu-box .menus-box #triple-check-box3,
.triple-menu-box .menus-box #triple-check-box4 {
display: none;
}
.triple-menu-box .menus-box #triple-check-box:checked ~ .menu-text,
.triple-menu-box .menus-box #triple-check-box2:checked ~ .menu-text,
.triple-menu-box .menus-box #triple-check-box3:checked ~ .menu-text,
.triple-menu-box .menus-box #triple-check-box4:checked ~ .menu-text {
display: block;
}
.triple-menu-box .menus-box #triple-check-box:checked ~ .menu-label-title span:nth-child(2),
.triple-menu-box .menus-box #triple-check-box2:checked ~ .menu-label-title span:nth-child(2),
.triple-menu-box .menus-box #triple-check-box3:checked ~ .menu-label-title span:nth-child(2),
.triple-menu-box .menus-box #triple-check-box4:checked ~ .menu-label-title span:nth-child(2) {
transform: rotate(-45deg);
}
.triple-menu-box .menus-box #triple-check-box:checked ~ .menu-label-title span:nth-child(3),
.triple-menu-box .menus-box #triple-check-box2:checked ~ .menu-label-title span:nth-child(3),
.triple-menu-box .menus-box #triple-check-box3:checked ~ .menu-label-title span:nth-child(3),
.triple-menu-box .menus-box #triple-check-box4:checked ~ .menu-label-title span:nth-child(3) {
transform: rotate(45deg);
}
/* ここまで */
ボタンを「+」と「-」に変更する方法
<div class="menu-box">
<input id="check-box" type="checkbox">
<label class="menu-label-title" for="check-box">
<span class="menu-title">Q.クリック</span>
<span></span>
<span></span>
</label><!-- .menu-label-title -->
<div class="menu-text">A.テキスト</div>
</div><!-- .menu-box -->
.menu-box {
border: solid 1px #c0c0c0;
}
.menu-box .menu-label-title {
display: block;
padding: 20px 25px;
cursor: pointer;
position: relative;
}
.menu-box .menu-title {
display: block;
padding-right: 50px;
}
.menu-box .menu-label-title span:nth-child(2),
.menu-box .menu-label-title span:nth-child(3) {
display: block;
width: 16px;
border-bottom: solid 1px #c0c0c0;
position: absolute;
top: 50%;
right: 25px;
transform: translateY(-50%);
-webkit-transform: translateY(-50%);
-ms-transform: translateY(-50%);
}
.menu-box .menu-label-title span:nth-child(2) {
transform: rotate(45deg);
right: 36px;
}
.menu-box .menu-label-title span:nth-child(3) {
transform: rotate(-45deg);
}
.menu-box .menu-text {
display: none;
padding: 20px 0;
margin: 0 25px;
border-top: dotted 1px #c0c0c0;
}
/* 折り畳みメニューを追加する場合 */
.menu-box #check-box {
display: none;
}
.menu-box #check-box:checked ~ .menu-text {
display: block;
}
.menu-box #check-box:checked ~ .menu-label-title span:nth-child(2) {
transform: rotate(-45deg);
}
.menu-box #check-box:checked ~ .menu-label-title span:nth-child(3) {
transform: rotate(45deg);
}
/* ここまで */
上記のCSSの
30~33行目
35~37行目
55~57行目
59~61行目の4箇所を下記のように変更。
.menu-box .menu-label-title span:nth-child(2) {
transform: rotate(90deg) !important;
right: 25px !important;
}
.menu-box .menu-label-title span:nth-child(3) {
transform: rotate(0deg) !important;
}
.menu-box #check-box:checked ~ .menu-label-title span:nth-child(2) {
display: none;
}
.menu-box #check-box:checked ~ .menu-label-title span:nth-child(3) {
transform: rotate(0deg);
}
HTML・CSS入門におすすめの1冊
アコーディオンをHTMLのみで実装する方法は以下の記事で紹介してます。
【CSS不要】HTMLのみでアコーディオン(開閉ボタン)を実装する方法
もくじ【サンプル】HTMLのみでアコーディオンメニューを実装【実装コード】HTMLのみでアコーディオンメニューを実装detailsタグとsummaryタグにCSS当ててデザインを調整【サンプル】CSS ...
アコーディオンをjQueryで実装する方法は以下の記事で紹介してます。
【jQuery】アコーディオン(開閉ボタン)を実装する方法
もくじjQueryを使用したアコーディオンサンプルjQueryを使用したアコーディオンコピペ用コード使用方法 Q&A動かないのですが、どうすれば良いですか?アコーディオンの追加方法は?レスポンシブに対 ...
アコーディオンをJavaScriptで実装する方法は以下の記事で紹介してます。
【JavaScript】jQuery未使用でアコーディオン(開閉ボタン)を実装する方法
もくじJavaScriptを使用したアコーディオンサンプルJavaScriptを使用したアコーディオンコピペ用コード使用方法 Q&Aアコーディオンの追加方法は?一つ目のアコーディオンを開いた状態にする ...
もみじ
Web製作未経験でも読みやすい構成で、初学者でも安心して学習することができます。
実践的な内容を学ぶことができ解説も丁寧で分かりやすく、基礎的な内容はこの1冊で学ぶことができます。