|
@import url("https://fonts.googleapis.com/css?family=Roboto"); |
|
|
|
*, |
|
*:before, |
|
*:after { |
|
box-sizing: border-box; |
|
position: relative; // fight me |
|
} |
|
|
|
body, |
|
html { |
|
width: 100%; |
|
height: 100%; |
|
margin: 0; |
|
padding: 0; |
|
font-family: Roboto, Helvetica, sans-serif; |
|
font-size: 300; |
|
background: #aaa; |
|
} |
|
|
|
// _+_+_+_+_+_+_+_+_+-=-=3-=-3=-=3-=3-3=-3=- |
|
|
|
#app { |
|
height: 100%; |
|
width: 100%; |
|
|
|
&:before, &:after { |
|
position: absolute; |
|
font-size: 3vmin; |
|
letter-spacing: -.1vmin; |
|
z-index: 100000; |
|
} |
|
|
|
&:before { |
|
content: 'KEY FRAMERS'; |
|
position: absolute; |
|
top: 2vh; |
|
left: 2vw; |
|
} |
|
|
|
&:after { |
|
content: attr(data-product) ' / ' attr(data-product-count); |
|
position: absolute; |
|
bottom: 2vh; |
|
left: 2vw; |
|
font-size: 6vmin; |
|
} |
|
} |
|
|
|
.product { |
|
position: absolute; |
|
top: 0; |
|
left: 0; |
|
width: 100%; |
|
height: 100%; |
|
display: grid; |
|
grid-template-columns: 1fr 1fr; |
|
grid-template-rows: 1fr 1fr; |
|
|
|
&:after { |
|
content: ""; |
|
} |
|
|
|
> .photo { |
|
grid-column: 1 / -1; |
|
grid-row: 1 / -1; |
|
margin: 0; |
|
background: #fff; |
|
|
|
img { |
|
opacity: 0.8; |
|
display: block; |
|
object-fit: cover; |
|
width: 100%; |
|
height: 100%; |
|
} |
|
} |
|
|
|
> .title { |
|
grid-column: 2; |
|
grid-row: 2; |
|
font-size: 8vmin; |
|
line-height: 1; |
|
display: flex; |
|
flex-direction: column; |
|
justify-content: flex-end; |
|
padding: 1rem; |
|
|
|
h2 { |
|
margin: 0; |
|
font-weight: 300; |
|
letter-spacing: -0.5vmin; |
|
line-height: 0.9; |
|
} |
|
|
|
span { |
|
display: block; |
|
white-space: nowrap; |
|
overflow: hidden; |
|
} |
|
} |
|
} |
|
|
|
.title div { |
|
overflow: hidden; |
|
|
|
&:nth-child(2) { |
|
text-align: center; |
|
} |
|
&:nth-child(3) { |
|
text-align: right; |
|
} |
|
} |
|
|
|
/* ---------------------------------- */ |
|
|
|
|
|
|
|
:root { |
|
--duration: 1s; |
|
--easing: cubic-bezier(.2, 0, .3, 1); |
|
} |
|
|
|
.product { |
|
|
|
> .photo { |
|
|
|
mask-image: radial-gradient(#000 70%, transparent 70.1%); |
|
mask-repeat: no-repeat; |
|
mask-position: center center; |
|
// mask-position: |
|
// calc(50% + (var(--mouse-down-x) / 50vw)) |
|
// calc(50% + (var(--mouse-down-y) / 50vh)); |
|
mask-size: 0vmax 0vmax; |
|
transition: mask-size var(--duration) var(--easing); |
|
transition-delay: 0.5s; |
|
} |
|
|
|
.title span { |
|
transform: translateY(-100%); |
|
transition: transform var(--duration) var(--easing); |
|
} |
|
|
|
.title div:nth-child(2) span { |
|
transform: translateY(100%); |
|
} |
|
} |
|
|
|
.product[data-active] { |
|
|
|
z-index: 10; |
|
|
|
> .photo { |
|
mask-size: 150vmax 150vmax; |
|
transition-delay: 0s; |
|
} |
|
|
|
.title span { |
|
transform: none !important; |
|
} |
|
|
|
+ .product { |
|
.title span { |
|
visibility: hidden; |
|
transform: translateY(100%); |
|
} |
|
|
|
.title div:nth-child(2) span { |
|
transform: translateY(-100%); |
|
} |
|
} |
|
} |
|
|
|
/* ---------------------------------- */ |
|
|
|
:root { |
|
--mouse-x: 50vw; |
|
--mouse-y: 50vh; |
|
} |
|
|
|
.mouse-tracker { |
|
z-index: 999; |
|
position: fixed; |
|
top: 0; |
|
left: 0; |
|
width: 10vmin; |
|
height: 10vmin; |
|
background: rgba(255,255,255,.2); |
|
border-radius: 50%; |
|
border: solid 2px #000; |
|
opacity: 0.8; |
|
transform: |
|
translate(-50%, -50%) |
|
translate( |
|
calc(var(--mouse-x) * 1px), |
|
calc(var(--mouse-y) * 1px) |
|
); |
|
pointer-events: none; |
|
} |