diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html index c8ac65d..e0dc3e2 100644 --- a/layouts/_default/baseof.html +++ b/layouts/_default/baseof.html @@ -1,7 +1,11 @@ {{ partial "header.html" . }} +{{ partial "navbar.html" . }} + +
{{ block "main" . }} {{ end }} +
{{ partial "scrollTop.html" . }} {{ partial "footer.html" . }} \ No newline at end of file diff --git a/layouts/partials/navbar.html b/layouts/partials/navbar.html new file mode 100644 index 0000000..a766fb6 --- /dev/null +++ b/layouts/partials/navbar.html @@ -0,0 +1,15 @@ + \ No newline at end of file diff --git a/static/main.js b/static/main.js index 02b7f81..3bdb5fe 100644 --- a/static/main.js +++ b/static/main.js @@ -1 +1,38 @@ -// main.js \ No newline at end of file +// Add event listeners +document.addEventListener('DOMContentLoaded', function(){ + console.log("Hello World!"); +}); + +document.querySelector(".nav-toggle").addEventListener('click', function(){ + toggleNav(); +}); + +document.querySelectorAll(".nav-links a").forEach(element => { + element.addEventListener('click', function(){ + toggleNav(); + }); +}); + +// Generic functions +function toggleDisplayByClass(className){ + let items = document.getElementsByClassName(className); + for (const item of items){ + item.style.display = ((item.style.display == "none") ? 'block' : 'none'); + } +} + +function toggleClass(obj, className){ + document.querySelector(obj).classList.toggle(className); +} + +function switchClasses(selector, class1, class2){ + obj = document.querySelector(selector); + obj.classList.toggle(class1); + obj.classList.toggle(class2, !obj.classList.contains(class1)); +} + +// Nav functions +function toggleNav(){ + toggleClass("nav", "open"); + switchClasses(".nav-toggle i", "ai-text-align-right", "ai-cross"); +} \ No newline at end of file diff --git a/static/style.css b/static/style.css index 40b74ab..0702d46 100644 --- a/static/style.css +++ b/static/style.css @@ -1 +1,171 @@ -html{scroll-behavior: smooth;} \ No newline at end of file +/* FONTS */ +@import url('https://fonts.googleapis.com/css2?family=Source+Sans+3:ital,wght@0,200..900;1,200..900&display=swap'); + +/* GENERAL */ +html{scroll-behavior: smooth;} + +body{ + /* STYLING */ + margin: 0; + padding: 0; + background: var(--background); + color: var(--color); + font-family: var(--font); + + /* VARIABLES */ + --primary: #3498db; + --secondary: #2980b9; + --background: #181818; + --color: #f8f8f8; + --font: "Source Sans 3", sans-serif; + --baseRadius: 12px; + --baseTransition: all 250ms; +} + +/* CONTENT */ +.content{ + margin: auto; +} + +.inner-width{ + margin: auto; + width: 100%; + max-width: clamp(1100px, 90%, 1250px); +} + +/* NAVIGATION */ +nav{ + width: 100%; + height: 96px; + background: transparent; + position: fixed; + top: 0; + left: 0; + transition: var(--baseTransition); +} + +nav.small{ + height: 66px; +} + +nav .inner-width{ + height: 100%; + display: flex; + flex-direction: row; + justify-content: space-between; + align-content: center; + align-items: center; +} + +nav img{ + width: auto; + height: 56px; +} + +nav.small img{ + height: 46px; +} + +.nav-links a{ + /* STYLE */ + color: var(--color); + font-size: 1.2rem; + text-decoration: none; + margin: 5px 10px; + + /* HOVER EFFECT */ + position: relative; +} + +.nav-links a:hover, nav a:focus{ + text-decoration: none; +} + +.nav-links a:not(:last-child)::after{ + content: ""; + position: absolute; + top: 100%; + left: 0; + width: 100%; + height: 4px; + background: var(--color); + border-radius: 4px; + transition: var(--baseTransition); + transform: scaleX(0); +} + +.nav-links a:not(:last-child):hover::after{ + transform: scaleX(0.5); +} + +.nav-links a:last-child{ + padding: 5px 16px; + background: var(--primary); + color: var(--color); + border: none; + border-radius: var(--baseRadius); + transition: var(--baseTransition); +} + +.nav-links a:last-child:hover{ + background: var(--secondary); +} + +.nav-toggle{ + display: none; +} + +@media screen and (max-width:640px){ + .nav-toggle{ + display: block; + } + + .nav-links{ + display: none; + } + + nav .inner-width{ + justify-content: space-between; + padding: 0 20px; + box-sizing: border-box; + } + + nav.open{ + height: 100dvh; + background: var(--background); + } + + nav.open .inner-width{ + flex-direction: column; + flex-wrap: wrap; + justify-content: space-around; + align-content: center; + align-items: center; + } + + nav.open .nav-links{ + display: flex; + flex-direction: column; + flex-wrap: wrap; + justify-content: center; + align-content: center; + align-items: center; + } + + nav.open .nav-links a, nav i{ + font-size: 2rem; + } + + nav i{ + font-size: 3rem; + } + + .nav-links a:hover::after{ + display: none; + } + + .nav-links a:last-child{ + background: inherit; + padding: inherit; + } +} \ No newline at end of file