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

パーツ番号 03-08-09 ・ JavaScript使用

扇状に展開するファンメニュー

右下のボタンを起点に、メニュー項目が扇を広げるように弧を描いて現れる演出。WordPressの旅行・イベント系サイトで遊び心のあるモバイルメニューに使えます。

mobilejs

プレビュー

ソースコード

HTML

<div class="d03-08-09-frame">
          <div class="d03-08-09-bar">
            <span class="d03-08-09-logo">Travel</span>
          </div>
          <div class="d03-08-09-fan">
            <a class="d03-08-09-item" data-i="0" href="#">ツアー</a>
            <a class="d03-08-09-item" data-i="1" href="#">宿泊</a>
            <a class="d03-08-09-item" data-i="2" href="#">レビュー</a>
            <a class="d03-08-09-item" data-i="3" href="#">予約</a>
            <button class="d03-08-09-burger" type="button" aria-label="メニューを開く" aria-expanded="false">
              <span></span><span></span><span></span>
            </button>
          </div>
        </div>

CSS

.d03-08-09-frame{position:relative;width:100%;max-width:260px;height:210px;margin:0 auto;background:linear-gradient(160deg,#ecfeff,#f0f9ff);border-radius:16px;overflow:hidden;box-shadow:0 10px 26px rgba(30,41,59,.14);border:1px solid #e5e7eb}
        .d03-08-09-bar{padding:14px 16px}
        .d03-08-09-logo{font-weight:800;font-size:13px;color:#0369a1;letter-spacing:.02em}
        .d03-08-09-fan{position:absolute;right:20px;bottom:20px;width:44px;height:44px}
        .d03-08-09-burger{position:absolute;top:0;left:0;width:44px;height:44px;border:0;border-radius:50%;background:#0284c7;box-shadow:0 8px 18px rgba(2,132,199,.35);cursor:pointer;z-index:5}
        .d03-08-09-burger span{position:absolute;left:12px;width:20px;height:2.4px;background:#fff;border-radius:2px;transition:transform .3s,opacity .3s,top .3s}
        .d03-08-09-burger span:nth-child(1){top:15px}
        .d03-08-09-burger span:nth-child(2){top:21px}
        .d03-08-09-burger span:nth-child(3){top:27px}
        .d03-08-09-fan.open .d03-08-09-burger span:nth-child(1){top:21px;transform:rotate(45deg)}
        .d03-08-09-fan.open .d03-08-09-burger span:nth-child(2){opacity:0}
        .d03-08-09-fan.open .d03-08-09-burger span:nth-child(3){top:21px;transform:rotate(-45deg)}
        .d03-08-09-item{position:absolute;top:0;left:0;width:44px;height:44px;border-radius:50%;background:#fff;border:1.5px solid #bae6fd;color:#0369a1;text-decoration:none;font-size:10.5px;font-weight:700;display:flex;align-items:center;justify-content:center;text-align:center;opacity:0;transform:translate(0,0) scale(.3);transition:transform .4s cubic-bezier(.34,1.35,.4,1),opacity .3s;z-index:2}
        .d03-08-09-fan.open .d03-08-09-item{opacity:1}
        .d03-08-09-fan.open .d03-08-09-item[data-i="0"]{transform:translate(-52px,-8px) scale(1)}
        .d03-08-09-fan.open .d03-08-09-item[data-i="1"]{transform:translate(-40px,-52px) scale(1)}
        .d03-08-09-fan.open .d03-08-09-item[data-i="2"]{transform:translate(-4px,-84px) scale(1)}
        .d03-08-09-fan.open .d03-08-09-item[data-i="3"]{transform:translate(38px,-96px) scale(1)}
        .d03-08-09-item:hover{background:#0284c7;color:#fff}

JavaScript

(function(){
        var root=document.getElementById('item-03-08-09');
        var burger=root.querySelector('.d03-08-09-burger');
        var fan=root.querySelector('.d03-08-09-fan');
        burger.addEventListener('click',function(){
          var isOpen=fan.classList.toggle('open');
          burger.setAttribute('aria-expanded',isOpen?'true':'false');
        });
      })();

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