Flexbox App Layout

Perfect layout for just about any app by utilizing Flexbox.

HTML

<link rel="stylesheet" href="https://storage.googleapis.com/code.getmdl.io/1.0.6/material.indigo-pink.min.css">
<script src="https://storage.googleapis.com/code.getmdl.io/1.0.6/material.min.js"></script>
<main>
    <header>
        <div class="branding">
            <div class="menu-button menu-toggle">
                <i class="material-icons">menu</i>
            </div>
            <img src="http://mirrors.creativecommons.org/presskit/logos/cc.logo.large.png" />
        </div>
        <div class="page-details">
            <div class="title">Page Title That Might Get Really Long Sometimes</div>
        </div>
        <div class="settings">
            <div class="menu-button profile">
                <i class="material-icons">person</i>
            </div>
            <div class="menu-button menu-toggle">
                <i class="material-icons">chat</i>
            </div>
        </div>
    </header>
    <app>
        <nav>
            <ul>
                <li><a href="#"><i class="material-icons">home</i>
                    <span>Home</span></a></li>
                <li><a href="#"><i class="material-icons">adb</i>
                    <span>Menu Item with a Long Name</span></a></li>
                <li><a href="#"><i class="material-icons">android</i>
                    <span>Android</span></a></li>
                <li><a href="#"><i class="material-icons">attachment</i>
                    <span>Attachments</span></a></li>
                <li><a href="#"><i class="material-icons">bookmark</i>
                    <span>Bookmarks</span></a></li>
                <li><a href="#"><i class="material-icons">star</i>
                    <span>Favorites</span></a></li>
                <li><a href="#"><i class="material-icons">build</i>
                    <span>Configuration</span></a></li>
                <li><a href="#"><i class="material-icons">cake</i>
                    <span>Birthday Party</span></a></li>
                <li><a href="#"><i...

SCSS

@import url('https://fonts.googleapis.com/icon?family=Material+Icons');

* {
    box-sizing: border-box;
}

body {
    margin: 0;
    padding: 0;
}

main {
    display: flex;
    flex-direction: column;
}

header { 
    z-index: 0;
    flex: 0 0 64px;
    display: flex;

    background: white;
    box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.24);

    .branding,
    .page-details,
    .settings {
        display: flex;
        align-items: center;
    }

    .branding {
        flex: 0 0 256px;
        order: 0;
        justify-content: flex-start;

        img {
            max-height: 32px;
            max-width: 175px;
        }
    }

    .page-details {
        flex: 1 1 100%;
        order: 1;
        padding: 0 24px;
        overflow: hidden;

        .title {
            overflow: hidden;
            white-space: nowrap;
            text-overflow: ellipsis;

            font-size: 20px;
            line-height: 24px;
        }
    }

    .settings {
        flex: 0 0 256px;
        order: 2;
        justify-content: flex-end;
    }
}

.menu-button {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 48px;
    height: 48px;
    margin: 8px;

    &:hover {
        background: rgba(0,0,0,0.08);
        cursor: pointer;
    }
}

app {
    flex: 1 1 100vh;
    display: flex;
}

nav {
    background: #FAF9F8;
    flex: 0 0 256px;
    overflow: auto;
    order: 0;
    border-right: 1px solid #d9d9d9;

    ul {
        list-style: none;
        margin: 8px 0;
        padding: 0;

        li a {
            display: flex;
            align-items: center;
            height: 56px;
            padding: 0 20px;
            text-decoration: none;
            color: black;

            span {
                overflow: hidden;
                white-space: nowrap;
                text-overflow: ellipsis;
            }

            &:hover {
                background: rgba(0,0,0,0.08);
                cursor: pointer;
            }

          ...

JavaScript

$(function() {
    $(".menu-toggle").on("click", function() {
        
    });
});