geDemのアバターアイコン
geDem
 Blog
記事のカバー写真

React + CSSでサイドバーの表示/非表示を実装したいんダ!!!!

geDemのアバターアイコン
geDem
ペン

こんな感じのサイドバーが欲しい!!!

sidebar.gif

ソースコード

import { useState } from 'react';
import './App.css';

function App() {
  // 表示/非表示を切り替える状況変数
  const [showSidebar, setShowSidebar] = useState(false)

  // 表示/非表示を切り替える関数
  function handleClick() {
    setShowSidebar(!showSidebar)
  }

  return (
    <div>
      {/* コンテント */}
      <div className='content'>
        <h2>Content</h2>
        <button onClick={() => handleClick()}>サイドバーを表示</button>
      </div>

      {/* サイドバー */}
      {/* 三項演算子で、「showSidebar」がtrueの時は「sidebar-show」
                                      falseの時は「sidebar-hidden」*/}
      <div className={showSidebar ? 'sidebar sidebar-show' : 'sidebar sidebar-hidden'}>
        <h2>Sidebar</h2>
      </div>
    </div>
  );
}

export default App;

↑ 共通の「sidebar」と、表示時に適用する「sidebar-show」 非表示に適用する「sidebar-hidden」というクラス名を割り当てるようにしています。


body {
  margin: 0;
  /* サイドバーが画面右に表示されないように設定 */
  overflow-x: hidden;
}

.content {
  background-color: #c2d7bb;
  height: 800px;
}

h2 {
  margin: 0;
}


/* サイドバーのスタイル指定 */
.sidebar {
  width: 600px;
  position: absolute;
  top: 0;
  height: 100%;
  background-color: rgb(155, 135, 173);
}
/* サイドバー表示時 */
.sidebar-show {
  right: 0;
  transition: 0.5s;
}
/* サイドバー非表示時 */
.sidebar-hidden {
  right: -600px;
  transition: 0.5s;
}

↑ body に「overflow-x: hidden;」を適用し、画面外の要素を表示しないようにしています。 この指定をしないと、サイドバーが画面右に表示されてしまいます

「position: absolute」を記述することで、サイドバーの位置を絶対値で指定できるようになります。(なので、基本的に sidebar の div は html の中のどこに置いても正しく表示されます。) ここでは、「top: 0;」を指定し、「height: 100%;」とすることで、画面の上下いっぱいにサイドバーを表示しています。

また、サイドバー表示時と、非表示時で「right」の値を変えることで、画面右端からの距離を変えられるので、右からサイドバーが出てくるようになっています。 サイドバーの幅の値によって、非表示時の「right」の値を変えてください。

「transition: 0.5s」は、アニメーションの速度です。 0.5 秒で表示/非表示が切り替えられるようになっています。

🙂‍↕️最後まで読んでいただきありがとうございます🙂‍↕️