This commit is contained in:
Tizian.Breuch
2025-09-17 14:51:47 +02:00
parent c17bec1ca0
commit 0d5ac83c77
5 changed files with 64 additions and 33 deletions

View File

@@ -1,13 +1,39 @@
:host { :host {
display: block; display: block;
} /* Stellt sicher, dass der Host-Container die volle Höhe einnimmt */
.main-layout-container { height: 100vh;
display: flex;
background-color: var(--color-body-bg);
}
.main-content {
flex-grow: 1;
overflow-y: auto;
padding: 2rem;
} }
.main-layout-container {
padding:2rem;
display: grid;
height: 100%; /* Wichtig, damit das Grid die Höhe vom Host erbt */
/*
* TEMPLATE-SPALTEN (COLUMNS)
* 1. Spalte (Sidebar): `auto` -> Die Breite passt sich dem Inhalt der Sidebar an ("fit content").
* Die restlichen 4 Spalten teilen sich den verbleibenden Platz.
*/
grid-template-columns: auto repeat(4, 1fr);
/*
* TEMPLATE-REIHEN (ROWS)
* 1. Reihe (Header): `auto` -> Die Höhe passt sich dem Inhalt des Headers an ("fit content").
* Die restlichen 4 Reihen teilen sich den verbleibenden Platz.
*/
grid-template-rows: auto repeat(4, 1fr);
/* Abstände können bei Bedarf hinzugefügt werden */
grid-column-gap: 0px;
grid-row-gap: 0px;
}
/* Diese Regeln bleiben unverändert, da sie korrekt sind */
app-page-header { grid-area: 1 / 1 / 2 / 6; }
app-sidebar { grid-area: 2 / 1 / 6 / 2; }
.main-content {
padding:2rem;
padding-right: 0;
grid-area: 2 / 2 / 6 / 6;
overflow-y: auto; /* Fügt Scrollen hinzu, falls der Inhalt den Bereich übersteigt */
}

View File

@@ -1,5 +1,6 @@
<div class="main-layout-container"> <div class="main-layout-container">
<app-sidebar></app-sidebar> <app-sidebar></app-sidebar>
<app-page-header></app-page-header>
<div class="main-content"> <div class="main-content">
<router-outlet></router-outlet> <router-outlet></router-outlet>
</div> </div>

View File

@@ -1,10 +1,11 @@
import { Component } from '@angular/core'; import { Component } from '@angular/core';
import { SidebarComponent } from '../../../shared/components/layout/sidebar/sidebar.component'; import { SidebarComponent } from '../../../shared/components/layout/sidebar/sidebar.component';
import { RouterOutlet } from '@angular/router'; import { RouterOutlet } from '@angular/router';
import { PageHeaderComponent } from '../../../shared/components/layout/page-header/page-header.component';
@Component({ @Component({
selector: 'app-default-layout', selector: 'app-default-layout',
imports: [SidebarComponent,RouterOutlet], imports: [SidebarComponent,PageHeaderComponent,RouterOutlet],
templateUrl: './default-layout.component.html', templateUrl: './default-layout.component.html',
styleUrl: './default-layout.component.css' styleUrl: './default-layout.component.css'
}) })

View File

@@ -1,10 +1,10 @@
/* Globale Variablen für einfachere Wartung */ /* Globale Variablen für dieses Bauteil */
:host { :host {
--sidebar-width-expanded: 280px; --sidebar-width-expanded: 280px;
--sidebar-width-collapsed: 96px; --sidebar-width-collapsed: 96px;
--sidebar-padding: 1rem; --sidebar-padding: 1rem;
--sidebar-margin: 1rem; --sidebar-margin: 1rem; /* Angenommen, da es in Ihrem globalen CSS nicht vorhanden war */
--transition-speed: 0.35s; --transition-speed: 0.35s; /* Lokale Geschwindigkeit für spezifische Sidebar-Animationen */
--transition-ease: cubic-bezier(0.4, 0, 0.2, 1); --transition-ease: cubic-bezier(0.4, 0, 0.2, 1);
} }
@@ -16,11 +16,11 @@
gap: 2rem; gap: 2rem;
width: var(--sidebar-width-expanded); width: var(--sidebar-width-expanded);
height: calc(100vh - (var(--sidebar-margin) * 2)); height: calc(100vh - (var(--sidebar-margin) * 2));
margin: var(--sidebar-margin); /* margin: var(--sidebar-margin); */
padding: var(--sidebar-padding); padding: var(--sidebar-padding);
background-color: #fff; /* background-color: var(--color-surface); ANGEPASST */
border: 1px solid #e5e7eb; /* border: 1px solid var(--color-border); ANGEPASST */
border-radius: 1rem; border-radius: var(--border-radius-md); /* ANGEPASST */
transition: width var(--transition-speed) var(--transition-ease); transition: width var(--transition-speed) var(--transition-ease);
} }
@@ -37,13 +37,14 @@
flex-shrink: 0; flex-shrink: 0;
width: 32px; width: 32px;
height: 32px; height: 32px;
color: #111827; color: var(--color-primary); /* ANGEPASST für Akzent */
} }
.sidebar-title { .sidebar-title {
margin: 0; margin: 0;
font-size: 1.25rem; font-size: 1.25rem;
font-weight: 600; font-weight: 600;
color: var(--color-text); /* ANGEPASST */
white-space: nowrap; white-space: nowrap;
clip-path: inset(0 0% 0 0); clip-path: inset(0 0% 0 0);
transition: clip-path var(--transition-speed) var(--transition-ease); transition: clip-path var(--transition-speed) var(--transition-ease);
@@ -63,21 +64,23 @@
display: flex; display: flex;
align-items: center; align-items: center;
padding: 0.75rem 1rem; padding: 0.75rem 1rem;
border-radius: 0.5rem; border-radius: var(--border-radius-md); /* ANGEPASST */
text-decoration: none; text-decoration: none;
font-weight: 500; font-weight: 500;
color: #4b5563; color: var(--color-text-light); /* ANGEPASST */
white-space: nowrap; white-space: nowrap;
transition: background-color 0.2s, color 0.2s; transition: background-color 0.2s, color 0.2s;
overflow: hidden; overflow: hidden;
position: relative; position: relative;
} }
.nav-item:hover { .nav-item:hover {
background-color: #f3f4f6; background-color: var(--color-body-bg-hover); /* ANGEPASST */
color: var(--color-text); /* ANGEPASST */
} }
.nav-item.active { .nav-item.active {
background-color: #3b82f6; background: var(--color-primary); /* ANGEPASST */
color: #fff; color: #fff;
box-shadow: var(--box-shadow-sm); /* ANGEPASST für Tiefe */
} }
.nav-item app-icon { .nav-item app-icon {
font-size: 1.25rem; font-size: 1.25rem;
@@ -85,9 +88,7 @@
flex-shrink: 0; flex-shrink: 0;
position: relative; position: relative;
z-index: 2; z-index: 2;
/* NEU: Fester Start-Hintergrund (Farbe der Sidebar) statt 'inherit' */ background-color: transparent; /* ANGEPASST */
background-color: #fff;
/* NEU: Fügt eine sanfte Transition für den Farbwechsel hinzu */
transition: background-color 0.2s; transition: background-color 0.2s;
} }
.nav-item span { .nav-item span {
@@ -104,9 +105,9 @@
.sidebar-toggle-btn { .sidebar-toggle-btn {
position: absolute; position: absolute;
border-radius: 50%; border-radius: 50%;
top: calc(var(--sidebar-padding) + 4px); top: calc(var(--sidebar-padding) + 5px);
right: var(--sidebar-padding); right: var(--sidebar-padding);
transform: rotate(180deg); transform: scale(0.55) rotate(180deg);
transition: top var(--transition-speed) var(--transition-ease), transition: top var(--transition-speed) var(--transition-ease),
right var(--transition-speed) var(--transition-ease), right var(--transition-speed) var(--transition-ease),
transform var(--transition-speed) var(--transition-ease), transform var(--transition-speed) var(--transition-ease),
@@ -127,17 +128,19 @@
clip-path: inset(0 100% 0 0); clip-path: inset(0 100% 0 0);
margin-left: -20px; margin-left: -20px;
pointer-events: none; pointer-events: none;
} }
.sidebar.collapsed .sidebar-toggle-btn { .sidebar.collapsed .sidebar-toggle-btn {
right: -18px;
transform: rotate(0deg); right: -2px;
transform: scale(0.55) rotate(0deg); /* Hinzugefügt für vertikale Zentrierung */
/* box-shadow: var(--box-shadow-md); ANGEPASST */
} }
/* 6. Zustandsabhängige Hintergrundfarben für das Icon */
.nav-item:hover app-icon { .nav-item:hover app-icon {
background-color: #f3f4f6; /* Derselbe Hintergrund wie .nav-item:hover */ background-color: transparent; /* ANGEPASST */
} }
.nav-item.active app-icon { .nav-item.active app-icon {
background-color: #3b82f6; /* Derselbe Hintergrund wie .nav-item.active */ background: transparent;
} }