styles
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
/* Verschieben Sie alle .sidebar... und .nav-item... Klassen aus styles.css hierher */
|
||||
:host {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.sidebar {
|
||||
width: 260px;
|
||||
height: 100vh;
|
||||
position: sticky;
|
||||
top: 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding: 1.5rem;
|
||||
background: var(--glass-bg);
|
||||
backdrop-filter: var(--glass-backdrop-filter);
|
||||
-webkit-backdrop-filter: var(--glass-backdrop-filter);
|
||||
border-right: 1px solid var(--color-border);
|
||||
transition: background-color var(--transition-speed),
|
||||
border-color var(--transition-speed);
|
||||
}
|
||||
.sidebar-header {
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
.sidebar-title {
|
||||
font-size: 1.5rem;
|
||||
font-weight: 900;
|
||||
}
|
||||
.sidebar-nav {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 0.5rem;
|
||||
flex-grow: 1;
|
||||
}
|
||||
.sidebar-footer {
|
||||
margin-top: auto;
|
||||
}
|
||||
.nav-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 1rem;
|
||||
padding: 0.75rem 1rem;
|
||||
border-radius: var(--border-radius-md);
|
||||
color: var(--color-text-light);
|
||||
font-weight: 500;
|
||||
text-decoration: none;
|
||||
transition: all var(--transition-speed);
|
||||
}
|
||||
.nav-item app-icon {
|
||||
font-size: 20px; /* Steuert die Größe des Icons */
|
||||
transition: color var(--transition-speed);
|
||||
}
|
||||
.nav-item:hover {
|
||||
background-color: rgba(0, 0, 0, 0.05);
|
||||
color: var(--color-text);
|
||||
}
|
||||
:host-context(body.dark-theme) .nav-item:hover {
|
||||
background-color: rgba(255, 255, 255, 0.05);
|
||||
}
|
||||
.nav-item.active {
|
||||
background: var(--color-primary-gradient);
|
||||
color: #fff;
|
||||
box-shadow: 0 4px 10px rgba(52, 152, 219, 0.4);
|
||||
}
|
||||
.nav-item.active app-icon {
|
||||
color: #fff;
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
<aside class="sidebar">
|
||||
<div class="sidebar-header">
|
||||
<h1 class="sidebar-title">CustomDash</h1>
|
||||
</div>
|
||||
|
||||
<nav class="sidebar-nav">
|
||||
<a
|
||||
class="nav-item"
|
||||
[class.active]="activeRoute === 'dashboard'"
|
||||
(click)="setActive('dashboard')"
|
||||
>
|
||||
<app-icon name="placeholder"></app-icon>
|
||||
<span>Übersicht</span>
|
||||
</a>
|
||||
|
||||
<a
|
||||
class="nav-item"
|
||||
[class.active]="activeRoute === 'analytics'"
|
||||
(click)="setActive('analytics')"
|
||||
>
|
||||
<app-icon name="placeholder"></app-icon>
|
||||
<span>Analysen</span>
|
||||
</a>
|
||||
|
||||
<a
|
||||
class="nav-item"
|
||||
[class.active]="activeRoute === 'reports'"
|
||||
(click)="setActive('reports')"
|
||||
>
|
||||
<app-icon name="placeholder"></app-icon>
|
||||
<span>Berichte</span>
|
||||
</a>
|
||||
</nav>
|
||||
|
||||
<div class="sidebar-footer">
|
||||
<a
|
||||
class="nav-item"
|
||||
[class.active]="activeRoute === 'settings'"
|
||||
(click)="setActive('settings')"
|
||||
>
|
||||
<app-icon name="placeholder"></app-icon>
|
||||
<span>Einstellungen</span>
|
||||
</a>
|
||||
</div>
|
||||
</aside>
|
||||
@@ -0,0 +1,21 @@
|
||||
import { Component } from '@angular/core';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { IconComponent } from '../../ui/icon/icon.component';
|
||||
|
||||
@Component({
|
||||
selector: 'app-sidebar',
|
||||
standalone: true,
|
||||
imports: [CommonModule, IconComponent],
|
||||
templateUrl: './sidebar.component.html',
|
||||
styleUrl: './sidebar.component.css'
|
||||
})
|
||||
export class SidebarComponent {
|
||||
// Wir verwalten nur noch, welcher Link aktiv ist. 'dashboard' ist der Standard.
|
||||
activeRoute = 'dashboard';
|
||||
|
||||
// Methode, um den aktiven Link bei einem Klick zu ändern.
|
||||
// In einer echten App würde dies durch den Angular Router gesteuert werden.
|
||||
setActive(route: string): void {
|
||||
this.activeRoute = route;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user