- Web Engineer
- アウトバウンド営業
- Webエンジニア(経験者)
- Other occupations (18)
- Development
- Business
はじめに
スムーズスクロール対応のため、html要素にscroll-behavior: smooth;
のclass(以下、TailwindCSSのscroll-smooth)を付与したい時があります。ただ、scroll-behavior: auto;
を使いたいページを要求されたらどうするか心配になるものです。
Next.js App router
Next.js App routerでは<html>
タグをroot layoutで記述する必要がありますが、Route Groupsを使い複数のroot layoutをを用いることができます。
app
├── (scroll-auto)
│ └── layout.tsx
└── (scroll-smooth)
└── layout.tsx
Next.js Pages router
Next.js Pages routerではCustom Documentで<html>
のclassを付与できます。 しかし、アプリで使えるCustom Documentは1つのみです。
迂回策: クライアントでhtmlのclassを修正するコンポーネントで対応する
クライアントでhtmlのclassを上書きすることでもよければ、以下のようなコンポーネントを対応ページに入れることで対応できます。cleanup関数にscroll-smooth
を戻すことで、こちらのコンポーネントがあるページのみscroll-smooth
の反映されず対応できます。
export const RemoveScrollSmooth = () => {
useEffect(() => {
document.documentElement.classList.remove("scroll-smooth");
return () => {
document.documentElement.classList.add("scroll-smooth");
};
}, []);
return null
};
番外: htmlをラッピングし、useStateとContext APIで制御する
Next.js Pages routerでは使えないですが、App routerなどで複数のlayout対応するまでも無いのであり、直接DOM操作したく無いことであれば、htmlをラッピングし、中でscroll behaviorのclassを状態として管理することもできます。<RemoveScrollSmooth />
と同様に、<ScrollAuto />
をscroll-auto
を適用したいページに入れると<ScrollAuto />
が含まれている箇所のみクライアント側でclassを更新します。
…
記事の続きは下のURLをクリック!
https://rightcode.co.jp/blogs/51857
エンジニア積極採用中です!
現在、WEBエンジニア、モバイルエンジニア、デザイナー、営業などを積極採用中です!
採用ページはこちら:https://rightcode.co.jp/recruit
社員の声や社風などを知りたい方はこちら:https://rightcode.co.jp/blogs?category=life
社長と一杯飲みながらお話しませんか?(転職者向け)
特設ページはこちら: https://rightcode.co.jp/gohan-sake-president-talk
もっとワクワクしたいあなたへ
現在、ライトコードでは「WEBエンジニア」「モバイルエンジニア」「ゲームエンジニア」、「デザイナー」「WEBディレクター」「営業」などを積極採用中です!
ライトコードは技術力に定評のある受託開発をメインにしているIT企業です。
有名WEBサービスやアプリの受託開発などの企画、開発案件が目白押しの状況です。
- もっと大きなことに挑戦したい!
- エンジニアとしてもっと成長したい!
- モダンな技術に触れたい!
現状に満足していない方は、まずは、エンジニアとしても第一線を走り続ける弊社代表と気軽にお話してみませんか?
ネット上では、ちょっとユルそうな会社に感じると思いますが(笑)、
実は技術力に定評があり、沢山の実績を残している会社ということをお伝えしたいと思っております。
- ライトコードの魅力を知っていただきたい!
- 社風や文化なども知っていただきたい!
- 技術に対して熱意のある方に入社していただきたい!
一度、【Wantedly内の弊社ページ】や【コーポレートサイト】をのぞいてみてください。