Flexible Layout-Systeme für verschiedene Seiten-Strukturen mit responsivem Verhalten
Jede Seite in diesem Projekt folgt einer konsistenten Struktur mit drei Hauptbereichen: Header (Navbar), Layout-Komponente für den Hauptinhalt, und Footer.
TwoColumnLayoutComponent statt Custom CSS-Klassen. Dies folgt Tailwind Best Practices und bietet eine type-safe, konfigurierbare API. <!-- Grundstruktur jeder Seite -->
<app-navbar-component></app-navbar-component>
<app-two-column-layout
[maxWidth]="'1800px'"
[sidebarWidth]="'350px'"
[stickySidebar]="true"
>
<!-- Header Slot -->
<div header>
<app-page-header
title="Seitentitel"
subtitle="Optional: Untertitel"
></app-page-header>
</div>
<!-- Main Content Slot -->
<div main>
<!-- Ihr Hauptinhalt -->
</div>
<!-- Sidebar Slot -->
<div sidebar>
<!-- Sidebar-Inhalt -->
</div>
<!-- Footer Slot (optional) -->
<div footer>
<!-- Footer-Buttons, Actions -->
</div>
</app-two-column-layout>
<app-footer></app-footer>Für ein sauberes, wartbares und Tailwind-konformes Layout empfehlen wir die Verwendung von Angular Layout-Komponenten statt Custom CSS-Klassen. Diese kapseln die Tailwind-Utilities und bieten eine type-safe, konfigurierbare API.
TwoColumnLayoutComponent. Dies ist der empfohlene Ansatz für neue Seiten. <app-two-column-layout
[maxWidth]="'1800px'"
[sidebarWidth]="'350px'"
[stickySidebar]="true"
[gap]="'lg'"
>
<!-- Header Slot (optional) -->
<div header>
<app-page-header
title="Seitentitel"
subtitle="Untertitel"
></app-page-header>
</div>
<!-- Main Content Slot -->
<div main>
<!-- Hauptinhalt: Formulare, Artikel, etc. -->
</div>
<!-- Sidebar Slot -->
<div sidebar>
<!-- Sidebar: Hilfe, Navigation, Infos -->
</div>
<!-- Footer Slot (optional) -->
<div footer>
<!-- Footer-Buttons, Actions, etc. -->
</div>
</app-two-column-layout>| Property | Typ | Default | Beschreibung |
|---|---|---|---|
maxWidth | string | '1800px' | Maximale Breite des gesamten Layouts |
sidebarWidth | string | '350px' | Feste Breite der Sidebar |
gap | 'sm' | 'md' | 'lg' | 'xl' | 'lg' | Abstand zwischen den Spalten |
stickySidebar | boolean | false | Sidebar bleibt beim Scrollen oben fixiert |
stickyTop | string | '1rem' | Top-Offset für sticky Sidebar |
sidebarPosition | 'left' | 'right' | 'right' | Position der Sidebar |
showHeader | boolean | true | Header-Slot anzeigen |
showFooter | boolean | true | Footer-Slot anzeigen |
responsiveBreakpoint | 'sm' | 'md' | 'lg' | 'xl' | 'lg' | Breakpoint, ab dem Spalten gestapelt werden |
backgroundColor | string | '#f5f5f5' | Hintergrundfarbe für das gesamte Layout |
Utilities bleiben in der Komponente, nicht im globalen CSS. Folgt dem "Utility-First" Ansatz.
TypeScript prüft Properties zur Compile-Zeit. IDE Auto-Complete für alle Optionen.
Anpassbar über @Input() Properties ohne CSS zu ändern. Verschiedene Layouts mit einer Komponente.
Code ist selbsterklärend. JSDoc-Kommentare zeigen Verwendung direkt in der IDE.
import { TwoColumnLayoutComponent } from '@app/shared/layouts/two-column-layout/two-column-layout.component';
@Component({
selector: 'app-my-page',
standalone: true,
imports: [TwoColumnLayoutComponent],
templateUrl: './my-page.component.html'
})
export class MyPageComponent { }Alternative für komplexe Anwendungen mit linker Navigation, wachsendem Hauptbereich und rechter Sidebar. Ideal für Dashboard-Seiten oder wenn sowohl Navigation als auch Zusatzinformationen gleichzeitig sichtbar sein sollen.
<app-three-column-layout
[maxWidth]="'1800px'"
[leftSidebarWidth]="'250px'"
[rightSidebarWidth]="'350px'"
[gap]="'lg'"
>
<!-- Header Slot (optional) -->
<div header>
<app-page-header
title="Seitentitel"
subtitle="Untertitel"
></app-page-header>
</div>
<!-- Left Sidebar Slot -->
<div left>
<!-- Navigation, Filter, Menüs -->
</div>
<!-- Main Content Slot -->
<div main>
<!-- Hauptinhalt: Artikel, Listen, etc. -->
</div>
<!-- Right Sidebar Slot -->
<div right>
<!-- Sidebar: Details, Hilfe, Infos -->
</div>
<!-- Footer Slot (optional) -->
<div footer>
<!-- Footer-Buttons, Actions -->
</div>
</app-three-column-layout>| Property | Typ | Default | Beschreibung |
|---|---|---|---|
maxWidth | string | '1800px' | Maximale Breite des gesamten Layouts |
leftSidebarWidth | string | '250px' | Feste Breite der linken Sidebar |
rightSidebarWidth | string | '350px' | Feste Breite der rechten Sidebar |
gap | 'sm' | 'md' | 'lg' | 'xl' | 'lg' | Abstand zwischen den Spalten |
stickyLeftSidebar | boolean | false | Linke Sidebar bleibt beim Scrollen oben fixiert |
stickyRightSidebar | boolean | false | Rechte Sidebar bleibt beim Scrollen oben fixiert |
stickyTop | string | '1rem' | Top-Offset für sticky Sidebars |
showHeader | boolean | true | Header-Slot anzeigen |
showFooter | boolean | true | Footer-Slot anzeigen |
responsiveBreakpoint | 'sm' | 'md' | 'lg' | 'xl' | 'lg' | Breakpoint, ab dem Spalten gestapelt werden |
backgroundColor | string | '#f5f5f5' | Hintergrundfarbe für das gesamte Layout |
import { ThreeColumnLayoutComponent } from '@app/shared/layouts/three-column-layout/three-column-layout.component';
@Component({
selector: 'app-my-page',
standalone: true,
imports: [ThreeColumnLayoutComponent],
templateUrl: './my-page.component.html'
})
export class MyPageComponent { }Einfaches, einspaltiges Layout für Content-Seiten ohne Sidebar. Perfekt für Homepage, Dokumentationsseiten, Landing Pages und Übersichtsseiten.
<app-single-column-layout
[maxWidth]="'1400px'"
[backgroundColor]="'#f5f5f5'"
[spacing]="'md'"
>
<!-- Header Slot (optional) -->
<div header>
<app-page-header
title="Seitentitel"
subtitle="Untertitel"
></app-page-header>
</div>
<!-- Main Content Slot -->
<div main>
<!-- Hauptinhalt: Text, Karten, Grids, etc. -->
</div>
<!-- Footer Slot (optional) -->
<div footer>
<!-- Footer-Content -->
</div>
</app-single-column-layout>| Property | Typ | Default | Beschreibung |
|---|---|---|---|
maxWidth | string | '1400px' | Maximale Breite des Contents |
backgroundColor | string | '#f5f5f5' | Hintergrundfarbe für das Layout |
spacing | 'sm' | 'md' | 'lg' | 'xl' | 'md' | Vertikales Padding für Sections |
padding | boolean | true | Horizontales Padding hinzufügen |
marginBottom | boolean | true | Unteren Margin hinzufügen |
showHeader | boolean | true | Header-Slot anzeigen |
showFooter | boolean | true | Footer-Slot anzeigen |
Übersichtsseite mit Karten-Grid für Komponenten oder Features.
Lange Textinhalte, Code-Beispiele, Tabellen ohne Sidebar.
Marketing-Seiten, Call-to-Action Bereiche, Hero Sections.
Listen, Tabellen, Dashboards ohne zusätzliche Navigation.
import { SingleColumnLayoutComponent } from '@app/shared/layouts/single-column-layout/single-column-layout.component';
@Component({
selector: 'app-my-page',
standalone: true,
imports: [SingleColumnLayoutComponent],
templateUrl: './my-page.component.html'
})
export class MyPageComponent { }