当サイトは、アフィリエイト広告を利用しています

reactでscrollbarのスタイルを変更してみる

作成日:2022月03月09日
更新日:2022年09月19日

reactでscrollbarのスタイルを変更してみる。

scrollのスタイルの変更方法

cssでwebkitを使う 下記の三つをセットでscrollがある要素に設定する

::-webkit-scrollbar

scrollbarの幅を設定する。
横のscrollbarの場合は高さを定義する
またこれを書かないと下記の二つを書いても反映されなかった...

css
/* スクロールバーのベース */
.samoleClass::-webkit-scrollbar {
width: 10px;
}

::-webkit-scrollbar-track

scrollbarの背景部分を設定する

css
.samoleClass::-webkit-scrollbar-track {
background-color: #e4e4e4;
border-radius: 100px;
}

::-webkit-scrollbar-thumb

scrollbarのサムのスタイルを定義する。
サムとはユーザーが動かすやつのこと

css
/* スクロールバーの動かすやつ */
.test::-webkit-scrollbar-thumb {
background-color: #454a96aa;
border-radius: 100px;
}

reactでscrollbarのスタイルを変更する

reactでscrollbarのスタイルを変更する場合のサンプルをいくつか書いてみる

cssを使う場合

App.jsx
import "./styles.css";
export default function App() {
return (
<div>
{/* css */}
<h1>cssで定義</h1>
<div className="oyaStyle test">
<h2 className="childStyle">bbbb</h2>
<h2 className="childStyle">bbbb</h2>
<h2 className="childStyle">bbbb</h2>
<h2 className="childStyle">bbbb</h2>
<h2 className="childStyle">bbbb</h2>
<h2 className="childStyle">bbbb</h2>
</div>
</div>
);
}
styles.css
.oyaStyle {
height: 200px;
overflow-y: scroll;
}
.childStyle {
border: 1px solid black;
text-align: center;
}
/* スクロールバーのベース */
.test::-webkit-scrollbar {
width: 10px;
}
/* スクロールバーの下のやつ */
.test::-webkit-scrollbar-track {
background-color: #e4e4e4;
border-radius: 100px;
}
/* スクロールバーの動かすやつ */
.test::-webkit-scrollbar-thumb {
background-color: #454a96aa;
border-radius: 100px;
}

CSSModuleで行う場合

cssmoduleのためimportしてclassNameに指定して使う。 moduleのためclassNameに設定する場合は{}で囲む

App.jsx
import styles from "./styles.module.css";
export default function App() {
return (
<div>
{/* CSSmodule */}
<h1>CSSmoduleで定義</h1>
<div className={`${styles.oyaStyle} ${styles.test}`}>
<h2 className={styles.childStyle}>aaaa</h2>
<h2 className={styles.childStyle}>aaaa</h2>
<h2 className={styles.childStyle}>aaaa</h2>
<h2 className={styles.childStyle}>aaaa</h2>
<h2 className={styles.childStyle}>aaaa</h2>
<h2 className={styles.childStyle}>aaaa</h2>
<h2 className={styles.childStyle}>aaaa</h2>
</div>
</div>
);
}
styles.module.css
.oyaStyle {
height: 200px;
overflow-y: scroll;
}
.childStyle {
border: 1px solid black;
text-align: center;
}
/* スクロールバーのベース */
.test::-webkit-scrollbar {
width: 10px;
}
/* スクロールバーの下のやつ */
.test::-webkit-scrollbar-track {
background-color: #e4e4e4;
border-radius: 100px;
}
/* スクロールバーの動かすやつ */
.test::-webkit-scrollbar-thumb {
background-color: #454a96aa;
border-radius: 100px;
}

gatsbyでemotionで行う場合

reactのgatsbyでemotionを使って行う場合のサンプル
CSS in jsのためjsとして書いている

特定の要素にだけ適用する場合

その要素に指定する

jsx
<div
css={theme => [
css`
background-color: ${theme.background};
box-shadow: 0 0.25rem 1.25rem ${theme.color};
margin-top: 0px;
height: 56vh;
&::-webkit-scrollbar {
width: 10px;
}
&::-webkit-scrollbar-track {
background-color: #e4e4e4;
border-radius: 100px;
}
&::-webkit-scrollbar-thumb {
background-color: #454a96aa;
border-radius: 100px;
}
`,
tw`rounded-b-lg overflow-hidden flex-col items-start overflow-y-auto`,
]}
>
<MdxIndex items={articleTags} />
</div>

全体に適用する場合

gatsby-browser.jsにemotinoのGlobalを使って
書いておけばサイト内の全scrollに反映される

gatsby-browser.js
import 'firebase/auth';
import 'firebase/firestore';
import 'firebase/functions';
import React from 'react';
import { Global, css } from '@emotion/react';
import Prism from 'prism-react-renderer/prism';
import { Login } from './src/components/Login';
import Layout from './src/layout_emotion';
(typeof global !== 'undefined' ? global : window).Prism = Prism; // gotta do this one otherwise it'll say Prism is not defined
require('prismjs/components/prism-java');
export const wrapPageElement = ({ element }) => {
return (
<Login>
<Global
styles={css`
html,
body {
margin: 0px;
}
&::-webkit-scrollbar {
width: 10px;
}
&::-webkit-scrollbar-track {
background-color: #e4e4e4;
border-radius: 100px;
}
&::-webkit-scrollbar-thumb {
background-color: #454a96aa;
border-radius: 100px;
}
`}
/>
<Layout>{element}</Layout>
</Login>
);
};

参考

CSSでスクロールバーをカスタマイズする方法を徹底解説 -古いCSSと新しいCSSでの実装のポイント

スタイル付きコンポーネントを使用してスライダーサムをスタイリングする

Emotionを使いこなす

新着記事

タグ別一覧
top