Sync styleguide 2026.05.18.1

This commit is contained in:
2026-06-16 20:42:20 +02:00
parent 887ff2a90e
commit 98b179e924
6 changed files with 66 additions and 68 deletions
+57 -1
View File
@@ -41,7 +41,51 @@
</nav>
</aside>
<section class="sg-group-card sg-left-navigation-pattern__group-card sg-left-navigation-pattern__group-card--content" data-component="group-card" aria-hidden="true"></section>
<section class="sg-group-card sg-left-navigation-pattern__group-card sg-left-navigation-pattern__group-card--content" data-component="group-card">
<h2 class="sg-heading-h2 sg-text-on-dark sg-group-card__heading" data-left-navigation-content-heading>Übersicht</h2>
<p class="sg-body sg-left-navigation-pattern__content-text">
Zeile 1: Überblick über die aktuelle Navigation.<br>
Zeile 2: Die Inhalte orientieren sich am aktiven Menüpunkt.<br>
Zeile 3: Jede Auswahl aktualisiert die Überschrift.<br>
Zeile 4: Die Content-Card bleibt optisch eigenständig.<br>
Zeile 5: Der Aufbau folgt dem linken Navigationsbereich.<br>
Zeile 6: Die Breite bleibt flexibel innerhalb des Layouts.<br>
Zeile 7: Lange Inhalte werden im Card-Rahmen geführt.<br>
Zeile 8: Der Text dient als Platzhalter für spätere Inhalte.<br>
Zeile 9: Die Darstellung bleibt auf Desktop und Mobile stabil.<br>
Zeile 10: Die Navigation links steuert den sichtbaren Zustand.<br>
Zeile 11: Der aktive Punkt ist visuell hervorgehoben.<br>
Zeile 12: Inaktive Punkte bleiben als klare Auswahloptionen sichtbar.<br>
Zeile 13: Die Content-Card reagiert auf den ausgewählten Eintrag.<br>
Zeile 14: Die Überschrift übernimmt den Namen des Menüpunkts.<br>
Zeile 15: Der Text kann später durch Fachinhalte ersetzt werden.<br>
Zeile 16: Die Gruppe bleibt als zusammenhängender Bereich lesbar.<br>
Zeile 17: Kartenabstände folgen den vorhandenen Styleguide-Tokens.<br>
Zeile 18: Keine lokalen Sonderregeln sind für den Demo-Text nötig.<br>
Zeile 19: Die Struktur bleibt bewusst einfach und nachvollziehbar.<br>
Zeile 20: Das Layout zeigt Navigation und Inhalt nebeneinander.<br>
Zeile 21: Der linke Bereich bleibt auf die Navigation fokussiert.<br>
Zeile 22: Der rechte Bereich zeigt den zugehörigen Inhalt.<br>
Zeile 23: Der Text dient als Füllmaterial für die Layoutprüfung.<br>
Zeile 24: Die Card-Höhe passt sich dem vorhandenen Inhalt an.<br>
Zeile 25: Scrollverhalten ist in diesem Demo-Zustand nicht nötig.<br>
Zeile 26: Die Darstellung bleibt ohne zusätzliche Interaktion verständlich.<br>
Zeile 27: Weitere Inhalte lassen sich später ergänzen oder ersetzen.<br>
Zeile 28: Die Auswahl folgt weiterhin dem Tab-Button-Verhalten.<br>
Zeile 29: Visuelle Konsistenz hat Vorrang vor dekorativen Effekten.<br>
Zeile 30: Der Demo-Text bleibt neutral und fachlich unaufgeladen.<br>
Zeile 31: Jede Zeile stützt die Prüfung der vertikalen Kartengröße.<br>
Zeile 32: Der Content-Bereich ist damit klar als gefüllte Fläche erkennbar.<br>
Zeile 33: Der Text nutzt die vorhandenen Typografie-Tokens.<br>
Zeile 34: Die Lesbarkeit bleibt auf hellem Inhaltshintergrund hoch.<br>
Zeile 35: Die Spaltenlogik wird durch den Text noch deutlicher.<br>
Zeile 36: Das Beispiel unterstützt die Wahrnehmung des Pattern-Rahmens.<br>
Zeile 37: Der Inhalt bleibt austauschbar und ohne Geschäftslogik.<br>
Zeile 38: Die Group Card dient als Container für den Demo-Inhalt.<br>
Zeile 39: Das Muster zeigt die vorgesehene Struktur des Portals.<br>
Zeile 40: Die finale Zeile schließt den Demo-Block sauber ab.
</p>
</section>
</div>
</section>
@@ -50,6 +94,7 @@
const mediaQuery = window.matchMedia('(max-width: 767px)');
const toggle = document.querySelector('[data-left-navigation-toggle]');
const menu = document.getElementById('left-navigation-menu');
const contentHeading = document.querySelector('[data-left-navigation-content-heading]');
if (!toggle || !menu) {
return;
@@ -64,6 +109,14 @@
toggle.classList.remove('sg-button--inactive');
};
const setContentHeading = (button) => {
if (!contentHeading || !button) {
return;
}
contentHeading.textContent = button.textContent.trim();
};
const syncMode = () => {
if (mediaQuery.matches) {
if (toggle.getAttribute('aria-expanded') !== 'true' && toggle.getAttribute('aria-expanded') !== 'false') {
@@ -92,9 +145,12 @@
menu.querySelectorAll('.sg-tab-button').forEach((otherButton) => {
otherButton.setAttribute('aria-selected', String(otherButton === button));
});
setContentHeading(button);
});
});
setContentHeading(menu.querySelector('.sg-tab-button[aria-selected="true"]'));
syncMode();
mediaQuery.addEventListener('change', syncMode);
})();
@@ -10,7 +10,7 @@
.sg-left-navigation-pattern__layout {
display: flex;
align-items: stretch;
align-items: flex-start;
gap: 0;
width: 100%;
min-width: 0;
@@ -46,7 +46,6 @@
@media (min-width: 768px) {
.sg-left-navigation-pattern__group-card--navigation .sg-tab-button-group[data-component-variant="linksmenu-items"] {
height: 100%;
justify-content: flex-start;
}
}
@@ -7,21 +7,6 @@
flex-direction: column;
}
.sg-card-list-page-drawer-backdrop {
position: fixed;
inset: 0;
background: rgba(0, 0, 0, 0.45);
opacity: 0;
pointer-events: none;
transition: opacity 220ms ease;
z-index: 999;
}
.sg-card-list-page-drawer-backdrop[data-open="true"] {
opacity: 1;
pointer-events: auto;
}
.sg-card-list-page-drawer {
position: fixed;
top: 0;
@@ -198,3 +183,4 @@
margin: 0;
color: var(--text-vsf-drawer-object-card-body);
}