パーツ番号 08-10-02 ・ JavaScript使用
Tab移動で滑るハイライトメニュー
Tabキーでリンクを移動するたびに下線バーが追従してスライドします。WordPressのグローバルナビのキーボード操作の視認性向上に役立ちます。
プレビュー
ソースコード
HTML
<nav class="d08-10-02-nav" aria-label="サイト内メニュー">
<a class="d08-10-02-link" href="#">ホーム</a>
<a class="d08-10-02-link" href="#">サービス</a>
<a class="d08-10-02-link" href="#">料金</a>
<a class="d08-10-02-link" href="#">お問い合わせ</a>
<span class="d08-10-02-bar" aria-hidden="true"></span>
</nav>CSS
.d08-10-02-nav{position:relative;display:flex;flex-wrap:wrap;gap:20px;padding:14px 4px 12px}
.d08-10-02-link{position:relative;color:#3a3d4a;text-decoration:none;font-size:13.5px;font-weight:600;padding-bottom:8px;outline:none;transition:color .2s}
.d08-10-02-link.is-active{color:#6a5cff}
.d08-10-02-bar{position:absolute;bottom:0;left:0;height:2.5px;width:0;background:linear-gradient(90deg,#6a5cff,#a44bff);border-radius:2px;transition:transform .3s cubic-bezier(.3,1,.4,1),width .3s,opacity .2s;opacity:0}
.d08-10-02-bar.is-show{opacity:1}JavaScript
(function(){
var nav=document.querySelector('#item-08-10-02 .d08-10-02-nav');if(!nav)return;
var bar=nav.querySelector('.d08-10-02-bar');
var links=[].slice.call(nav.querySelectorAll('.d08-10-02-link'));
links.forEach(function(a){a.addEventListener('click',function(e){e.preventDefault();});});
function move(link){
bar.style.width=link.offsetWidth+'px';
bar.style.transform='translateX('+link.offsetLeft+'px)';
bar.classList.add('is-show');
links.forEach(function(l){l.classList.toggle('is-active',l===link);});
}
nav.addEventListener('focusin',function(e){
if(e.target.classList&&e.target.classList.contains('d08-10-02-link'))move(e.target);
});
nav.addEventListener('focusout',function(e){
if(!nav.contains(e.relatedTarget)){
bar.classList.remove('is-show');
links.forEach(function(l){l.classList.remove('is-active');});
}
});
})();クラス名 .d08-10-02 は本ライブラリ内での識別用です。複数のパーツを同じページで使う場合は、重複しないよう名前を変更してください。