React + CSSでサイドバーの表示/非表示を実装したいんダ!!!!
geDem
こんな感じのサイドバーが欲しい!!!
ソースコード
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 秒で表示/非表示が切り替えられるようになっています。
🙂↕️最後まで読んでいただきありがとうございます🙂↕️