academy.of.webdesign

academy.of.webdesign

Sidebar Menu

HTML

  
<!DOCTYPE html>
<html lang="de">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Side Navigation</title>
    <link rel="stylesheet" href="style.css">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">

</head>

<body>

    <div class="menu">
        <div class="wrapperTop"></div>
        <div class="wrapperIconText">
            <div class="line"></div>
            <div class="menuText">Home</div>
        </div>
        <div class="wrapperIconText">
            <div class="line"></div>
            <div class="menuText">Kontakt</div>
        </div>
        <div class="wrapperIconText">
            <div class="line"></div>
            <div class="menuText">Einstellungen</div>
        </div>
        <div class="wrapperIconText">
            <div class="line"></div>
            <div class="menuText">Favouriten</div>
        </div>
    </div>

    <div class="sideMenu">

        <div class="arrow">
            <i class="fa-solid fa-chevron-right"></i>
        </div>

        <div class="wrapperTop">
            <img src="logo.png" alt="Logo">
        </div>

        <div class="flexMenuIcon">
            <div class="wrapperIconText">
                <i class="fa-solid fa-house"></i>
            </div>
            <div class="wrapperIconText">
                <i class="fa-solid fa-envelope"></i>
            </div>
            <div class="wrapperIconText">
                <i class="fa-solid fa-gear"></i>
            </div>
            <div class="wrapperIconText">
                <i class="fa-solid fa-heart"></i>
            </div>

        </div>

        <div class="share">
            <i class="fa-brands fa-facebook-messenger"></i>
            <i class="fa-brands fa-whatsapp"></i>
        </div>

    </div>

    <script src="main.js"></script>
</body>

</html>

  

CSS

  
* {
    box-sizing: border-box;
}

body {
    background: lightblue;
    font-family: sans-serif;
    margin: 0;
}

img {
    width: 65px;
}

.sideMenu {
    background-color: lightgrey;
    position: fixed;
    top: 0;
    bottom: 0;
    left: 0;
    width: 65px;
    border-bottom-right-radius: 40px;
    transition: 1s;
}

.sideMenuOpen {
    border-bottom-right-radius: 0px;
}

.arrow {
    position: absolute;
    top: 50px;
    right: -15px;
    width: 30px;
    height: 30px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    background: rgb(85, 85, 85);
}

.wrapperTop {
    height: 100px;
}

.wrapperIconText {
    height: 100px;
    position: relative;
    display: flex;
    align-items: center;
}

.wrapperIconText i {
    font-size: 2em;
    padding: 10px;
    transition: 0.5s;
    border-radius: 5px;
}

.flexMenuIcon {
    display: flex;
    flex-direction: column;
    align-items: center;
}

.wrapperIconText i:hover {
    background-color: darkgrey;
}

.share {
    position: absolute;
    bottom: 20px;
    left: 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    font-size: 1.5em;
    width: 100%;

}

.share i {
    padding: 8px 0;
    transition: 0.5s;
}

.share i:hover {
    opacity: 0.5;
}

.menu {
    position: absolute;
    left: 65px;
    top: 0;
    bottom: 0;
    background-color: darkgrey;
    box-shadow: inset 0 -3em 3em rgba(0, 0, 0, 0.1);
    overflow: hidden;
    width: 0;
    transition: 1s;
}

.line {
    width: 100%;
    height: 1px;
    background: lightgrey;
    position: absolute;
    top: 0;
    right: 0;
    left: 0;
}

.menu .wrapperIconText:last-child::after {
    content: "";
    height: 1px;
    background: lightgrey;
    position: absolute;
    bottom: 0;
    right: 0;
    left: 0;

}

.menuText {
    font-weight: bold;
    font-size: 1.4em;
    padding: 10px;
    border-radius: 5px;
    width: 100%;
    transition: 0.5s;
}

.menuText:hover {
    background: lightgrey;
}

.sichtbar {
    animation: show 1s linear forwards;
    padding: 0 10px;
}

@keyframes show {
    0% {
        width: 0;
    }

    100% {
        width: 200px;
    }
}

.sichtbarRev {
    animation: showRev 1s linear forwards;
    padding: 0;
}

@keyframes showRev {
    0% {
        width: 200px;
    }

    100% {
        width: 0;
    }
}


.arrowMove {
    animation: arrowMo 1s linear forwards;
}

@keyframes arrowMo {
    0% {
        right: -15px;
        transform: rotate(0);
    }

    100% {
        right: -215px;
        transform: rotate(180deg);
    }
}

.arrowMoveRev {
    animation: arrowMoRev 1s linear forwards;
}

@keyframes arrowMoRev {
    0% {
        right: -215px;
        transform: rotate(180deg);
    }

    100% {
        right: -15px;
        transform: rotate(0);
    }
}

JS

  
let arrow = document.querySelector(".arrow");
let menu = document.querySelector(".menu");
let sideMenu = document.querySelector(".sideMenu");

arrow.addEventListener("click", () => {
    sideMenu.classList.toggle("sideMenuOpen");

    if (!menu.classList.contains("sichtbar")) {

        menu.classList.add("sichtbar");
        menu.classList.remove("sichtbarRev");
        arrow.classList.add("arrowMove");
        arrow.classList.remove("arrowMoveRev");
    }

    else {

        menu.classList.remove("sichtbar");
        menu.classList.add("sichtbarRev");
        arrow.classList.remove("arrowMove");
        arrow.classList.add("arrowMoveRev");
    }
})