inspired by Pinterest
A Pen by Mert Cukuren on CodePen.
| <div class="scroll-down">SCROLL DOWN | |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"> | |
| <path d="M16 3C8.832031 3 3 8.832031 3 16s5.832031 13 13 13 13-5.832031 13-13S23.167969 3 16 3zm0 2c6.085938 0 11 4.914063 11 11 0 6.085938-4.914062 11-11 11-6.085937 0-11-4.914062-11-11C5 9.914063 9.914063 5 16 5zm-1 4v10.28125l-4-4-1.40625 1.4375L16 23.125l6.40625-6.40625L21 15.28125l-4 4V9z"/> | |
| </svg></div> | |
| <div class="container"></div> | |
| <div class="modal"> | |
| <div class="modal-container"> | |
| <div class="modal-left"> | |
| <h1 class="modal-title">Welcome!</h1> | |
| <p class="modal-desc">Fanny pack hexagon food truck, street art waistcoat kitsch.</p> | |
| <div class="input-block"> | |
| <label for="email" class="input-label">Email</label> | |
| <input type="email" name="email" id="email" placeholder="Email"> | |
| </div> | |
| <div class="input-block"> | |
| <label for="password" class="input-label">Password</label> | |
| <input type="password" name="password" id="password" placeholder="Password"> | |
| </div> | |
| <div class="modal-buttons"> | |
| <a href="" class="">Forgot your password?</a> | |
| <button class="input-button">Login</button> | |
| </div> | |
| <p class="sign-up">Don't have an account? <a href="#">Sign up now</a></p> | |
| </div> | |
| <div class="modal-right"> | |
| <img src="https://images.unsplash.com/photo-1512486130939-2c4f79935e4f?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=dfd2ec5a01006fd8c4d7592a381d3776&auto=format&fit=crop&w=1000&q=80" alt=""> | |
| </div> | |
| <button class="icon-button close-button"> | |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 50"> | |
| <path d="M 25 3 C 12.86158 3 3 12.86158 3 25 C 3 37.13842 12.86158 47 25 47 C 37.13842 47 47 37.13842 47 25 C 47 12.86158 37.13842 3 25 3 z M 25 5 C 36.05754 5 45 13.94246 45 25 C 45 36.05754 36.05754 45 25 45 C 13.94246 45 5 36.05754 5 25 C 5 13.94246 13.94246 5 25 5 z M 16.990234 15.990234 A 1.0001 1.0001 0 0 0 16.292969 17.707031 L 23.585938 25 L 16.292969 32.292969 A 1.0001 1.0001 0 1 0 17.707031 33.707031 L 25 26.414062 L 32.292969 33.707031 A 1.0001 1.0001 0 1 0 33.707031 32.292969 L 26.414062 25 L 33.707031 17.707031 A 1.0001 1.0001 0 0 0 32.980469 15.990234 A 1.0001 1.0001 0 0 0 32.292969 16.292969 L 25 23.585938 L 17.707031 16.292969 A 1.0001 1.0001 0 0 0 16.990234 15.990234 z"></path> | |
| </svg> | |
| </button> | |
| </div> | |
| <button class="modal-button">Click here to login</button> | |
| </div> |
inspired by Pinterest
A Pen by Mert Cukuren on CodePen.
| const body = document.querySelector("body"); | |
| const modal = document.querySelector(".modal"); | |
| const modalButton = document.querySelector(".modal-button"); | |
| const closeButton = document.querySelector(".close-button"); | |
| const scrollDown = document.querySelector(".scroll-down"); | |
| let isOpened = false; | |
| const openModal = () => { | |
| modal.classList.add("is-open"); | |
| body.style.overflow = "hidden"; | |
| }; | |
| const closeModal = () => { | |
| modal.classList.remove("is-open"); | |
| body.style.overflow = "initial"; | |
| }; | |
| window.addEventListener("scroll", () => { | |
| if (window.scrollY > window.innerHeight / 3 && !isOpened) { | |
| isOpened = true; | |
| scrollDown.style.display = "none"; | |
| openModal(); | |
| } | |
| }); | |
| modalButton.addEventListener("click", openModal); | |
| closeButton.addEventListener("click", closeModal); | |
| document.onkeydown = evt => { | |
| evt = evt || window.event; | |
| evt.keyCode === 27 ? closeModal() : false; | |
| }; |
| @import url("https://fonts.googleapis.com/css?family=Nunito:400,600,700"); | |
| * { | |
| box-sizing: border-box; | |
| } | |
| body { | |
| font-family: "Nunito", sans-serif; | |
| color: rgba(#000, 0.7); | |
| } | |
| .container { | |
| height: 200vh; | |
| background-image: url(https://images.unsplash.com/photo-1538137524007-21e48fa42f3f?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=ac9fa0975bd2ebad7afd906c5a3a15ab&auto=format&fit=crop&w=1834&q=80); | |
| background-size: cover; | |
| background-position: center; | |
| background-repeat: no-repeat; | |
| } | |
| .modal { | |
| position: fixed; | |
| left: 0; | |
| bottom: 0; | |
| width: 100%; | |
| height: 60px; | |
| background: rgba(#333, 0.5); | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| justify-content: center; | |
| transition: 0.4s; | |
| &-container { | |
| display: flex; | |
| max-width: 720px; | |
| width: 100%; | |
| border-radius: 10px; | |
| overflow: hidden; | |
| position: absolute; | |
| opacity: 0; | |
| pointer-events: none; | |
| transition-duration: 0.3s; | |
| background: #fff; | |
| transform: translateY(100px) scale(0.4); | |
| } | |
| &-title { | |
| font-size: 26px; | |
| margin: 0; | |
| font-weight: 400; | |
| color: #55311c; | |
| } | |
| &-desc { | |
| margin: 6px 0 30px 0; | |
| } | |
| &-left { | |
| padding: 60px 30px 20px; | |
| background: #fff; | |
| flex: 1.5; | |
| transition-duration: 0.5s; | |
| transform: translateY(80px); | |
| opacity: 0; | |
| } | |
| &-button { | |
| color: darken(#8c7569, 5%); | |
| font-family: "Nunito", sans-serif; | |
| font-size: 18px; | |
| cursor: pointer; | |
| border: 0; | |
| outline: 0; | |
| padding: 10px 40px; | |
| border-radius: 30px; | |
| background: rgb(255, 255, 255); | |
| box-shadow: 0 10px 40px rgba(0, 0, 0, 0.16); | |
| transition: 0.3s; | |
| &:hover { | |
| border-color: rgba(255, 255, 255, 0.2); | |
| background: rgba(#fff, 0.8); | |
| } | |
| } | |
| &-right { | |
| flex: 2; | |
| font-size: 0; | |
| transition: 0.3s; | |
| overflow: hidden; | |
| img { | |
| width: 100%; | |
| height: 100%; | |
| transform: scale(2); | |
| object-fit: cover; | |
| transition-duration: 1.2s; | |
| } | |
| } | |
| &.is-open { | |
| height: 100%; | |
| background: rgba(#333, 0.85); | |
| .modal-button { | |
| opacity: 0; | |
| } | |
| .modal-container { | |
| opacity: 1; | |
| transition-duration: 0.6s; | |
| pointer-events: auto; | |
| transform: translateY(0) scale(1); | |
| } | |
| .modal-right img { | |
| transform: scale(1); | |
| } | |
| .modal-left { | |
| transform: translateY(0); | |
| opacity: 1; | |
| transition-delay: 0.1s; | |
| } | |
| } | |
| &-buttons { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| a { | |
| color: rgba(#333, 0.6); | |
| font-size: 14px; | |
| } | |
| } | |
| } | |
| .sign-up { | |
| margin: 60px 0 0; | |
| font-size: 14px; | |
| text-align: center; | |
| a { | |
| color: #8c7569; | |
| } | |
| } | |
| .input-button { | |
| padding: 8px 12px; | |
| outline: none; | |
| border: 0; | |
| color: #fff; | |
| border-radius: 4px; | |
| background: #8c7569; | |
| font-family: "Nunito", sans-serif; | |
| transition: 0.3s; | |
| cursor: pointer; | |
| &:hover { | |
| background: #55311c; | |
| } | |
| } | |
| .input-label { | |
| font-size: 11px; | |
| text-transform: uppercase; | |
| font-family: "Nunito", sans-serif; | |
| font-weight: 600; | |
| letter-spacing: 0.7px; | |
| color: #8c7569; | |
| transition: 0.3s; | |
| } | |
| .input-block { | |
| display: flex; | |
| flex-direction: column; | |
| padding: 10px 10px 8px; | |
| border: 1px solid #ddd; | |
| border-radius: 4px; | |
| margin-bottom: 20px; | |
| transition: 0.3s; | |
| input { | |
| outline: 0; | |
| border: 0; | |
| padding: 4px 0 0; | |
| font-size: 14px; | |
| font-family: "Nunito", sans-serif; | |
| &::placeholder { | |
| color: #ccc; | |
| opacity: 1; | |
| } | |
| } | |
| &:focus-within { | |
| border-color: #8c7569; | |
| .input-label { | |
| color: rgba(#8c7569, 0.8); | |
| } | |
| } | |
| } | |
| .icon-button { | |
| outline: 0; | |
| position: absolute; | |
| right: 10px; | |
| top: 12px; | |
| width: 32px; | |
| height: 32px; | |
| border: 0; | |
| background: 0; | |
| padding: 0; | |
| cursor: pointer; | |
| } | |
| .scroll-down { | |
| position: fixed; | |
| top: 50%; | |
| left: 50%; | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| text-align: center; | |
| color: darken(#8c7569, 5%); | |
| font-size: 32px; | |
| font-weight: 800; | |
| transform: translate(-50%, -50%); | |
| svg { | |
| margin-top: 16px; | |
| width: 52px; | |
| fill: currentColor; | |
| } | |
| } | |
| @media(max-width: 750px) { | |
| .modal-container { | |
| width: 90%; | |
| } | |
| .modal-right { | |
| display: none; | |
| } | |
| } |