From a6dc2552790c2c1897497252a4cabf6b31d6d1c9 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Sat, 6 Aug 2022 19:24:47 +0300 Subject: [PATCH] Created lightsaber page --- main/urls.py | 1 + main/views.py | 5 + static/css/lightsaber.css | 212 +++++++++++++++++++++++++++++++++ templates/main/lightsaber.html | 38 ++++++ 4 files changed, 256 insertions(+) create mode 100644 static/css/lightsaber.css create mode 100644 templates/main/lightsaber.html diff --git a/main/urls.py b/main/urls.py index b0fbbf5..0a9d3a3 100644 --- a/main/urls.py +++ b/main/urls.py @@ -3,4 +3,5 @@ from . import views urlpatterns = [ path('', views.index, name='home'), + path('lightsaber', views.lightsaber, name='lightsaber'), ] diff --git a/main/views.py b/main/views.py index b94cd80..18c5b81 100644 --- a/main/views.py +++ b/main/views.py @@ -4,3 +4,8 @@ from django.shortcuts import render def index(request): """Homepage""" return render(request, 'main/index.html', {'title': 'Kristofers Solo Webpage'}) + + +def lightsaber(request): + """Lightsaber page""" + return render(request, 'main/lightsaber.html', {'title': 'Lightsaber'}) diff --git a/static/css/lightsaber.css b/static/css/lightsaber.css new file mode 100644 index 0000000..0c5bfb8 --- /dev/null +++ b/static/css/lightsaber.css @@ -0,0 +1,212 @@ +:root { + --blade-hue: 120; + --blade-lightness: 50%; +} + +*, +*::before, +*::after { + box-sizing: border-box; +} + +body { + background: #222; + display: grid; + grid-template-columns: repeat(6, 1fr); + grid-template-rows: 100px 50px 1fr; + min-height: 100vh; + place-items: center; + font-family: 'Source Sans Pro', sans-serif; + text-transform: uppercase; + font-size: 1.5rem; +} + +/* The color pickers */ + +[name='color'] { + grid-row: 1 / 2; + align-self: end; + margin: 0.5em; +} + +label:not(.hilt) { + color: white; + font-weight: bold; + align-self: start; +} + +/* Lightsaber styling */ + +.lightsaber { + margin-top: 25vh; + grid-column: 1 / -1; + position: relative; +} + +#on-off { + position: absolute; + width: 0; + height: 0; +} + +.hilt { + cursor: pointer; + display: block; + width: 0.75rem; + height: 7rem; + background-color: red; + border-radius: 0 0 4px 4px; + background-image: linear-gradient( + silver 0 10px, + hsl(39 75% 50%) 0 14px, + silver 0 15px, + black 0 20px, + silver 0 22px, + black 0 25px, + silver 0 27px, + black 0 30px, + silver 0 32px, + black 0 35px, + silver 0 37px, + black 0 40px, + silver 0 42px, + black 0 45px, + silver 0 47px, + black 0 50px, + silver 0 60px, + hsl(39 75% 50%) 60px 80px, + silver 0 100% + ); +} + +.blade { + position: absolute; + background: white; + height: 350%; + width: 100%; + bottom: 100%; + border-radius: 100vw 100vw 0 0; + box-shadow: inset 0 0 4px + hsl(var(--blade-hue) 100% var(--blade-lightness) / 1), + 0 0 1em hsl(var(--blade-hue) 100% var(--blade-lightness) / 0.8), + 0 0 1.5em hsl(var(--blade-hue) 100% var(--blade-lightness) / 0.7), + 0 0 2em hsl(var(--blade-hue) 100% var(--blade-lightness) / 0.5), + 0 0 3em hsl(var(--blade-hue) 100% var(--blade-lightness) / 0.3), + 0 0 5em hsl(var(--blade-hue) 100% var(--blade-lightness) / 0.2); + + transition: transform 50ms ease-out; + transform-origin: bottom; +} + +.blade::after { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: hsl(var(--blade-hue) 100% var(--blade-lightness)); + border-radius: inherit; + filter: blur(0.5em); + opacity: 1; + -webkit-animation: pulse linear 5s infinite; + animation: pulse linear 5s infinite; +} + +.blade::before { + content: ''; + position: absolute; + top: 0; + bottom: 0; + right: 0; + left: 0; + background: white; + border-radius: inherit; + z-index: 10; +} + +@-webkit-keyframes pulse { + 50% { + opacity: 0.5; + } +} + +@keyframes pulse { + 50% { + opacity: 0.5; + } +} + +/* Turn lightsaber on and off */ + +#on-off:not(:checked) + .blade { + transform: scaleY(0); +} + +#on-off:checked + .blade { + transform: scaleY(1); +} + +/* change the color */ + +#green:checked ~ .lightsaber { + --blade-hue: 120; +} + +#blue:checked ~ .lightsaber { + --blade-hue: 195; +} + +#yellow:checked ~ .lightsaber { + --blade-hue: 60; +} + +#purple:checked ~ .lightsaber { + --blade-hue: 290; +} + +#red:checked ~ .lightsaber { + --blade-hue: 360; +} + +#darksaber:checked ~ .lightsaber { + --blade-lightness: 100%; +} + +#darksaber:checked ~ .lightsaber .blade { + border-radius: 100% / 500px 10px 0 0; +} + +#darksaber:checked ~ .lightsaber .blade::before { + background: black; +} + +/* play sound */ + +embed { + display: none; + position: absolute; + opacity: 0; + pointer-events: 0; + width: 0; + height: 0; +} + +#on-off:checked ~ embed { + display: block; +} + +/* YT link */ +.yt { + color: hsl(0 0% 100% / 0.5); + font-size: 1rem; + padding: 1em; + margin: 0 0 1em 0; + grid-column: 1 / -1; +} + +.yt:hover { + color: white; + text-shadow: 0 0 0.5em hsl(var(--blade-hue) 50% 50%), + 0 0 1em hsl(var(--blade-hue) 50% 50% / 0.75); +} diff --git a/templates/main/lightsaber.html b/templates/main/lightsaber.html new file mode 100644 index 0000000..6e6bf35 --- /dev/null +++ b/templates/main/lightsaber.html @@ -0,0 +1,38 @@ +{% load static %} + + + + + Lightsaber + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +