JSFiddle - React, Tailwind, and code Playground
by ethanpil
HTML
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/topcoat/0.8.0/css/topcoat-mobile-dark.min.css">
<div class="topcoat-navigation-bar">
<div class="topcoat-navigation-bar__item left quarter">
<a id="slide-menu-button" class="topcoat-icon-button--quiet slide-menu-button">
<span class="topcoat-icon topcoat-icon--menu-stack"></span>
</a>
</div>
<div class="topcoat-navigation-bar__item center half">
<h1 class="topcoat-navigation-bar__title">Topcoat Drawer</h1>
</div>
<div class="topcoat-navigation-bar__item right quarter">
<a class="topcoat-icon-button--quiet">
<span class="topcoat-icon topcoat-icon--edit"></span>
</a>
</div>
</div>
<nav class="side-nav">
<div class="topcoat-list__container side-nav__list__container">
<ul class="topcoat-list side-nav__list">
<li class="topcoat-list__item side-nav__list__item">
<a href="#" class="side-nav__button">Item</a>
</li>
<li class="topcoat-list__item side-nav__list__item is-active">
<a href="#" class="side-nav__button">Item</a>
</li>
<li class="topcoat-list__item side-nav__list__item">
<a href="#" class="side-nav__button">Item</a>
</li>
</ul>
</div>
</nav>
<div class="main-content">
<div class="topcoat-list">
<ul class="topcoat-list__container">
<li class="topcoat-list__item">Item</li>
<li class="topcoat-list__item">Item</li>
<li class="topcoat-list__item">Item</li>
<li class="topcoat-list__item">Item</li>
<li class="topcoat-list__item">Item</li>
<li class="topcoat-list__item">Item</li>
<li class="topcoat-list__item">Item</li>
<li class="topcoat-list__item">Item</li>
<li class="topcoat-list__item">Item</li>
</ul>
</div>
</div>
CSS
html, body {
margin:0;
padding:0;
height: 100%;
}
body {
font-family: source-sans-pro, sans-serif;
position: relative;
width: 100%;
height:100%;
overflow: hidden;
-webkit-font-smoothing: antialiased;
}
body.left-nav .topcoat-navigation-bar, body.left-nav .main-content {
left:250px;
}
.topcoat-navigation-bar {
position:absolute;
width:100%;
z-index:100;
transition: left 0.2s ease-out;
-webkit-transition: left 0.2s ease-out;
transform: translate3d(0, 0, 0);
-webkit-transform: translate3d(0, 0, 0);
}
.side-nav {
display:block;
position:absolute;
top:0;
left:0;
width:320px;
height:100%;
background-color:#353535;
}
.side-nav__list__container {
margin-top:4rem;
border-top:none;
border-bottom:none;
}
.side-nav__list {
border-top:none;
}
.side-nav__list__item {
padding:0;
}
.side-nav__list__item.is-active {
background-color:#353535;
}
.side-nav__button {
display:block;
width:100%;
height:100%;
padding: 1.25rem;
box-sizing: border-box;
color: #c6c8c8;
text-decoration:none;
}
.side-nav__button:hover {
background-color:#747474;
}
.side-nav__button:active {
background-color:#353535;
}
.main-content {
position: absolute;
background: inherit;
left: 0;
padding-top:4rem;
width:100%;
height:100%;
transition: left 0.2s ease-out;
-webkit-transition: left 0.2s ease-out;
transform: translate3d(0, 0, 0);
-webkit-transform: translate3d(0, 0, 0);
-moz-box-shadow: 0px 0px 8px 2px rgba(0, 0, 0, 0.57);
-webkit-box-shadow: 0px 0px 8px 2px rgba(0, 0, 0, 0.57);
box-shadow: 0px 0px 8px 2px rgba(0, 0, 0, 0.57);
}
@media screen and (min-width: 640px) { /* @media screen and (min-width: 880px) { */
.slide-menu-button {
display:none;
}
.main-content {
left:320px;
right:0;
width:auto;
}
}
JavaScript
var slideMenuButton = document.getElementById('slide-menu-button');
slideMenuButton.onclick = function (e) {
var cl = document.body.classList;
if (cl.contains('left-nav')) {
cl.remove('left-nav');
} else {
cl.add('left-nav');
}
};