A how-to for a countdown clock.
A Pen by Matt Smith on CodePen.
A how-to for a countdown clock.
A Pen by Matt Smith on CodePen.
| <div class="container"> | |
| <h1 id="headline">Countdown to my birthday</h1> | |
| <div id="countdown"> | |
| <ul> | |
| <li><span id="days"></span>days</li> | |
| <li><span id="hours"></span>Hours</li> | |
| <li><span id="minutes"></span>Minutes</li> | |
| <li><span id="seconds"></span>Seconds</li> | |
| </ul> | |
| </div> | |
| <div id="content" class="emoji"> | |
| <span>🥳</span> | |
| <span>🎉</span> | |
| <span>🎂</span> | |
| </div> | |
| </div> |
| (function () { | |
| const second = 1000, | |
| minute = second * 60, | |
| hour = minute * 60, | |
| day = hour * 24; | |
| //I'm adding this section so I don't have to keep updating this pen every year :-) | |
| //remove this if you don't need it | |
| let today = new Date(), | |
| dd = String(today.getDate()).padStart(2, "0"), | |
| mm = String(today.getMonth() + 1).padStart(2, "0"), | |
| yyyy = today.getFullYear(), | |
| nextYear = yyyy + 1, | |
| dayMonth = "09/30/", | |
| birthday = dayMonth + yyyy; | |
| today = mm + "/" + dd + "/" + yyyy; | |
| if (today > birthday) { | |
| birthday = dayMonth + nextYear; | |
| } | |
| //end | |
| const countDown = new Date(birthday).getTime(), | |
| x = setInterval(function() { | |
| const now = new Date().getTime(), | |
| distance = countDown - now; | |
| document.getElementById("days").innerText = Math.floor(distance / (day)), | |
| document.getElementById("hours").innerText = Math.floor((distance % (day)) / (hour)), | |
| document.getElementById("minutes").innerText = Math.floor((distance % (hour)) / (minute)), | |
| document.getElementById("seconds").innerText = Math.floor((distance % (minute)) / second); | |
| //do something later when date is reached | |
| if (distance < 0) { | |
| document.getElementById("headline").innerText = "It's my birthday!"; | |
| document.getElementById("countdown").style.display = "none"; | |
| document.getElementById("content").style.display = "block"; | |
| clearInterval(x); | |
| } | |
| //seconds | |
| }, 0) | |
| }()); |
| /* general styling */ | |
| :root { | |
| --smaller: .75; | |
| } | |
| * { | |
| box-sizing: border-box; | |
| margin: 0; | |
| padding: 0; | |
| } | |
| html, body { | |
| height: 100%; | |
| margin: 0; | |
| } | |
| body { | |
| align-items: center; | |
| background-color: #ffd54f; | |
| display: flex; | |
| font-family: -apple-system, | |
| BlinkMacSystemFont, | |
| "Segoe UI", | |
| Roboto, | |
| Oxygen-Sans, | |
| Ubuntu, | |
| Cantarell, | |
| "Helvetica Neue", | |
| sans-serif; | |
| } | |
| .container { | |
| color: #333; | |
| margin: 0 auto; | |
| text-align: center; | |
| } | |
| h1 { | |
| font-weight: normal; | |
| letter-spacing: .125rem; | |
| text-transform: uppercase; | |
| } | |
| li { | |
| display: inline-block; | |
| font-size: 1.5em; | |
| list-style-type: none; | |
| padding: 1em; | |
| text-transform: uppercase; | |
| } | |
| li span { | |
| display: block; | |
| font-size: 4.5rem; | |
| } | |
| .emoji { | |
| display: none; | |
| padding: 1rem; | |
| } | |
| .emoji span { | |
| font-size: 4rem; | |
| padding: 0 .5rem; | |
| } | |
| @media all and (max-width: 768px) { | |
| h1 { | |
| font-size: calc(1.5rem * var(--smaller)); | |
| } | |
| li { | |
| font-size: calc(1.125rem * var(--smaller)); | |
| } | |
| li span { | |
| font-size: calc(3.375rem * var(--smaller)); | |
| } | |
| } |