引き続き、プロフィールページを作成していきます。
技術スタックは下記の通りです。
- nuxt.js
- SCSS
- Tailwind CSS
今回はヘッダーナビゲーションの改善を行います。
ヘッダーナビゲーションのモーダル化
前回Responsive対応を行なったので、今回はヘッダーナビゲーションもスマートフォン向けに改善します。
完成イメージは下記の通りです。
バツ印にはアニメーションをつけます。
- template
<div class="nav-modal flex justify-center items-center" :class="navClass" @click="$emit('close')" > <ul class="ul flex flex-col justify-between"> <li v-for="link in links" :key="link.label"> <a @click="$emit('jump', link.href)">{{ link.label }}</a> </li> </ul> </div>
.nav-modal { position: fixed; height: 100%; width: 100%; z-index: 9000; background-color: rgba(255, 255, 255, 0.9); transition: all 0.5s; opacity: 0; pointer-events: none; &.show { opacity: 1; pointer-events: auto; transition: all 0.5s; } * { font-size: 30px; } a { cursor: pointer; text-decoration: none; } } .ul { height: 40%; }
ヘッダー固定化
ヘッダーを固定化して、ページのどの位置からでも好きな位置に移動できるようにします。
下記のようなイメージです。
ヘッダー固定化自体は単にposition: fixed;
と指定してます。
工夫しているのは、メインイメージを通り過ぎた後は、ヘッダーの背景色を緑にしているところです。
色は、メインイメージからスポイトで取り出して設定しています。
mounted() { window.addEventListener('scroll', () => { const header = document.querySelector('.hero-image') this.isScrolled = window.scrollY > header.clientHeight - 50 }) },
.header { z-index: 8000; .header-wrap { & > * { transition: 1s; } } &.scrolled { .header-wrap { & > * { background-color: $main-1; } } } }
スムーススクロール
ヘッダーナビゲーションのリンク移動を、スクロールで行う機能を実装しました。
下記のようなイメージです。
scrollLink(href) { const target = document.querySelector(href) const top = target.offsetTop - 30; window.scrollTo({ top, behavior: 'smooth', }) },
下記のページを参考にさせていただきました。
スムーススクロールとは?jQuery・CSS・JavaScriptそれぞれでの使用方法について詳しく解説! | .NETコラム
Pull Request
https://github.com/nek0meshi/profile/pull/10
https://github.com/nek0meshi/profile/pull/11
まとめ
細かな修正ですが、こういうところが揃うとかなり雰囲気が良くなるなと思いました。