A 3D popup message that follows the user's mouse movements. Made in CSS3 + jQuery.
UPDATE : simplified the JS code by using a pseudo-element for the popup's shadow.
A Pen by Marc Malignan on CodePen.
A 3D popup message that follows the user's mouse movements. Made in CSS3 + jQuery.
UPDATE : simplified the JS code by using a pseudo-element for the popup's shadow.
A Pen by Marc Malignan on CodePen.
| <div class="moving-zone"> | |
| <div class="popup"> | |
| <div class="popup-content"> | |
| <div class="popup-text"> | |
| I'm a new kind of <b>popup</b>.<br/> | |
| Move your <b>mouse</b> around ! | |
| </div> | |
| </div> | |
| </div> | |
| </div> |
| var moveForce = 30; // max popup movement in pixels | |
| var rotateForce = 20; // max popup rotation in deg | |
| $(document).mousemove(function(e) { | |
| var docX = $(document).width(); | |
| var docY = $(document).height(); | |
| var moveX = (e.pageX - docX/2) / (docX/2) * -moveForce; | |
| var moveY = (e.pageY - docY/2) / (docY/2) * -moveForce; | |
| var rotateY = (e.pageX / docX * rotateForce*2) - rotateForce; | |
| var rotateX = -((e.pageY / docY * rotateForce*2) - rotateForce); | |
| $('.popup') | |
| .css('left', moveX+'px') | |
| .css('top', moveY+'px') | |
| .css('transform', 'rotateX('+rotateX+'deg) rotateY('+rotateY+'deg)'); | |
| }); |
| <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> |
| html, body { height: 100%; } | |
| body { | |
| margin: 0; | |
| background: radial-gradient(#666, #222); | |
| overflow: hidden; | |
| } | |
| .moving-zone { | |
| position: absolute; | |
| top:50%; left:50%; | |
| width:300px; height:120px; | |
| margin: -60px 0 0 -150px; | |
| perspective: 800px; | |
| } | |
| .popup { | |
| position: absolute; | |
| width:300px; | |
| padding: 10px; | |
| box-sizing: border-box; | |
| border-radius: 20px 0 20px 0; | |
| cursor: pointer; | |
| transform-style: preserve-3d; | |
| background: -webkit-linear-gradient(top left, white 50%, coral 50%); | |
| background: -moz-linear-gradient(top left, white 50%, coral 50%); | |
| background: -ms-linear-gradient(top left, white 50%, coral 50%); | |
| background: -o-linear-gradient(top left, white 50%, coral 50%); | |
| background: linear-gradient(top left, white 50%, coral 50%); | |
| } | |
| .popup:before { | |
| content: ''; | |
| position: absolute; | |
| left:5%; top:5%; | |
| width:90%; height:90%; | |
| border-radius: inherit; | |
| background: rgba(0,0,0,.1); | |
| box-shadow: 0 0 40px 20px rgba(0,0,0,.1); | |
| transform: translateZ(-100px); | |
| } | |
| .popup-content { | |
| background: #444; | |
| padding: 20px; | |
| box-sizing: border-box; | |
| border-radius: 10px 0 10px 0; | |
| } | |
| .popup-text { | |
| color: white; | |
| font-family: 'Roboto', sans-serif; | |
| font-size: 20px; | |
| line-height: 30px; | |
| font-weight: 100; | |
| text-align: center; | |
| transform: translateZ(15px); | |
| } | |
| .popup-text b { | |
| color: coral; | |
| font-weight: 300; | |
| } |