HTML&CSS WEBデザイン

【コピペOK】Q&Aアコーディオンの作成方法

よくある質問を作成する際、コピーで使えるものが欲しかったので作ってみました!

アコーディオンメニューの作り方(cssのみ)

サンプル
A 内容1
A 内容2
A 内容3
HTML
 <div class="faq">
        <dl>
            <input id="qa1" type="checkbox">
            <label for="qa1">
                <dt>
                    <span>Q</span>
                    タイトル1
                </dt>
            </label>
            <dd>
                <span>A</span>
                内容1
            </dd>
        </dl>
    
        <dl>
            <input id="qa2" type="checkbox">
            <label for="qa2">
                <dt>
                    <span>Q</span>
                    タイトル2
                </dt>
            </label>
            <dd>
                <span>A</span>
                内容2
            </dd>
        </dl>
    
        <dl>
            <input id="qa3" type="checkbox">
            <label for="qa3">
                <dt>
                    <span>Q</span>
                    タイトル3
                </dt>
            </label>
            <dd>
                <span>A</span>
                内容3
            </dd>
        </dl>
    </div>
CSS
.faq{
    max-width: 800px;
    margin: 0 auto;
}

.faq dl,
.faq dt,
.faq dd {
margin: 0;
padding: 0;
}

.faq dl+dl {
margin-top: 1rem;
}

.faq dt,
.faq dd {
padding: 10px;
}

.faq dl {
position: relative;
overflow: hidden;
}

.faq dl>input {
display: none;
}

.faq dt {
position: relative;
z-index: 1;
padding-right: 40px;
padding-left: 2.5em;
cursor: pointer;
background: #e6f3ff;
transition: .4;
}

.faq dd {
position: absolute;
visibility: hidden;
transform: translateY(-100%);
transition: .4s;
background: #f0f8ff;
border-top: none;
padding-left: 2.5em;

}

.faq dl>input:checked+label+dd {
position: relative;
visibility: visible;
transform: translateY(0);
}

.faq dt::before {
content: '';
position: absolute;
width: 20px;
height: 3px;
top: 50%;
right: 10px;
background: #333;
transform: translateY(-50%);
}

.faq dt::after {
content: '';
position: absolute;
top: 50%;
right: 10px;
width: 20px;
height: 3px;
background: #333;
transition: .4s;
transform: translateY(-50%) rotate(90deg);
}

.faq dl>input:checked+label>dt::after {
transform: translateY(-50%) rotate(180deg);
}

.faq dt span,
.faq dd span {
position: absolute;
display: flex;
align-items: center;
justify-content: center;
background: #459be6;
color: #fff;
top: 50%;
left: .5em;
width: 1.5em;
height: 1.5em;
transform: translateY(-50%);
}


.faq dd span {
top: 10px;
transform: translateY(0);
background-color: #e60000;
ポイント

<input id="qa1" type="checkbox">のidの名前と<label for="qa1">の名前 "qa1" を合わせたらOKです!

-HTML&CSS, WEBデザイン