Best View in Codepen Fullscreen
A Pen by Donald Steele on CodePen.
Best View in Codepen Fullscreen
A Pen by Donald Steele on CodePen.
<div class="wrapper"> | |
<nav class="nav-open"> | |
<header> | |
<div class="header-container"> | |
<span>John </span> | |
<button class="click-me" data-target="nav" data-action="toggleClass" data-params="nav-open,nav-close">Stuff</button> | |
</div> | |
</header> | |
<ul> | |
<li><span class="nav-title">Navigation</span></li> | |
<li><a class="active">Dashboard</a></li> | |
<li><a>Statistics</a></li> | |
<li><a>Roadmap</a></li> | |
<li><a>Milestones</a></li> | |
<li><a>Tickets</a></li> | |
<li><a>GitHub</a></li> | |
<li><a>FAQ</a></li> | |
<li><span>Other</span></li> | |
<li><a>Search</a></li> | |
<li><a>Settings</a></li> | |
<li><a>Logout</a></li> | |
</ul> | |
</nav> | |
<main> | |
<h1>Flexbox Admin Template</h1> | |
<div class="panel-container"> | |
<div class="panel"> | |
<div class="panel-head"><span class="panel-title">Clean CSS Code</span><span class="panel-tools"><i class="fa fa-times" aria-hidden="true"></i></span></div> | |
<div class="panel-body"> | |
<ul> | |
<li>no position: absolute</li> | |
<li>no float</li> | |
<li>no clearfix</li> | |
<li>no faux columns</li> | |
<li>no javascript</li> | |
</ul> | |
</div> | |
</div> | |
</div> | |
<div class="panel-container"> | |
<div class="panel"> | |
<div class="panel-head"><span class="panel-title">Clean CSS Code</span><span class="panel-tools"><i class="fa fa-times" aria-hidden="true"></i></span></div> | |
<div class="panel-body"> | |
<ul> | |
<li>no position: absolute</li> | |
<li>no float</li> | |
<li>no clearfix</li> | |
<li>no faux columns</li> | |
<li>no javascript</li> | |
</ul> | |
</div> | |
</div> | |
<div class="panel"> | |
<div class="panel-head"><span class="panel-title">Clean CSS Code</span><span class="panel-tools"><i class="fa fa-times" aria-hidden="true"></i></span></div> | |
<div class="panel-body"> | |
<ul> | |
<li>no position: absolute</li> | |
<li>no float</li> | |
<li>no clearfix</li> | |
<li>no faux columns</li> | |
<li>no javascript</li> | |
</ul> | |
</div> | |
</div> | |
</div> |
function getByTag(tag) { | |
console.log("get by tag"); | |
return document.getElementsByTagName(tag); | |
} | |
function getData(elem, attrib) { | |
console.log("data"); | |
return elem.getAttribute('data-' + attrib); | |
} | |
HTMLElement.prototype.hasClass = function(cls) { | |
let i; | |
console.log('inside hasclass' + this.className.split(" ")); | |
let classes = this.className.split(" "); | |
for(i = 0; i < classes.length; i++) { | |
if(classes[i] === cls) { | |
console.log('class found'); | |
return true; | |
} | |
} | |
return false; | |
}; | |
HTMLElement.prototype.addClass = function(add) { | |
if (!this.hasClass(add)){ | |
this.className = (this.className + " " + add).trim(); | |
} | |
}; | |
HTMLElement.prototype.removeClass = function(remove) { | |
let newClassName = ""; | |
let i; | |
let classes = this.className.replace(/\s{2,}/g, ' ').split(" "); | |
for(i = 0; i < classes.length; i++) { | |
if(classes[i] !== remove) { | |
newClassName += classes[i] + " "; | |
} | |
} | |
this.className = newClassName.trim(); | |
}; | |
HTMLElement.prototype.toggleClass = function(class1,class2) { | |
if (this.hasClass(class1)) { | |
console.log(this + ' has class ' + class1); | |
this.removeClass(class1); | |
this.addClass(class2); | |
} else if (this.hasClass(class2)) { | |
console.log(this + ' has class ' + class2); | |
this.removeClass(class2); | |
this.addClass(class1); | |
} else { | |
console.log(':('); | |
} | |
}; | |
document.addEventListener('click', function (event) { | |
// If the clicked element doesn't have the right selector, bail | |
if (!event.target.matches('.click-me')) return; | |
// Don't follow the link | |
event.preventDefault(); | |
try { | |
// Log the clicked element in the console | |
console.log(event.target + "was clicked"); | |
let targetstring = getData(event.target,'target'); | |
let newTarget = getByTag(targetstring)[0]; | |
let action = getData(event.target,'action'); | |
if (action == 'toggleClass') { | |
let params = getData(event.target,'params').split(','); | |
newTarget.toggleClass(params[0],params[1]); | |
} | |
} catch(err) { | |
console.log(err); | |
} | |
}, false); |
@import "compass/css3"; | |
@import url('https://fonts.googleapis.com/css?family=Open+Sans'); | |
@import url('https://netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css'); | |
/* more themes and colors available at | |
https://github.com/samme/base16-styles/ | |
*/ | |
$base00: #000000; | |
$base01: #404040; | |
$base02: #606060; | |
$base03: #808080; | |
$base04: #c0c0c0; | |
$base05: #d0d0d0; | |
$base06: #e0e0e0; | |
$base07: #ffffff; | |
$base08: #ff0000; | |
$base09: #ff9900; | |
$base0A: #ff0099; | |
$base0B: #33ff00; | |
$base0C: #00ffff; | |
$base0D: #0066ff; | |
$base0E: #cc00ff; | |
$base0F: #3300ff; | |
$color: $base02; | |
$color-d: $base01; | |
$color-l: $base03; | |
*, *:before, *:after { | |
margin: 0; | |
padding: 0; | |
box-sizing: border-box; | |
} | |
*:before, *:after { | |
content: ''; | |
display: block; | |
position: absolute; | |
} | |
html, body { | |
height: 100%; | |
} | |
body { | |
font: 15px/1 'Open Sans', sans-serif; | |
color: $base00; | |
} | |
a { | |
cursor: pointer; | |
} | |
ul { | |
list-style: none; | |
} | |
.wrapper { | |
display: flex; | |
min-height: 100%; | |
} | |
nav { | |
background: $color; | |
} | |
nav.nav-open { | |
width: 200px; | |
} | |
nav.nav-closed { | |
width: 20px; | |
} | |
nav header { | |
position: relative; | |
height: 80px; | |
padding: 20px 0 0 15px; | |
font-size: 16px; | |
color: $base05; | |
background: $base02; | |
border-bottom: 1px solid $base00; | |
} | |
nav header .header-container { | |
position: relative; | |
display: inline-block; | |
margin: 0 10px 0 0; | |
} | |
nav header .header-container span:before { | |
content: '\f08b'; | |
position: relative; | |
font: normal 20px fontawesome; | |
display: inline-block; | |
} | |
nav ul span { | |
display: block; | |
padding: 15px; | |
color: rgba(255,255,255,.5); | |
text-transform: uppercase; | |
border-bottom: 1px solid $color-d; | |
} | |
nav ul a { | |
position: relative; | |
display: block; | |
padding: 15px 15px 17px 50px; | |
color: #fff; | |
border-bottom: 1px solid $color-d; | |
} | |
nav ul a:hover, | |
nav ul a.active { | |
background: $color-l; | |
} | |
nav ul a:before { | |
font: normal 16px fontawesome; | |
top: 15px; | |
left: 18px; | |
} | |
nav ul li:nth-child(2) a:before { content: '\f00a'; } | |
nav ul li:nth-child(3) a:before { content: '\f012'; } | |
nav ul li:nth-child(4) a:before { content: '\f018'; } | |
nav ul li:nth-child(5) a:before { content: '\f024'; } | |
nav ul li:nth-child(6) a:before { content: '\f0c3'; } | |
nav ul li:nth-child(7) a:before { content: '\f09b'; } | |
nav ul li:nth-child(8) a:before { content: '\f0fa'; } | |
nav ul li:nth-child(10) a:before { content: '\f002'; } | |
nav ul li:nth-child(11) a:before { content: '\f085'; } | |
nav ul li:nth-child(12) a:before { content: '\f08b'; } | |
main { | |
flex: 1; | |
padding: 25px; | |
background: $base00; | |
} | |
main h1 { | |
height: 80px; | |
margin: -25px -25px 25px -25px; | |
padding: 0 25px; | |
line-height: 76px; | |
font-size: 24px; | |
font-weight: 400; | |
background: $base01; | |
color:$base05; | |
} | |
.panel-container { | |
display: flex; | |
} | |
.panel-container > div { | |
flex: 1; | |
margin: 0 20px 20px 0; | |
padding: 15px; | |
border: 1px solid $base01; | |
background: $base06; | |
} | |
.panel-container > div:last-child { | |
margin-right: 0; | |
} | |
.panel-container .panel-head { | |
margin: -15px -15px 15px -15px; | |
padding: 12px 15px; | |
font-size: 14px; | |
font-weight: 400; | |
border-bottom: 1px solid #ddd; | |
display: flex; | |
vertical-align: top; | |
justify-content: space-between; | |
background: linear-gradient(to bottom, $base03 0%,$base01 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */ | |
} | |
.panel-head .panel-title{ | |
color: $base06; | |
} | |
.panel-head .panel-tools { | |
color: $base06; | |
} | |
.panel-head .panel-tools i { | |
display:inherit; | |
} | |
.panel-container li { | |
position: relative; | |
margin: 0 0 10px; | |
padding: 0 0 0 25px; | |
} | |
.panel-container li:before { | |
content: '\f00c'; | |
font: normal 16px fontawesome; | |
top: 0; | |
left: 0; | |
color: $base08; | |
} | |
/* | |
** Media Queries | |
***********************************************************/ | |
@media (max-width: 1000px) { | |
.panel-container { | |
flex-direction: column; | |
} | |
.panel-containerl > div { | |
margin-right: 0; | |
} | |
} |