2017 Card

HTML
<div class="wrapper"> <div class="card"> <div class="card__year"> 20<br />16 </div> <div class="card__cometOuter"> <div class="card__comet"></div> <div class="card__comet card__comet--second"> </div> </div> <div class="card__circle"></div> <div class="card__smallCircle"></div> <div class="card__orangeShine"></div> <div class="card__greenShine"></div> <div class="card__thankyou"> thank<br />you! </div> <div class="card__outer-year"> <span>2</span> <span>0</span> <span>1</span> <span>7</span> </div> </div> <div class="source"> <strong>Source:</strong> <a href="https://dribbble.com/shots/3186204-Thank-you" target="_blank">https://dribbble.com/shots/3186204-Thank-you</a> </div> </div>
SCSS
* { box-sizing: border-box; } body { background-color: #fee1e1; } $outerYearSpacing: 35px; $cardWidth: 655px; $cardHeight: 342px; .wrapper { position: absolute; margin: (-$cardHeight/2) 0 0 (-$cardWidth/2); left: 50%; top: 50%; height: $cardHeight; width: $cardWidth; } .card { background-image: url(https://s3-us-west-2.amazonaws.com/s.cdpn.io/279756/2017_bg.png); background-size: cover; width: $cardWidth; height: $cardHeight; border-radius: 5px; position: absolute; box-shadow: -20px 30px 116px 0 rgba(92, 15, 15, 0.54); overflow: hidden; z-index: 4; &__orangeShine, &__greenShine { position: absolute; background-repeat: no-repeat; background-size: cover; } &__orangeShine { background-image: url(https://s3-us-west-2.amazonaws.com/s.cdpn.io/279756/orange_shine.png); right: -150px; top: -90px; bottom: 50px; z-index: 2; width: 570px; height: 500px; } &__greenShine { background-image: url(https://s3-us-west-2.amazonaws.com/s.cdpn.io/279756/green_shine.png); left: 20%; top: 0; bottom: 0; z-index: 1; width: 400px; } &__year { font-family: 'Oswald', sans-serif; text-align: center; color: #fff; font-size: 110px; line-height: 110px; padding: 55px 0; font-weight: 100; position: relative; z-index: 2; } &__thankyou { font-family: 'Oswald', sans-serif; position: absolute; text-transform: uppercase; font-weight: 100; left: 33%; bottom: 20%; z-index: 2; color: #fff; letter-spacing: 5px; line-height: 17px; font-size: 12px; color: rgba(255, 255, 255, 0.5); } &__circle, &__smallCircle { position: absolute; border-radius: 100%; background-image: linear-gradient(-239deg, #3B4576 0%, #242A48 59%); box-shadow: -10px -15px 90px 0 #191C41; z-index: 2; } &__circle { right: 68px; bottom: 34px; width: 230px; height: 230px; } &__smallCircle { right: 40%; top: -7%; width: 50px; height: 50px; } &__outer-year { font-family: 'Orbitron'; span { position: absolute; color: #fff; font-size: 16px; z-index: 4; &:nth-child(1), &:nth-child(4) { &:after { content: ''; position: absolute; bottom: -2px; left: 0; width: 100%; border-bottom: 2px solid #fff; } } &:nth-child(1) { top: $outerYearSpacing; left: $outerYearSpacing; } &:nth-child(2) { left: none; top: $outerYearSpacing; right: $outerYearSpacing; } &:nth-child(3) { top: none; bottom: $outerYearSpacing; left: $outerYearSpacing; } &:nth-child(4) { top: none; left: none; right: $outerYearSpacing; bottom: $outerYearSpacing; } } } &__comet { position: relative; width: 8px; height: 8px; background-color: #fff; border-radius: 100%; &Outer { position: absolute; top: 30%; left: 25%; } &--second { right: -30px; top: -15px; transform: scale(0.6) } &:before, &:after { content: ''; position: absolute; left: 0; top: 0; background: linear-gradient(to bottom, rgba(255, 255, 255, 0.2) 0%, rgba(255, 255, 255, 0.2) 27%, rgba(255, 255, 255, 0) 100%); border-radius: 20px; transform: rotate(-45deg); } &:before { width: 18px; height: 70px; transform-origin: -2px 13px; } &:after { width: 12px; height: 80px; transform-origin: 0px 8px; } } } .source { position: absolute; width: 100%; left: 0; bottom: -30px; opacity: 0.5; font-size: 12px; a { color: #000; } }
ES6
const $circle = document.querySelector('.card__circle'); const $smallCircle = document.querySelector('.card__smallCircle'); const $year = document.querySelector('.card__year'); const $card = document.querySelector('.card'); const $cardOrangeShine = document.querySelector('.card__orangeShine'); const $cardThankYou = document.querySelector('.card__thankyou'); const $cardComet = document.querySelector('.card__cometOuter'); const generateTranslate = (el, e, value) => { el.style.transform = `translate(${e.clientX*value}px, ${e.clientY*value}px)`; } // http://stackoverflow.com/a/1480137 const cumulativeOffset = (element) => { var top = 0, left = 0; do { top += element.offsetTop || 0; left += element.offsetLeft || 0; element = element.offsetParent; } while(element); return { top: top, left: left }; }; document.onmousemove = (event) => { console.log(cumulativeOffset($card)) const e = event || window.event; const x = (e.pageX - cumulativeOffset($card).left - (350 / 2)) * -1 / 100; const y = (e.pageY - cumulativeOffset($card).top - (350 / 2)) * -1 / 100; const matrix = [ [1, 0, 0, -x * 0.00005], [0, 1, 0, -y * 0.00005], [0, 0, 1, 1], [0, 0, 0, 1] ]; generateTranslate($smallCircle, e, 0.03); generateTranslate($cardThankYou, e, 0.03); generateTranslate($cardOrangeShine, e, 0.09); generateTranslate($circle, e, 0.05); generateTranslate($year, e, 0.03); generateTranslate($cardComet, e, 0.05); $card.style.transform = `matrix3d(${matrix.toString()})`; }
Expand for more options Login