← 動的パーツギャラリーへ戻る

パーツ番号 04-02-06 ・ JavaScript使用

カスタムドロップダウン

クリックで開閉する装飾されたセレクト風メニュー。標準のselectでは難しいデザインを、WordPressのフォームや絞り込みUIで実現できます。

clickjsinput

プレビュー

ソースコード

HTML

<div class="d04-02-06-dd">
          <button type="button" class="d04-02-06-btn" aria-expanded="false">
            <span class="d04-02-06-val">お問い合わせ項目を選択</span>
            <svg class="d04-02-06-arrow" viewBox="0 0 16 16" width="14" height="14" aria-hidden="true"><path d="M3 6l5 5 5-5" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>
          </button>
          <ul class="d04-02-06-list">
            <li>製品について</li>
            <li>お見積り依頼</li>
            <li>採用について</li>
            <li>その他</li>
          </ul>
        </div>

CSS

.d04-02-06-dd{position:relative;width:min(260px,100%)}
        .d04-02-06-btn{
          width:100%;display:flex;align-items:center;justify-content:space-between;
          gap:8px;padding:13px 16px;font-size:14px;color:#333;
          background:#fff;border:2px solid #d5d9e0;border-radius:10px;
          cursor:pointer;transition:border-color .25s;
        }
        .d04-02-06-dd.is-open .d04-02-06-btn{border-color:#4a6cf7}
        .d04-02-06-arrow{transition:transform .3s;color:#8a93a3;flex:0 0 auto}
        .d04-02-06-dd.is-open .d04-02-06-arrow{transform:rotate(180deg)}
        .d04-02-06-list{
          position:absolute;top:calc(100% + 6px);left:0;right:0;z-index:5;
          margin:0;padding:6px;list-style:none;background:#fff;
          border:1px solid #e2e6ee;border-radius:10px;
          box-shadow:0 10px 25px rgba(30,40,80,.15);
          opacity:0;visibility:hidden;transform:translateY(-8px);
          transition:opacity .25s,transform .25s,visibility .25s;
        }
        .d04-02-06-dd.is-open .d04-02-06-list{opacity:1;visibility:visible;transform:translateY(0)}
        .d04-02-06-list li{
          padding:10px 12px;font-size:14px;color:#444;border-radius:7px;cursor:pointer;
          transition:background .15s,color .15s;
        }
        .d04-02-06-list li:hover{background:#eef2ff;color:#4a6cf7}

JavaScript

(function(){
        var dd=document.querySelector('.d04-02-06-dd');
        if(!dd)return;
        var btn=dd.querySelector('.d04-02-06-btn');
        var val=dd.querySelector('.d04-02-06-val');
        btn.addEventListener('click',function(){
          var open=dd.classList.toggle('is-open');
          btn.setAttribute('aria-expanded',open?'true':'false');
        });
        dd.querySelectorAll('.d04-02-06-list li').forEach(function(li){
          li.addEventListener('click',function(){
            val.textContent=li.textContent;
            dd.classList.remove('is-open');
            btn.setAttribute('aria-expanded','false');
          });
        });
        document.addEventListener('click',function(e){
          if(!dd.contains(e.target)){
            dd.classList.remove('is-open');
            btn.setAttribute('aria-expanded','false');
          }
        });
      })();

クラス名 .d04-02-06 は本ライブラリ内での識別用です。複数のパーツを同じページで使う場合は、重複しないよう名前を変更してください。