Refactor base layout: implement responsive navbar with scroll shrink effect, revamp sidebar structure and styles, and refine footer.
This commit is contained in:
@@ -1,7 +1,61 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
|
|
||||||
{% block sidebar %}
|
{% block sidebar %}
|
||||||
<div class="flex flex-col gap-4 w-full">
|
<div class="section group">
|
||||||
|
<div class="section-title">Section 1</div>
|
||||||
|
<div class="section-items">
|
||||||
|
<div>Item 1</div>
|
||||||
|
<div>Item 2</div>
|
||||||
|
<div>Item 3</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="section group">
|
||||||
|
<div class="section-title">Section 1</div>
|
||||||
|
<div class="section-items">
|
||||||
|
<div>Item 1</div>
|
||||||
|
<div>Item 2</div>
|
||||||
|
<div>Item 3</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="section group">
|
||||||
|
<div class="section-title">Section 1</div>
|
||||||
|
<div class="section-items">
|
||||||
|
<div>Item 1</div>
|
||||||
|
<div>Item 2</div>
|
||||||
|
<div>Item 3</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="section group">
|
||||||
|
<div class="section-title">Section 1</div>
|
||||||
|
<div class="section-items">
|
||||||
|
<div>Item 1</div>
|
||||||
|
<div>Item 2</div>
|
||||||
|
<div>Item 3</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="section group">
|
||||||
|
<div class="section-title">Section 2</div>
|
||||||
|
<div class="section-items">
|
||||||
|
<div>Item 1</div>
|
||||||
|
<div>Item 2</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="section group">
|
||||||
|
<div class="section-title">Section 3</div>
|
||||||
|
<div class="section-items">
|
||||||
|
<div>Item 1</div>
|
||||||
|
<div>Item 2</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{% comment %}<div class="flex flex-col gap-4 w-full">
|
||||||
<div class="flex flex-col gap-1">
|
<div class="flex flex-col gap-1">
|
||||||
<div class="text-neutral border-b border-neutral font-bold text-sm opacity-40 mb-2">Members</div>
|
<div class="text-neutral border-b border-neutral font-bold text-sm opacity-40 mb-2">Members</div>
|
||||||
<a class="flex flex-row gap-2 items-center hover:bg-neutral-content rounded-md p-2 cursor-default hover:cursor-pointer">
|
<a class="flex flex-row gap-2 items-center hover:bg-neutral-content rounded-md p-2 cursor-default hover:cursor-pointer">
|
||||||
@@ -31,5 +85,5 @@
|
|||||||
<i class="fa-solid fa-users w-5 h-5 mr-2 self-center"></i>Members
|
<i class="fa-solid fa-users w-5 h-5 mr-2 self-center"></i>Members
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>{% endcomment %}
|
||||||
{% endblock sidebar %}
|
{% endblock sidebar %}
|
||||||
@@ -22,91 +22,120 @@
|
|||||||
<link href="{% static "css/brands.css" %}" rel="stylesheet"/>
|
<link href="{% static "css/brands.css" %}" rel="stylesheet"/>
|
||||||
|
|
||||||
{% tailwind_css %}
|
{% tailwind_css %}
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.navbar-shrink {
|
||||||
|
height: 3rem !important;
|
||||||
|
transition: height 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-normal {
|
||||||
|
height: 6rem;
|
||||||
|
transition: height 0.2s ease;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body class="flex flex-col h-screen">
|
||||||
<header id="site-header" class="sticky top-0 z-50 bg-white shadow transition-all duration-300">
|
<!-- NAVBAR -->
|
||||||
<div class="mx-auto max-w-6xl px-6 py-4 flex items-center justify-between transition-all duration-300">
|
<header id="mainNavbar" class="navbar-normal navbar bg-base-200 sticky top-0 z-50 shadow">
|
||||||
<h1 class="text-2xl font-bold tracking-tight transition-all duration-300">MY LOGO</h1>
|
<div class="flex-none lg:hidden">
|
||||||
|
<!-- Mobile sidebar toggle -->
|
||||||
|
<label for="sidebar-toggle" class="btn btn-square btn-ghost">
|
||||||
|
<i class="fa-solid fa-bars text-xl"></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
<nav class="flex items-center space-x-6 text-lg">
|
<div class="flex-1 flex items-center gap-3">
|
||||||
<a href="#" class="hover:text-blue-600 transition-colors">Home</a>
|
<img src="{% static config.TF_CLUB_LOGO %}" class="h-10" alt="{{ config.TF_CLUB_NAME }} logo">
|
||||||
<a href="#" class="hover:text-blue-600 transition-colors">About</a>
|
<span class="text-xl font-bold font-jersey">{{ config.TF_CLUB_NAME }}</span>
|
||||||
<a href="#" class="hover:text-blue-600 transition-colors">Contact</a>
|
</div>
|
||||||
</nav>
|
|
||||||
|
<div class="flex-none flex items-center gap-4">
|
||||||
|
<!-- Notifications -->
|
||||||
|
<button class="btn btn-ghost btn-circle">
|
||||||
|
<i class="fa-solid fa-bell text-xl"></i>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<!-- Avatar -->
|
||||||
|
<div class="dropdown dropdown-end">
|
||||||
|
<div tabindex="0" role="button" class="btn btn-ghost btn-circle avatar avatar-placeholder">
|
||||||
|
<div class="w-10 rounded-full bg-neutral text-neutral-content">
|
||||||
|
<span class="font-jersey">BS</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<ul tabindex="-1" class="menu menu-sm dropdown-content bg-base-100 rounded-box z-1 mt-3 w-52 p-2 shadow">
|
||||||
|
<li>
|
||||||
|
<a class="justify-between">
|
||||||
|
Profile
|
||||||
|
<span class="badge">New</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li><a>Settings</a></li>
|
||||||
|
<li><a>Logout</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Login/Logout -->
|
||||||
|
{% if user.is_authenticated %}
|
||||||
|
<a href="" class="btn btn-outline btn-sm">Logout</a>
|
||||||
|
{% else %}
|
||||||
|
<a href="" class="btn btn-outline btn-sm">Login</a>
|
||||||
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<main class="mx-auto max-w-6xl px-6 pt-8 space-y-8">
|
<div class="flex flex-1 drawer lg:drawer-open h-[calc(100vh-7.5rem)]">
|
||||||
<p class="text-gray-700">
|
<!-- Hidden checkbox for mobile sidebar -->
|
||||||
Scroll down to see the navbar shrink
|
<input type="checkbox" id="sidebar-toggle" class="drawer-toggle">
|
||||||
</p>
|
|
||||||
|
|
||||||
<div class="h-[2000px] bg-gray-200 rounded-lg"></div>
|
<!-- SIDEBAR -->
|
||||||
</main>
|
<aside class="drawer-side z-60 lg:z-auto">
|
||||||
|
<label for="sidebar-toggle" class="drawer-overlay"></label>
|
||||||
|
|
||||||
|
<div class="w-64 bg-base-200 border-r p-4 h-full lg:h-fit lg:border-none lg:m-4 lg:rounded-md">
|
||||||
{% comment %}<div class="navbar bg-base-200 shadow-sm sticky top-0 z-10">
|
<ul class="menu">
|
||||||
<div class="flex-1">
|
<li class="menu-title">Navigation</li>
|
||||||
<label for="drawer-button" aria-label="open sidebar" class="btn btn-square btn-outline lg:hidden">
|
<li><a href="#"><i class="fa-solid fa-house"></i> Dashboard</a></li>
|
||||||
<!-- Sidebar toggle icon -->
|
<li><a href="#"><i class="fa-solid fa-calendar"></i> Calendar</a></li>
|
||||||
<i class="fa-solid fa-bars"></i>
|
<li><a href="#"><i class="fa-solid fa-users"></i> Members</a></li>
|
||||||
</label>
|
<li><a href="#"><i class="fa-solid fa-gear"></i> Settings</a></li>
|
||||||
|
</ul>
|
||||||
<div class="flex flex-row items-center px-4 py-2 gap-4">
|
|
||||||
{% if config.TF_CLUB_LOGO != "teamforge/logo.png" %}
|
|
||||||
<img class="max-h-18 transform-gpu mask mask-circle" src="{% static config.TF_CLUB_LOGO %}" alt="{{ config.TF_CLUB_NAME }} Logo"/>
|
|
||||||
{% else %}
|
|
||||||
<img class="max-h-18 transform-gpu" src="{% static config.TF_CLUB_LOGO %}" alt="{{ config.TF_CLUB_NAME }} Logo"/>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
<a class="font-jersey text-4xl">{{ config.TF_CLUB_NAME }}</a>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</aside>
|
||||||
|
|
||||||
<div class="mr-2 flex flex-row gap-2">
|
<!-- MAIN CONTENT-->
|
||||||
<div class="avatar avatar-placeholder">
|
<div class="drawer-content flex flex-col">
|
||||||
<div class="bg-neutral text-neutral-content w-12 rounded-full">
|
<main class="flex-1 p-6 bg-base-100">
|
||||||
<span>BS</span>
|
{% block content %}
|
||||||
</div>
|
<h1 class="text-3xl font-bold">Welcome!</h1>
|
||||||
</div>
|
<p>This is your main content area.</p>
|
||||||
|
{% endblock %}
|
||||||
|
</main>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="drawer lg:drawer-open">
|
<!-- FOOTER -->
|
||||||
<input id="drawer-button" type="checkbox" class="drawer-toggle"/>
|
<footer class="footer footer-center p-4 bg-neutral text-neutral-content mt-auto">
|
||||||
<div class="drawer-content flex flex-col items-center justify-center">
|
<p>© {% now "Y" %} TeamForge — All rights reserved.</p>
|
||||||
{% block content %}PAGE CONTENT{% endblock content %}
|
</footer>
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="drawer-side z-0">
|
<script>
|
||||||
<label for="drawer-button" aria-label="close sidebar" class="drawer-overlay"></label>
|
{% comment %}// Shrinking navbar on scroll
|
||||||
<div class="flex min-h-full flex-col items-start bg-base-200 py-4 px-8">
|
const navbar = document.getElementById("mainNavbar");
|
||||||
{% block sidebar %}SIDEBAR CONTENT{% endblock sidebar %}
|
let lastScroll = 0; window.addEventListener("scroll", () => {
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>{% endcomment %}
|
|
||||||
</body>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
document.addEventListener("DOMContentLoaded", () => {
|
|
||||||
const header = document.getElementById("site-header");
|
|
||||||
let lastScrollY = window.scrollY;
|
|
||||||
const threshold = 40; // Amount to scroll before shrinking
|
|
||||||
|
|
||||||
const onScroll = () => {
|
|
||||||
const current = window.scrollY;
|
const current = window.scrollY;
|
||||||
|
|
||||||
if (current > threshold) {
|
if (current > lastScroll && current > 50) {
|
||||||
header.classList.add("navbar-small");
|
navbar.classList.add("navbar-shrink");
|
||||||
|
navbar.classList.remove("navbar-normal");
|
||||||
} else {
|
} else {
|
||||||
header.classList.remove("navbar-small");
|
navbar.classList.add("navbar-normal");
|
||||||
|
navbar.classList.remove("navbar-shrink");
|
||||||
}
|
}
|
||||||
|
|
||||||
lastScrollY = current;
|
lastScroll = current;
|
||||||
};
|
});{% endcomment %}
|
||||||
|
</script>
|
||||||
window.addEventListener("scroll", onScroll, {passive: true});
|
</body>
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</html>
|
</html>
|
||||||
@@ -1,5 +1 @@
|
|||||||
{% extends "backend/base.html" %}
|
{% extends "backend/base.html" %}
|
||||||
|
|
||||||
{% block content %}
|
|
||||||
<div class="h-full">1</div>
|
|
||||||
{% endblock content %}
|
|
||||||
@@ -22,18 +22,56 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
@layer utilities {
|
@layer utilities {
|
||||||
.navbar-small {
|
|
||||||
|
|
||||||
|
/*.navbar-small {
|
||||||
}
|
}
|
||||||
|
|
||||||
.navbar-small > div {
|
.navbar-small > div {
|
||||||
@apply py-1;
|
@apply py-2;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navbar-small h1 {
|
.navbar-small h1 {
|
||||||
@apply text-lg;
|
@apply text-lg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.navbar-small > div img {
|
||||||
|
@apply max-h-8;
|
||||||
|
}
|
||||||
|
|
||||||
.navbar-small nav {
|
.navbar-small nav {
|
||||||
@apply text-base;
|
@apply text-base;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.navbar-small nav div.avatar > div {
|
||||||
|
@apply w-6;
|
||||||
|
@apply text-xs;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
/* #sidebar {
|
||||||
|
@apply flex flex-row gap-4 lg:flex-col;
|
||||||
|
@apply lg:min-w-64;
|
||||||
|
@apply mx-auto lg:mx-0;
|
||||||
|
}
|
||||||
|
|
||||||
|
!* Each section is a group, stacked title + items *!
|
||||||
|
#sidebar > div.section {
|
||||||
|
@apply flex flex-col gap-2;
|
||||||
|
}
|
||||||
|
|
||||||
|
!* Title stays simple, click/hover target *!
|
||||||
|
#sidebar > div.section > div.section-title {
|
||||||
|
@apply cursor-pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
!* Items: - small: hidden by default, show on hover - large: flex as in your original design *!
|
||||||
|
#sidebar > div.section > div.section-items {
|
||||||
|
@apply hidden group-hover:flex flex-col gap-2;
|
||||||
|
@apply bg-red-600;
|
||||||
|
@apply lg:flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
#sidebar > div.section.open > div.section-items {
|
||||||
|
@apply flex;
|
||||||
|
}*/
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user