2024.10.30
【Webデザイン】サイドバー

UnsplashAlex Padurariuが撮影した写真

はじめに

jQueryを使ったサイドバーのコードです。

便利なので個人的なメモも兼ねて記事にしました。

完成形:デモ

右上の「三」もしくは「✖」アイコンをクリックしてください。

  • ホーム
  • 企業情報
  • 採用情報
  • X
  • Instagram
  • Facebook

フォルダ構成

以下のようにフォルダ、ファイルを作成して、以降のコードをそれぞれのファイルにコピペすると動きます。

app/
┣ sidebar.html
┣ css
   ┗ sidebar.css
┗ js
   ┗ sidebar.js

コード

sidebar.html、sidebar.css、sidebar.jsそれぞれのコードです。

sidebar.html

<!doctype html>
<html lang="ja">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Sample</title>

    <!-- リセットCSS読み込み -->
    <link rel="stylesheet" href="https://unpkg.com/destyle.css@3.0.2/destyle.min.css">

    <!-- オリジナルのCSS読み込み -->
    <link rel="stylesheet" href="css/sidebar.css">

    <!-- jQuery読み込み -->
    <script src="https://code.jquery.com/jquery-3.7.1.min.js" integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=" crossorigin="anonymous"></script>

    <!-- オリジナルのJS読み込み -->
    <script src="js/sidebar.js"></script>
</head>

<body>
    <header>
            <!-- ヘッダー内左側 -->
            <h1 class="header__logo">Sample</h1>
    
            <!-- ヘッダー内右側 -->
            <div class="header__menu">
                <div class="header__menu-button">
                    <button class="header__menu-trigger" id="header__menu">
                        <span></span>
                        <span></span>
                        <span></span>
                    </button>
                </div>
            </div>
    
            <!-- サイドバー /////////////////////////////////////// -->
            <aside>
                <ul class="campany-menu">
                    <li>PICK UP</li>
                    <li>FEATURE</li>
                    <li>CONTACT</li>
                </ul>
                <ul class="sns-menu">
                    <li>Twitter</li>
                    <li>facebook</li>
                    <li>instagram</li>
                </ul>
            </aside>
            <div id="mask"></div>
        </header>
</body>

</html>

sidebar.css

root {
    --header-height: 80px;
}

/* ヘッダーのスタイル /////////////////////////////////////////// */
header {
    height: var(--header-height);
    padding: 0 40px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    position: sticky;
    top: 0;
    left: 0;
    background-color: #fff;
    z-index:10;
}
.header__bottom-spacer{
    height: var(--header-height);
}
.header__logo {
    font-size: 36px;
}
.header__menu-trigger,
.header__menu-trigger span {
    display: inline-block;
    transition: all 0.4s;
    box-sizing: border-box;
}
.header__menu-trigger {
    position: relative;
    top: 0;
    right: 0;
    width: 30px;
    height: 22px;
    cursor: pointer;
    z-index: 30; 

}
.header__menu-trigger span {
    position: absolute;
    left: 0;
    width: 100%;
    height: 2px;
    background-color: #121212;
}
.header__menu-trigger.active span{
    background-color: white;
}
.header__menu-trigger span:nth-of-type(1) {
    top: 0;
}
.header__menu-trigger span:nth-of-type(2) {
    top: 10px;
}
.header__menu-trigger span:nth-of-type(3) {
    bottom: 0;
}
#header__menu.active span:nth-of-type(1) {
    transform: translateY(10px) rotate(-315deg);
}
#header__menu.active span:nth-of-type(2) {
    opacity: 0;
}
#header__menu.active span:nth-of-type(3) {
    transform: translateY(-10px) rotate(315deg);
}


/* サイドバーのスタイル//////////////////////////////////////////////// */
aside {
    padding: 50px 30px;
    width: 300px;
    height: 100vh;
    position: absolute;
    top: 0;
    left: -300px;
    z-index: 30;
    background-color: rgba(0, 0, 0, 0.9);
    color: #fff;
    transition: all 0.5s ease;
    overflow: auto;
}
aside.active {
    left: 0;
    background-color: rgba(0, 0, 0, 1.0);
}
#mask {
    position: absolute;
    top: 0;
    left: 0;
    z-index: 20;
    cursor: pointer;
}
#mask.active {
    width: 100vw;
    height: 100vh;
    background-color: rgba(0, 0, 0, 0.9);
}
.campany-menu{
    margin-bottom: 100px;
    border-top: 1px solid #fff;
}
.campany-menu li{
    padding: 20px 0;
    border-bottom: 1px solid #fff;
}
.sns-menu li{
    margin: 10px 0;
}

sidebar.js

$(document).ready(function () {
    // ハンバーガーメニュー
    $('.header__menu-trigger, #mask').on('click', function () {
        $('.header__menu-trigger').toggleClass('active');
        $('aside').toggleClass('active');
        $('#mask').toggleClass('active');
        return false;
    });
});

引用サイト

以下のサイトでいろいろなハンバーガーメニューが紹介されていたので、使わせていただきました。

 https://photopizza.design/hamburger_menu_technique/