【コピペでOK】CSSだけでQ&Aプルダウンを作ってみよう!

記事
IT・テクノロジー
CSSだけでもする〜っとした動きは作れます。今回は質問欄を押したら、解答欄がスルスル〜っと出てくるようなものをCSSだけで作ってみます!



完成見本

https:// tsuyu0102.github.io/css-sample/faq-accordion/index.html

▼1200px幅
1200px.gif


▼601px幅
601.gif


▼600px幅(レスポンシブ対応にしました)
600.gif



html


<div class="container">
   <h2>Q&A</h2>
   <div class="qa-container">
    <input type="checkbox" id="q01" />
    <label for="q01">Q01:今日注文したらいつ届きますか?</label>
    <p>ご注文確定から5日前後となります。</p>
   </div>
   <div class="qa-container">
    <input type="checkbox" id="q02" />
    <label for="q02">Q02:送料はかかりますか?</label>
    <p>全国一律送料無料となっております。<br />※ただし購入商品が大型、またお届け先が沖縄及び離島・その他一部地域では追加料金を加算される場合がございます。また一部の商品に限り送料をいただく場合がございます。</p>
   </div>
   <div class="qa-container">
    <input type="checkbox" id="q03" />
    <label for="q03">Q03:支払い方法は何がありますか?</label>
    <p>
     ・代金引換 (お買い上げ金額に応じて、別途代引手数料がかかります。)<br />
     ・銀行振込 (ご入金確認後の発送になります)<br />
     ・各種クレジットカード<br />でお支払いいただけます。
    </p>
   </div>
  </div>

⭐️質問項目を増やしたかったら、div.qa-containerをまるっとコピペしてください。そしたら、inputの中のidとlabelのforの中を他とは違う文字に揃えて変更してください。
⭐️labelタグ内に質問を書き、pタグ内にクリックした後に表示させる回答を書きます。



CSS


<style>
   body {
    background: skyblue;
   }
   .container {
    position: relative;
    background: #fff;
    margin: 3rem;
    padding: 2rem 4rem;
   }
   .container h2 {
    text-align: center;
   }
   .qa-container {
    text-align: justify;
    margin-bottom: 0.5rem;
   }
   .qa-container label {
    display: block;
    position: relative;
    background: #f5f5f5;
    padding: 1rem 2.5rem 1rem 0.5rem;
    cursor: pointer;
   }
   .qa-container label:after {
    content: '';
    display: block;
    width: 0.5rem;
    height: 0.5rem;
    border-right: solid 2px #ccc;
    border-bottom: solid 2px #ccc;
    transform: rotate(45deg) translate(100%, 100%);
    position: absolute;
    top: 0;
    right: 0;
    margin-top: 0.5rem;
    margin-right: 1rem;
   }
   .qa-container input:checked ~ label:after {
    transform: rotate(-135deg) translate(-100%, -100%);
    margin-top: 0.75rem;
   }
   .qa-container input {
    display: none;
   }
   .qa-container p {
    height: 0px;
    opacity: 0;
    transition: opacity 0.3s ease-in-out, height 0.5s ease-in-out, margin 0.5s ease-in-out;
    margin: 0 0.5rem;
   }
   .qa-container input:checked ~ p {
    height: 150px;
    opacity: 1;
    transition: opacity 0.3s 0.2s ease-in-out, height 0.3s ease-in-out;
    margin: 1rem 0.5rem;
   }
   @media (max-width: 600px) {
    .container {
     margin: 0;
     padding: 2rem 1rem;
    }
    .qa-container input:checked ~ p {
     height: 200px;
    }
   }
  </style>

⭐️@は半角のアットマークに差し替えてください。
⭐️label:afterに右側の山形アイコン[ ^ }を書いています。



【参考サイト】
【CSS3】transition でプロパティを複数指定する書き方
https:// becolomochi.hatenablog.com/entry/2017/12/27/160330

【CSS】 子孫セレクタ、子セレクタ、隣接、複数など忘れがちなセレクタをまとめました<前編>
https:// takayamato.com/selector-01/



いかがでしたか?もしよかったら使ってみてくださいね🌷
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す