div#app
    nav
        div.side
            a(href="#")
            a(href="#")
            a(href="#")
            a(href="#")
            a(href="#")
            a(href="#")
            a(href="#")
            a(href="#")
        div.top
            a(href="#")
            a(href="#")
            a(href="#")
            a(href="#")
            a(href="#")
    div#content
        header
            button.opennav
                .icon
View Compiled
$transitiontime:1s;

body {
    overflow:hidden;
    background:#3C3B3D;
    #app {
        --navigation-width:6rem;
        --navigation-height:6rem;
        min-height:100vh;
        nav {
            position: absolute;
            display: grid;
            grid-template-columns: var(--navigation-width) auto;
            grid-template-rows: var(--navigation-height) auto;
            grid-template-areas: "side top" "side .";
            >div {
                display: flex;
                margin:.5rem;
                a {
                    display: block;
                    width:calc(var(--navigation-width) - 2rem);
                    height:calc(var(--navigation-height) - 2rem);
                    margin:.5rem;
                    border-radius: .5rem;
                    background: #F5F7FA;
                    &:hover, &:focus {
                        background: #E6E9ED;
                    }
                }
            }
            .side {
                flex-direction: column;
                grid-area: side;
            }
            .top {
                grid-area: top;
                margin-left: -.5rem;
            }
        }
        #content {
            z-index:1;
            display: flex;
            flex-direction: column;
            position: absolute;
            top:0rem;
            left:0rem;
            min-height:100vh;
            width:100vw;
            border-top-left-radius: 0rem;
            background:white;
            box-shadow: 0 0 2rem -1rem rgba(0,0,0,.5);
            transition:border-top-left-radius $transitiontime cubic-bezier(0.5, 0, 0, 1) -.1s, top $transitiontime cubic-bezier(0.5, 0, 0, 1) -.1s, left $transitiontime cubic-bezier(0.5, 0, 0, 1) -.1s;
            header {
                display: flex;
                align-items: center;
                height:5rem;
                button.opennav {
                    position: relative;
                    height:4rem;
                    width:4rem;
                    margin:.5rem;
                    border: none;
                    border-radius: 1rem;
                    background: #323133;
                    .icon {
                        position: absolute;
                        top:50%;
                        left:50%;
                        width:2.5rem;
                        transform: translate(-50%, -50%) rotate(0deg);
                        &, &:before, &:after {
                            height:.25rem;
                            background:white;
                            border-radius: 1rem;
                            transition:$transitiontime cubic-bezier(0.5, 0, 0, 1) -.1s;
                        }
                        &:before, &:after {
                            content: '';
                            position: absolute;
                            left:0rem;
                            width:1.5rem;
                        }
                        &:before {
                            top: .9rem;
                            transform-origin: 1rem -.75rem;
                        }
                        &:after {
                            bottom:.9rem;
                            transform-origin: 1rem 1rem;
                        }
                    }
                }
            }
        }
        #content.open, nav:focus-within ~#content {
            top:var(--navigation-height);
            left:var(--navigation-width);
            border-top-left-radius: 1.5rem;
            button.opennav {
                .icon {
                    transform: translate(-50%, -50%) rotate(45deg);
                    &:before, &:after {
                        left:.25rem;
                    }
                    &:before {
                        transform: rotate(45deg);
                    }
                    &:after {
                        transform: rotate(-45deg);
                    }
                }
            }
        }
    }
}
View Compiled
$("button.opennav").click(function(){
    $("#content").toggleClass("open")
});
View Compiled

External CSS

  1. https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.min.css

External JavaScript

  1. https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js