Skip to content

Instantly share code, notes, and snippets.

@sethkontny
Last active August 29, 2015 14:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sethkontny/3ebf4da8da5011e34ab3 to your computer and use it in GitHub Desktop.
Save sethkontny/3ebf4da8da5011e34ab3 to your computer and use it in GitHub Desktop.
A Pen by seth kontny.
<link href='//fonts.googleapis.com/css?family=Raleway:400,200,600' rel='stylesheet' type='text/css'>
<header>
<a class="off-canvas-trigger" href="#">
<span>S</span><span>E</span><span>T</span><span>H</span><span></span>
<span> K</span><span>O</span><span>N</span><span>T</span><span>N</span><span>Y</span><span></span>
</a>
<nav class="off-canvas">
<ul class="off-canvas__list">
<li><a class="off-canvas__link" href="">About</a></li>
<li><a class="off-canvas__link" href="">Resume</a></li>
<li><a class="off-canvas__link" href="">Projects</a></li>
<li><a class="off-canvas__link" href="">Writings</a></li>
<li><a class="off-canvas__link" href="">Contacts</a></li>
<li><a class="off-canvas__link" href="">Links</a></li>
<li><a class="off-canvas__link" href="">Other Links</a></li>
</ul>
</nav>
</header>
<main>
<section>
<h1>Persona Vox</h1>
</section>
<h1>SleepMedx Inc.</h1>
</section>
<h1>Solo collab</h1>
</main>
<footer>
</footer>
$('.off-canvas-trigger').click(function() {
$('body').toggleClass('off-canvas-active');
});
// =================================================
// Modernizr
// =================================================
// Modernizr mixin to create .modernizr selector
// http://codepen.io/sturobson/pen/xcdha
@mixin css($property, $support: true) {
@if $support == true {
.#{$property} & {
@content;
}
}
@else {
.no-#{$property} & {
@content;
}
}
}
/*----------------------------------------------
=Variables
----------------------------------------------*/
$accent: #ff6589;
$background: #013742;
// Would this look better if all the transitions had the same speed?
$shared-transition-speed: .6s;
// wave
// x
$trigger-active-style: wave;
// static - no extra styles applied
// traditional
// scale
// Future additions
// - push + rotate
// - fade
$content-push: scale;
/*----------------------------------------------
=Resets
----------------------------------------------*/
*,
*:before,
*:after {
box-sizing: border-box;
position: relative;
}
*:before,
*:after { pointer-events: none; }
html {
height: 100%;
font-family: 'Raleway', sans-serif;
text-align: left;
background: $background;
}
body {
height: 100%;
min-height: 100%;
margin: 0;
color: #fff;
}
/*----------------------------------------------
=HTML
----------------------------------------------*/
a {
text-decoration: none;
transition: .3s;
}
/*----------------------------------------------
=Headings
----------------------------------------------*/
h1 {
font-size: 7vw;
font-weight: 200;
letter-spacing: 0;
text-align: center;
color: #ff6589;
transform-origin: right top;
&:first-letter {
font-size: 9vw;
}
}
/*----------------------------------------------
=Off Canvas Trigger
----------------------------------------------*/
.off-canvas-trigger {
display: block;
padding: 1.75em 1em 1.75em 5em;
font-size: 1.75em;
background: rgba(#fff, .05);
color: #fff;
transition: .3s;
&:before {
position: absolute;
top: 22%;
left: 1em;
height: .5em;
width: .5em;
content: '';
background: $accent;
box-shadow:
.5em 0 0 0 adjust-hue($accent, 20%),
1em 0 0 0 adjust-hue($accent, 40%),
1.5em 0 0 0 adjust-hue($accent, 60%),
2em 0 0 0 adjust-hue($accent, 80%),
2.5em 0 0 0 adjust-hue($accent, 100%),
0 1em 0 0 adjust-hue($accent, 0),
.5em 1em 0 0 adjust-hue($accent, 20%),
1em 1em 0 0 adjust-hue($accent, 40%),
1.5em 1em 0 0 adjust-hue($accent, 60%),
2em 1em 0 0 adjust-hue($accent, 80%),
2.5em 1em 0 0 adjust-hue($accent, 100%),
0 2em 0 0 adjust-hue($accent, 0),
.5em 2em 0 0 adjust-hue($accent, 20%),
1em 2em 0 0 adjust-hue($accent, 40%),
1.5em 2em 0 0 adjust-hue($accent, 60%),
2em 2em 0 0 adjust-hue($accent, 80%),
2.5em 2em 0 0 adjust-hue($accent, 100%);
transition: .45s;
}
&:hover {
background: rgba(#fff, .1);
&:before {
background: adjust-hue($accent, 100%);
box-shadow:
.5em 0 0 0 adjust-hue($accent, 80%),
1em 0 0 0 adjust-hue($accent, 60%),
1.5em 0 0 0 adjust-hue($accent, 40%),
2em 0 0 0 adjust-hue($accent, 20%),
2.5em 0 0 0 adjust-hue($accent, 0),
0 1em 0 0 adjust-hue($accent, 100%),
.5em 1em 0 0 adjust-hue($accent, 80%),
1em 1em 0 0 adjust-hue($accent, 60%),
1.5em 1em 0 0 adjust-hue($accent, 40%),
2em 1em 0 0 adjust-hue($accent, 20%),
2.5em 1em 0 0 adjust-hue($accent, 0),
0 2em 0 0 adjust-hue($accent, 100%),
.5em 2em 0 0 adjust-hue($accent, 80%),
1em 2em 0 0 adjust-hue($accent, 60%),
1.5em 2em 0 0 adjust-hue($accent, 40%),
2em 2em 0 0 adjust-hue($accent, 20%),
2.5em 2em 0 0 adjust-hue($accent, 0);
}
}
.off-canvas-active & {
background: rgba(#fff, .1);
&:before {
background: $accent;
@if $trigger-active-style == wave {
box-shadow:
.5em .5em 0 0 adjust-hue($accent, 20%),
1em 1em 0 0 adjust-hue($accent, 40%),
1.5em .5em 0 0 adjust-hue($accent, 60%),
2em 0 0 0 adjust-hue($accent, 80%),
2.5em .5em 0 0 adjust-hue($accent, 100%),
0 1em 0 0 adjust-hue($accent, 0),
.5em 1.5em 0 0 adjust-hue($accent, 20%),
1em 2em 0 0 adjust-hue($accent, 40%),
1.5em 1.5em 0 0 adjust-hue($accent, 60%),
2em 1em 0 0 adjust-hue($accent, 80%),
2.5em 1.5em 0 0 adjust-hue($accent, 100%),
0 2em 0 0 transparent,
.5em 2em 0 0 transparent,
1em 2em 0 0 transparent,
1.5em 2em 0 0 transparent,
2em 2em 0 0 transparent,
2.5em 2em 0 0 transparent;
}
@if $trigger-active-style == x {
box-shadow:
.5em .5em 0 0 adjust-hue($accent, 20%),
1em 1em 0 0 adjust-hue($accent, 40%),
1.5em .5em 0 0 adjust-hue($accent, 60%),
2em 0 0 0 adjust-hue($accent, 80%),
2.5em .5em 0 0 transparent,
0 2em 0 0 adjust-hue($accent, 0),
.5em 1.5em 0 0 adjust-hue($accent, 20%),
1em 2em 0 0 transparent,
1.5em 1.5em 0 0 adjust-hue($accent, 60%),
2em 2em 0 0 adjust-hue($accent, 80%),
2.5em 1.5em 0 0 transparent,
0 2em 0 0 transparent,
.5em 2em 0 0 transparent,
1em 2em 0 0 transparent,
1.5em 2em 0 0 transparent,
2em 2em 0 0 transparent,
2.5em 2em 0 0 transparent;
}
}
}
span {
color: $accent;
&:nth-child(2) { color: adjust-hue($accent, 20%); }
&:nth-child(3) { color: adjust-hue($accent, 40%); }
&:nth-child(4) { color: adjust-hue($accent, 60%); }
&:nth-child(5) { color: adjust-hue($accent, 80%); }
&:nth-child(6) { color: adjust-hue($accent, 100%); }
&:nth-child(7) { color: adjust-hue($accent, 120%); }
}
}
/*----------------------------------------------
=Off Canvas
----------------------------------------------*/
.off-canvas {
position: fixed;
top: 8.25em;
z-index: 2;
height: 100%;
min-height: 100%;
// Reinvestigate - Mobile Safari doesn't render the scroll bar here
// If the content is very tall consider condensing via height based media queries
overflow-y: scroll;
overflow-scrolling: touch;
// A little pushin for the cushion
// Does the scroll work as expected without padding-bottom?
padding: .75em 0 20em;
width: 75%;
background: rgba(#fff, .02);
transition: .6s;
@media (min-width: 37.5em) {
width: 50%;
}
@include css(csstransforms3d) {
transform: translate3d(-100%, 0, 0);
}
@include css(csstransforms3d, false) {
transform: translate(-100%);
}
@include css(csstransforms, false) {
left: -100%;
}
.off-canvas-active & {
@include css(csstransforms3d) {
transform: translate3d(0, 0, 0);
}
@include css(csstransforms3d, false) {
transform: translate(0);
}
@include css(csstransforms, false) {
left: 0;
}
}
}
.off-canvas__list {
margin: 0;
padding: 0;
list-style: none;
}
.off-canvas__link {
display: block;
z-index: 2;
padding: 2em;
letter-spacing: 0;
color: $accent;
&:first-letter {
font-size: 2em;
}
&:before {
position: absolute;
top: 0;
left: 0;
z-index: -1;
width: 100%;
height: 100%;
content: '';
transition: .3s;
}
&:hover {
letter-spacing: .2em;
color: adjust-hue($accent, 30%);
&:before {
box-shadow:
inset .3em 0 0 0 $accent,
inset .6em 0 0 0 $background,
inset .7em 0 0 0 adjust-hue($accent, 20%);
}
}
}
/*----------------------------------------------
=Main
----------------------------------------------*/
main {
overflow: hidden;
}
section {
transition: .6s;
@if $content-push == traditional {
.off-canvas-active & {
@include css(csstransforms3d) {
transform: translate3d(50%, 0, 0);
}
@include css(csstransforms3d, false) {
transform: translate(50%);
}
@include css(csstransforms, false) {
left: 50%;
}
}
}
@if $content-push == scale {
transform-origin: right center;
.off-canvas-active & {
@include css(csstransforms) {
transform: scale(.9);
}
@include css(csstransforms, false) {
opacity: .8;
}
}
}
}

Wallaby Canvas

Yo man keep it simple. All you need is your dear friend transform and some percentages for off canvas navigation.

A Pen by seth kontny on CodePen.

License.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment