Skip to content

Instantly share code, notes, and snippets.

@shshaw
Last active May 4, 2018 20:10
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 shshaw/52d5a015cf6e898abbc9ae05f70d7de4 to your computer and use it in GitHub Desktop.
Save shshaw/52d5a015cf6e898abbc9ae05f70d7de4 to your computer and use it in GitHub Desktop.
@keyframers 1.4.0 | Expanding Environments
<a href="https://youtu.be/YjiHf3RE4o4" target="_blank" data-keyframers-credit style="color: #FFF; text-shadow: 0 1px 0px #000"></a>
<script src="https://codepen.io/shshaw/pen/QmZYMG.js"></script>
<div id="site">
<h1 class="heading">Keyframers</h1>
<section class="articles">
<article class="article">
<div class="inner">
<img src="https://images.unsplash.com/photo-1508114192106-671e913c2413?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=d8f29c9fe7b6bef5850b8772f74c341f&auto=format&fit=crop&w=934&q=80" alt="">
<p class="article-content">Lorem ipsum dolor sit amet consectetur adipisicing elit. Praesentium nam?</p>
</div>
</article>
<div class="article">
<div class="inner">
<img src="https://images.unsplash.com/photo-1467155679845-414db2d0bdad?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=2cf93081e7cd08f4146588a8070e4147&auto=format&fit=crop&w=1300&q=80" alt="">
<p class="article-content">Lorem ipsum dolor sit amet consectetur adipisicing elit. Praesentium nam?</p>
</div>
</div>
<div class="article">
<div class="inner">
<img src="https://picsum.photos/1000/900?image=1067" alt="">
<p class="article-content">Lorem ipsum dolor sit amet consectetur adipisicing elit. Praesentium nam?</p>
</div>
</div>
<div class="article">
<div class="inner">
<img src="https://images.unsplash.com/photo-1518177456875-bf45a6c0b121?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=410523cf02cf97c0cca9a9ee7b02260d&auto=format&fit=crop&w=1400&q=60" alt="">
<p class="article-content">Lorem ipsum dolor sit amet consectetur adipisicing elit. Praesentium nam?</p>
</div>
</div>
</section>
<main class="content">
<h1 class="heading">Reimagining Animations</h1>
<p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Qui, quam! Animi voluptatem facilis distinctio obcaecati asperiores eius fugiat debitis ex, earum voluptas accusantium.</p>
</main>
</div>
console.clear();
const articles = document.querySelector('.articles');
Array.from(
document.querySelectorAll('.article'),
(article, i) => {
article.addEventListener('click', () => {
articles.classList.toggle('full');
article.classList.toggle('full');
});
});
@import url('https://fonts.googleapis.com/css?family=Abril+Fatface');
.heading {
width: 100%;
text-align: center;
text-transform: uppercase;
}
.articles {
width: 100%;
height: 80%;
overflow: hidden;
counter-reset: section;
}
.article {
overflow: hidden;
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
transition:
transform 1s cubic-bezier(.2, 0, .2, 1),
z-index 0.1s linear 1s;
z-index: 1;
visibility: hidden;
@for $i from 1 through 4 {
&:nth-child(#{$i}) {
--i: #{$i};
}
}
transform: translateX( calc(25% * (var(--i) - 1) ));
.inner {
position: absolute;
top: 0;
left: 0;
transform: translateX(-75%);
width: 100%;
height: 100%;
overflow: hidden;
transition: inherit;
visibility: visible;
display: flex;
flex-direction: column;
}
img {
display: block;
width: 100%;
height: 80%;
flex: 0;
object-fit: cover;
transition: inherit;
transform: translateX(25%) scale(1.25);
transform-origin: center bottom;
position: relative;
z-index: 2;
}
.article-content {
display: block;
flex: 0 0 auto;
width: 25%;
transform: translateX(300%);
padding: 0.75em;
font-size: 0.7rem;
display: flex;
align-items: flex-start;
&::before {
display: block;
counter-increment: section;
content: '0' counter(section);
font-size: 3rem;
line-height: 1;
margin-right: 0.2em;
border-bottom: solid 0.1em;
}
transition:
transform 1s cubic-bezier(.2, 0, .2, 1),
opacity 0.3s linear;
}
}
.content {
position: absolute;
bottom: 1em;
left: 0;
right: 0;
padding: inherit;
transition:
opacity 0.5s ease-in-out,
transform 0.5s cubic-bezier(.2, 0, .2, 1);
opacity: 0;
transform: translateY(60%);
h1 { margin-bottom: 0.2em; }
}
.articles.full {
.article {
transform: translateX(-25%);
.article-content {
opacity: 0;
}
}
// shift articles AFTER the full one to the right
// based on their position
.article.full ~ .article {
transform: translateX(100%);
}
.article.full {
transform: translateX(0);
transition-delay: 0s, 0s;
z-index: 999;
.inner,
img {
transform: translateX(0);
}
}
+ .content {
opacity: 1;
transition-delay: 0.5s;
transform: none;
}
}
// Setup ------------------------
*, *:before, *:after {
position: relative;
box-sizing: border-box;
}
html, body {
height: 100%;
width: 100%;
padding: 0;
margin: 0;
font-family: 'Abril Fatface', serif;
color: #0F0F0F;
}
body {
display: flex;
justify-content: center;
align-items: center;
background-color: #325499;
}
#site {
width: 90vw;
height: 80vh;
background-color: #fff;
box-shadow: 0 5vw 10vw rgba(black, 0.15);
padding: 0 4vw;
overflow: hidden;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment