diff options
| -rw-r--r-- | assets/css/objects/_icon.scss | 15 | ||||
| -rw-r--r-- | content/script.js | 22 | ||||
| -rw-r--r-- | content/symbols.svg | 4 | ||||
| -rw-r--r-- | templates/base.html | 2 |
4 files changed, 43 insertions, 0 deletions
diff --git a/assets/css/objects/_icon.scss b/assets/css/objects/_icon.scss index cbce5cf..6718c50 100644 --- a/assets/css/objects/_icon.scss +++ b/assets/css/objects/_icon.scss | |||
| @@ -1,4 +1,10 @@ | |||
| 1 | @include namespace('icon') { | 1 | @include namespace('icon') { |
| 2 | @keyframes fall { | ||
| 3 | to { | ||
| 4 | transform: translateY(105vh) rotate(90deg); | ||
| 5 | } | ||
| 6 | } | ||
| 7 | |||
| 2 | @include object(namespace()) { | 8 | @include object(namespace()) { |
| 3 | display: block; | 9 | display: block; |
| 4 | width: 16px; | 10 | width: 16px; |
| @@ -11,5 +17,14 @@ | |||
| 11 | display: inline-block; | 17 | display: inline-block; |
| 12 | vertical-align: -.1em; | 18 | vertical-align: -.1em; |
| 13 | } | 19 | } |
| 20 | |||
| 21 | @include modifier('snow') { | ||
| 22 | position: fixed; | ||
| 23 | z-index: 9999; | ||
| 24 | top: -20px; | ||
| 25 | animation: fall linear forwards; | ||
| 26 | stroke-width: 2px; | ||
| 27 | color: #fff; | ||
| 28 | } | ||
| 14 | } | 29 | } |
| 15 | } | 30 | } |
diff --git a/content/script.js b/content/script.js new file mode 100644 index 0000000..5702edf --- /dev/null +++ b/content/script.js | |||
| @@ -0,0 +1,22 @@ | |||
| 1 | function createSnowFlake() { | ||
| 2 | const snowFlake = document.createElementNS("http://www.w3.org/2000/svg", "svg"); | ||
| 3 | const snowFlakeInner = document.createElementNS("http://www.w3.org/2000/svg", "use"); | ||
| 4 | |||
| 5 | snowFlakeInner.setAttribute("href", "/symbols.svg#icon-asterisk"); | ||
| 6 | |||
| 7 | snowFlake.classList.add("o-icon"); | ||
| 8 | snowFlake.classList.add("o-icon--snow"); | ||
| 9 | snowFlake.ariaHidden = true; | ||
| 10 | |||
| 11 | snowFlake.style.width = Math.random() * 10 + 10 + 'px'; | ||
| 12 | snowFlake.style.left = Math.random() * window.innerWidth + 'px'; | ||
| 13 | snowFlake.style.animationDuration = Math.random() * 3 + 2 + 's'; | ||
| 14 | snowFlake.style.opacity = Math.random(); | ||
| 15 | |||
| 16 | snowFlake.appendChild(snowFlakeInner); | ||
| 17 | document.body.appendChild(snowFlake); | ||
| 18 | |||
| 19 | setTimeout(() => { snowFlake.remove(); }, 5000); | ||
| 20 | } | ||
| 21 | |||
| 22 | window.addEventListener("load", () => { setInterval(createSnowFlake, 100); }) | ||
diff --git a/content/symbols.svg b/content/symbols.svg index df6ddd9..97992fc 100644 --- a/content/symbols.svg +++ b/content/symbols.svg | |||
| @@ -8,6 +8,10 @@ | |||
| 8 | 8 | ||
| 9 | <symbol id="icon-blank" viewBox="0 0 16 16" preserveAspectRatio="xMinYMid"></symbol> | 9 | <symbol id="icon-blank" viewBox="0 0 16 16" preserveAspectRatio="xMinYMid"></symbol> |
| 10 | 10 | ||
| 11 | <symbol id="icon-asterisk" viewBox="0 0 16 16" preserveAspectRatio="xMinYMid"> | ||
| 12 | <path d="m7.75 1.25v14m-6-10.5 12 7m-12 0 12-7" fill="none" stroke="currentColor" /> | ||
| 13 | </symbol> | ||
| 14 | |||
| 11 | <symbol id="icon-arrow-left" viewBox="0 0 16 16" preserveAspectRatio="xMinYMid"> | 15 | <symbol id="icon-arrow-left" viewBox="0 0 16 16" preserveAspectRatio="xMinYMid"> |
| 12 | <path d="m7.25 3.75-4.5 4.5 4.5 4.5m-4.5-4.5h10.5" fill="none" stroke="currentColor" /> | 16 | <path d="m7.25 3.75-4.5 4.5 4.5 4.5m-4.5-4.5h10.5" fill="none" stroke="currentColor" /> |
| 13 | </symbol> | 17 | </symbol> |
diff --git a/templates/base.html b/templates/base.html index 353a2bd..c1e1f4f 100644 --- a/templates/base.html +++ b/templates/base.html | |||
| @@ -82,6 +82,8 @@ ${layouts/page()} | |||
| 82 | <pre class="c-footer__ascii u-dn@sm-hi">${partials/ascii_fox_small()}</pre> | 82 | <pre class="c-footer__ascii u-dn@sm-hi">${partials/ascii_fox_small()}</pre> |
| 83 | </div> | 83 | </div> |
| 84 | </footer> | 84 | </footer> |
| 85 | |||
| 86 | <script src="/script.js"></script> | ||
| 85 | </body> | 87 | </body> |
| 86 | 88 | ||
| 87 | </html> | 89 | </html> |
