|
/* The magic */ |
|
.col { |
|
// Prepare for absolute slide |
|
overflow: hidden; |
|
position: relative; |
|
} |
|
|
|
.slide { |
|
// Position inside column |
|
position: absolute; |
|
top: 0; right: 0; bottom: 0; left: 0; |
|
|
|
/* |
|
Visibility delay gives the previously hovered element time to slide out before disappearing. |
|
Remove the `visibility` transition to slide in current element without sliding out previous element |
|
*/ |
|
$speed: 0.275s; |
|
transition: all $speed ease-in-out, visibility 0s $speed; |
|
visibility: hidden; |
|
will-change: transform; |
|
// Slides start below their columns, giving upward motion on hover |
|
transform: translateY(100%); |
|
} |
|
|
|
.row:hover { |
|
// Next row, slides are above their columns, giving downward motion on hover |
|
& ~ .row .slide { transform: translateY(-100%); } |
|
|
|
// Current row, slides to the right of their columns, giving left motion on hover |
|
.slide { transform: translateX(100%); } |
|
|
|
// Current row, next slides, slides to the left of their columns, giving right motion on hover |
|
& .col:hover ~ .col .slide { transform: translateX(-100%); } |
|
|
|
// Current slide |
|
.col:hover .slide { |
|
transform: none; |
|
visibility: visible; |
|
transition-delay: 0s; |
|
} |
|
} |
|
|
|
/* Pen styling */ |
|
// This a mess, ignore |
|
|
|
* { box-sizing: border-box; } |
|
|
|
body { |
|
background: #fefefe; |
|
color: #333; |
|
font: 14px /1.5 "Fira Sans", sans-serif; |
|
} |
|
|
|
h1 { |
|
font-size: 2.5rem; |
|
font-weight: 300; |
|
margin: 1.5em 0.5rem 1em; |
|
text-align: center; |
|
} |
|
|
|
.container { |
|
margin: 0 auto; |
|
padding: 2rem; |
|
max-width: 1200px; |
|
} |
|
|
|
.row { |
|
display: flex; |
|
} |
|
|
|
.col { |
|
color: #fff; |
|
flex: 1 1 auto; |
|
min-height: 260px; |
|
position: relative; |
|
|
|
h2 { |
|
font-weight: 300; |
|
font-size: (14 * 1.33333) / 14 * 1rem; |
|
line-height: 1.25; |
|
margin: 0; |
|
position: absolute; |
|
bottom: 1.5rem; right: 1.5rem; |
|
z-index: 0; |
|
} |
|
} |
|
|
|
// Some size difference for variety |
|
.col:nth-child(2) { min-width: 20%; } |
|
.col:nth-child(4) { min-width: 33%; } |
|
.col:nth-child(3) + .col:nth-child(3) { min-width: 50%; } |
|
|
|
// Photo is in its own container, so we can zoom it |
|
.photo-container { |
|
background: #0f0523 50% 50% / cover; |
|
position: absolute; |
|
top: 0; right: 0; bottom: 0; left: 0; |
|
transition: 1s; |
|
transform-origin: bottom right; |
|
|
|
&::before { |
|
background: linear-gradient(transparent, rgba(#431133, 0.5), #000320); |
|
content: ''; |
|
position: absolute; |
|
top: 0; right: 0; bottom: 0; left: 0; |
|
} |
|
|
|
.col:hover & { |
|
transform: scale(1.25); |
|
} |
|
} |
|
|
|
// Basic slide styles |
|
.slide { |
|
background: rgba(#190115, 0.8); |
|
padding: 0 1.5rem; |
|
} |