CSS-Komponentensystem · Neue Ressource

Bootstrap-Designsystem.

Verwende Bootstrap 5.3.8 mit seiner tatsächlichen Abstandsskala, semantischen Farben, responsiven Rasterdarstellung und Komponenten-APIs. Probiere ein funktionierendes Reservierungsformular, eine Fehlerübersicht, einen Tabellenfilter, ein modales Fenster und einen Farbschema-Umschalter aus und verwende anschließend den dokumentierten Code erneut.

OpenDesign-Leitfaden8 Kapitel66 ReferenzeinträgeOriginaler Anwendungsleitfaden
01

Vorschau der Bootstrap-Designsystem-Oberfläche

Filtere Reservierungen, validiere Felder, überprüfe sie in einem nativen Dialog und wechsle zwischen hellem und dunklem Modus.

Gerätereservierungen · Bootstrap 5.3.8Vollständiges Beispiel öffnen
Natives Bootstrap 5.3.8 CSS und JavaScript, lokal bereitgestellt. Reservierungsdaten und Anwendungsverhalten sind eigens erstellte Beispiele. · Implementierungsreferenz
02

Designreferenz zum Bootstrap-Designsystem

Kompiliertes Standard-CSS von Bootstrap 5.3.8 und die Dokumentation zu Version 5.3. Die Werte sind Standardeinstellungen, keine verbindlichen Markenregeln. Beim Vergleich von Rem- und Pixelwerten wird eine Root-Größe von 16px angenommen; responsive Schriftgrößen können unterhalb des Endpunkts für große Bildschirme abweichen. Die umgebende OpenDesign-Seite behält ihre eigene Typografie.

Semantische Farben und Oberflächenrollen

Quelle
Name / RegelWert / KonfigurationVerwendung
--bs-primary#0d6efd Primäraktion und Link-Grundfarbe.
--bs-secondary#6c757d Sekundäre Theme-Familie; nicht die adaptive Rolle für sekundären Fließtext.
--bs-success#198754 Grundfarbe für positive Statusmeldungen; zusätzlich eine Beschriftung verwenden.
--bs-danger#dc3545 Grundfarbe des Fehler-/Zerstörungs-Themes.
--bs-warning#ffc107 Grundfarbe des Warnungs-Themes; Kontrast des Vordergrunds prüfen.
--bs-info#0dcaf0 Grundfarbe des Informations-Themes.
--bs-body-bg#fffSeitenoberfläche im hellen Modus.
--bs-body-color#212529 Vordergrundfarbe des Fließtexts im hellen Modus.
--bs-secondary-bg#e9ecef Sekundäre Oberfläche im hellen Modus.
--bs-tertiary-bg#f8f9fa Zurückhaltende Paneloberfläche im hellen Modus.
--bs-primary-bg-subtle#cfe2ff Getönte Primäroberfläche im hellen Modus.
--bs-primary-text-emphasis#052c65 Text für Oberflächen mit dezenten Primärfarben.
--bs-border-color#dee2e6 Rahmenrolle im hellen Modus.

Fließtexttypografie und gut lesbare Hierarchie

Quelle
Name / RegelWert / KonfigurationVerwendung
--bs-body-font-size1remStandardgröße des Fließtexts: 1rem, normalerweise 16px.
--bs-body-line-height1.5Einheitenloser Multiplikator: normalerweise 24px Zeilenhöhe.
--bs-body-font-weight400Normale Stärke des Fließtexts.
--bs-body-font-familyvar(--bs-font-sans-serif)Von Bootstrap bereitgestellte Systemoberflächen-Schriftfamilie.
--bs-font-monospaceSFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospaceCode und technische Werte verwenden die Schriftfamilie mit fester Zeichenbreite.

Überschriftengrößen und Anzeige-Dienstprogramme

Quelle
Name / RegelWert / KonfigurationVerwendung
h1 / .h12.5remEndpunkt für große Bildschirme; h1–h4 verwenden standardmäßig responsive Schriftgrößen.
h2 / .h22remEndpunkt für große Bildschirme; h1–h4 verwenden standardmäßig responsive Schriftgrößen.
h3 / .h31.75remEndpunkt für große Bildschirme; h1–h4 verwenden standardmäßig responsive Schriftgrößen.
h4 / .h41.5remEndpunkt für große Bildschirme; h1–h4 verwenden standardmäßig responsive Schriftgrößen.
h5 / .h51.25remFeste Standardgröße für Überschriften.
h6 / .h61remFeste Standardgröße für Überschriften.
.lead1.25rem / weight 300Einleitungstext; kein Ersatz für eine Überschrift.
.small0.875emRelativ kleine Schrift; sparsam für Metadaten verwenden.

Abstandsskala der Dienstprogramme

Quelle
Name / RegelWert / KonfigurationVerwendung
00Mit m/p/gap/g-Dienstprogrammen verwenden, z. B. p-0.
10.25remMit m/p/gap/g-Dienstprogrammen verwenden, z. B. p-1.
20.5remMit m/p/gap/g-Dienstprogrammen verwenden, z. B. p-2.
31remMit m/p/gap/g-Dienstprogrammen verwenden, z. B. p-3.
41.5remMit m/p/gap/g-Dienstprogrammen verwenden, z. B. p-4.
53remMit m/p/gap/g-Dienstprogrammen verwenden, z. B. p-5.
ms / meinline start / endLogische Seitenkonvention; anders als ml/mr in älteren Versionen von Bootstrap.
p-3 p-md-41rem → 1.5rem at mdResponsive Innenabstände im Beispiel.
gap-20.5remAbstand zwischen Flex-/Rasterelementen.

Responsive Raster-Breakpoints

Quelle
Name / RegelWert / KonfigurationVerwendung
xs / .col-0Basisstufe ohne xs-Infix.
sm / .col-sm-576pxKleine Stufe; .container maximale Breite 540px.
md / .col-md-768pxMittlere Stufe; .container maximale Breite 720px.
lg / .col-lg-992pxGroße Stufe; .container maximale Breite 960px.
xl / .col-xl-1200pxExtra große Stufe; .container maximale Breite 1140px.
xxl / .col-xxl-1400pxGrößte Standardstufe; .container maximale Breite 1320px.
Grid columns12Eine Kombination aus col-lg-7 und col-lg-5 füllt eine Zeile aus.
Default horizontal gutter1.5rem0.75rem Innenabstand pro Spaltenseite; die Zeile gleicht dies mit negativen Außenabständen aus.

Rahmen, Rundungen und Höhenstufen

Quelle
Name / RegelWert / KonfigurationVerwendung
--bs-border-width1pxStandard-Rahmenbreite.
--bs-border-radius0.375remEingabefelder, Karten und standardmäßig abgerundete Ecken.
--bs-border-radius-sm0.25remKompakte Rundung.
--bs-border-radius-lg0.5remStärker abgerundete Gestaltung.
--bs-border-radius-xl1remStark abgerundete Oberfläche.
--bs-border-radius-xxl2remExtra stark abgerundete Oberfläche.
--bs-border-radius-pill50remPillenform, kein festgelegter Radius für Komponenten.
--bs-box-shadow-sm0 0.125rem 0.25rem rgba(0, 0, 0, 0.075)Dezente Höhenstufe.
--bs-box-shadow0 0.5rem 1rem rgba(0, 0, 0, 0.15)Standard-Höhenstufe.
--bs-box-shadow-lg0 1rem 3rem rgba(0, 0, 0, 0.175)Starke Höhenstufe; nicht auf jede Oberfläche anwenden.

Schaltflächengrößen und Statusvariablen

Quelle
Name / RegelWert / KonfigurationVerwendung
--bs-btn-padding-x0.75remStandardmäßiger horizontaler Innenabstand von Schaltflächen.
--bs-btn-padding-y0.375remStandardmäßiger vertikaler Innenabstand von Schaltflächen.
--bs-btn-font-size1remStandardmäßige Schriftgröße für Schaltflächenbeschriftungen.
--bs-btn-line-height1.5Standardmäßiger Zeilenhöhenfaktor für Beschriftungen.
--bs-btn-border-width1pxStandardmäßige Rahmenstärke.
--bs-btn-border-radiusvar(--bs-border-radius)Standardmäßiger Eckenradius von Schaltflächen.
--bs-btn-disabled-opacity0.65Visuelle Darstellung; verwenden Sie zusätzlich das tatsächliche disabled-Attribut.

Rollenänderungen im hellen und dunklen Modus

Quelle
Name / RegelWert / KonfigurationVerwendung
--bs-body-bglight #fff / dark #212529Der Seitenhintergrund richtet sich nach data-bs-theme.
--bs-body-colorlight #212529 / dark #dee2e6Die Vordergrundfarbe passt sich der Hintergrundfläche an.
--bs-border-colorlight #dee2e6 / dark #495057Rahmen, der das Theme berücksichtigt.
--bs-primary-bg-subtlelight #cfe2ff / dark #031633Der getönte Statushintergrund ändert sich je nach Modus.
--bs-primary-text-emphasislight #052c65 / dark #6ea8feMit der dazugehörigen dezenten Hintergrundfläche verwenden.
data-bs-themelight | darkGlobal auf html oder in einem lokalen Teilbaum festlegen.
03

Bootstrap-Designsystem: vollständiger Leitfaden

Ein praktischer Leitfaden zur Auswahl, Anwendung und Überprüfung dieses Systems für ein echtes Interface.

DESIGN-bootstrap.md

Umfassende Anleitung, Einstieg in die Implementierung und Links zu den Quellen.

Leitfaden herunterladen

Bootstrap-Designsystem: CSS von Bootstrap und Zuständigkeiten von JavaScript auswählen

Ein Stylesheet, optionales Komponentenverhalten

Das kompilierte Stylesheet von Bootstrap stellt das Raster, die Typografie, die Hilfsklassen und die Darstellung der Komponenten bereit. Das Bundle von JavaScript ergänzt interaktive Plugins wie Modal, Collapse und Dropdown. Eine gestaltete Schaltfläche benötigt JavaScript nicht; ein Modal-Trigger mit data-bs-toggle dagegen schon. Die funktionierende Vorschau lädt das passende Stylesheet und Bundle in Version 5.3.8 lokal, sodass die Steuerelemente diese tatsächlichen Voraussetzungen veranschaulichen.

Aus diesem OpenDesign-Leitfaden

Die Filterung der Reservierungstabelle, die Fehlerübersicht und das lokale Hinzufügen von Zeilen sind Anwendungscode. Wenn diese Abgrenzung sichtbar bleibt, lassen sich die fiktiven Datensätze durch einen Dienst ersetzen, ohne Bootstrap selbst Buchungsfunktionen zuzuschreiben.

  • CSS: Layout, Typografie, Schaltflächen, Eingabefelder, Tabellen und Statusdarstellung.
  • Bootstrap JavaScript: Öffnen des Modals, Hintergrundüberlagerung, Escape- und Fokusverhalten.
  • Anwendungs-JavaScript: Validierungsmeldungen, Datensatzfilterung und lokale Datenaktualisierungen.

Unterstützende Spezifikation lesen

Kompiliertes CSS oder einen Sass-Build auswählen

Verwenden Sie das kompilierte CSS für einen schnellen Einstieg oder ein Produkt, das den standardmäßigen Satz an Hilfsklassen übernehmen kann. Verwenden Sie den Sass-Quellcode, wenn Sie Theme-Maps, die Generierung von Hilfsklassen oder das Raster zur Build-Zeit ändern möchten. Die benutzerdefinierten Eigenschaften von CSS zur Laufzeit eignen sich für Anpassungen auf Komponentenebene. Wenn Sie jedoch eine Farbvariable auf der Root-Ebene ändern, werden nicht automatisch alle vorkompilierten Varianten neu erstellt.

scss
$primary: #3159a5;
$border-radius: .5rem;
@import "bootstrap/scss/bootstrap";

Code-Referenz

Unterstützende Spezifikation lesen

Bootstrap-Designsystem: semantische Farben und Farbmodi einsetzen

Hintergrundfläche und Vordergrund einer Statusanzeige aufeinander abstimmen

Die Reservierungs-Badges verwenden bg-primary-subtle mit text-primary-emphasis. Dabei handelt es sich um aufeinander abgestimmte semantische Rollen: Vorder- und Hintergrund passen sich beide an, wenn sich data-bs-theme ändert. Ein beliebiger blauer Hintergrund mit einer willkürlich gewählten grauen Textfarbe bildet diesen Zusammenhang nicht ab. Außerdem bleiben „Reserviert“, „In Verwendung“ und „Entwurf“ als Textbeschriftungen erhalten; die Farbe ist nicht ihre einzige Bedeutung.

html
<span class="badge text-primary-emphasis bg-primary-subtle">Reserved</span>
<section data-bs-theme="dark">
  <div class="bg-body text-body border rounded p-3">Theme-scoped content</div>
</section>

Code-Referenz

Unterstützende Spezifikation lesen

Anpassungen auf Komponentenebene begrenzen

Überschreiben Sie für eine einzelne benutzerdefinierte Aktion die lokalen --bs-btn-*-Eigenschaften. Legen Sie neben dem normalen Hintergrund auch Werte für Hover- und Aktivzustände fest. Das folgende Beispiel zeigt eine Anwendungsvariante und keinen Standard von Bootstrap. Belassen Sie diese Klasse auf der betreffenden Schaltfläche, damit sie nicht unbemerkt jede primäre Aktion in einem anderen Bereich der Seite verändert.

css
.btn-reserve {
  --bs-btn-color: #fff;
  --bs-btn-bg: #3159a5;
  --bs-btn-border-color: #3159a5;
  --bs-btn-hover-color: #fff;
  --bs-btn-hover-bg: #274783;
  --bs-btn-hover-border-color: #274783;
  --bs-btn-active-color: #fff;
  --bs-btn-active-bg: #203a6b;
  --bs-btn-active-border-color: #203a6b;
}

Code-Referenz

Unterstützende Spezifikation lesen

Bootstrap-Designsystem: die tatsächliche Typografieskala verwenden

Dokumentsemantik und visuelle Größe voneinander trennen

Der Haupttitel der Vorschau ist ein h1 mit der Klasse h3: Er bleibt die Hauptüberschrift der Seite, verwendet aber die kleinere visuelle Größe, die für ein Tool passend ist. Abschnittsüberschriften sind h2-Elemente mit h5-Stil. Bootstrap bietet sowohl Standardstile für Elemente als auch entsprechende Überschriftenklassen. So lassen sich diese Ebenen unterscheiden, ohne Überschriftenebenen im Dokument zu überspringen.

Der Standardtext hat eine Größe von 1rem und eine Zeilenhöhe von 1.5. Die Größen von h1 bis h4 passen sich responsiv an, bevor sie die Werte aus der Referenztabelle erreichen. Ein Screenshot bei einer bestimmten Breite legt daher nicht die gesamte Typografieskala fest. Verwenden Sie die kompilierten Stile oder das dokumentierte Sass-Verhalten, statt eine gemessene Pixelgröße aus einem einzigen Ansichtsfenster zu übernehmen.

Unterstützende Spezifikation lesen

Sekundärtext mit einer Theme-abhängigen Rolle versehen

text-body-secondary richtet sich nach dem Farbmodus des Fließtexts. Die Klasse eignet sich für ergänzende Datensatzinformationen, etwa den Namen der verantwortlichen Person unter dem Titel eines Geräts. Die Klasse small verkleinert den Text relativ zum Kontext. Auf allen Feldbeschriftungen würde sie das Erfassen des Formulars erschweren. Belassen Sie Beschriftungen bei der normalen Formulargröße und verwenden Sie kompakte Schrift für Hinweise und Metadaten.

html
<h1 class="h3">Equipment reservations</h1>
<p class="text-body-secondary">Review availability before booking.</p>
<small class="text-body-secondary">Local demonstration data</small>

Code-Referenz

Unterstützende Spezifikation lesen

Bootstrap-Designsystem: Abstands-Hilfsklassen und Raster kombinieren

Die Abstandsskala statt beliebiger Lücken verwenden

p-3 steht für 1rem Innenabstand, p-4 für 1.5rem und p-5 für 3rem. Die Bezeichnungen sind Stufen der Skala und keine festen Pixelangaben. In der Vorschau wächst der äußere Innenabstand durch p-3 p-md-4 bei 768px; mb-3 schafft 1rem Abstand zwischen Feldgruppen. Das ist eine konkrete Vorgabe für dieses Beispiel, keine neue offizielle Abstandsskala.

html
<div class="p-3 p-md-4">
  <div class="d-flex flex-wrap gap-2 mb-3">
    <button class="btn btn-primary">Review</button>
    <button class="btn btn-outline-secondary">Reset</button>
  </div>
</div>

Code-Referenz

Unterstützende Spezifikation lesen

Die Beziehung zwischen Zeile und Spalten beibehalten

Unterstützende Spezifikation lesen

Bootstrap-Designsystem: Eingabefelder mit expliziten Beziehungen gestalten

Beschriftungen, Hinweise und Rückmeldungen miteinander verknüpfen

form-label gestaltet ein echtes label-Element; sein for-Wert muss mit der id des Eingabefelds übereinstimmen. form-control gestaltet Texteingabefelder, form-select ein Auswahlfeld. Die Vorschau verwendet aria-describedby für Hinweis- und Fehler-IDs sowie required für die tatsächliche Einschränkung. Diese semantischen Beziehungen entstehen nicht automatisch durch die Klassennamen.

html
<label for="equipment" class="form-label">Equipment</label>
<select id="equipment" class="form-select" required
  aria-describedby="equipment-error">
  <option value="">Choose equipment</option>
  <option>Camera kit A</option>
</select>
<div class="invalid-feedback" id="equipment-error">Choose equipment.</div>

Code-Referenz

Unterstützende Spezifikation lesen

Einen echten Fehlerzustand und eine erreichbare Fehlerübersicht verwenden

Beim Absenden prüft das Beispiel jedes Feld, setzt is-invalid und aria-invalid, erstellt Textlinks zu den fehlerhaften Feldern und verschiebt den Fokus auf die Übersicht. Wird ein Feld korrigiert, aktualisiert sich dessen Zustand, ohne die übrigen Antworten zu löschen. Diese Anwendungsebene ist unverzichtbar: Die Validierungsdokumentation von Bootstrap weist darauf hin, dass die benutzerdefinierte visuelle Rückmeldung allein für unterstützende Technologien nicht vollständig zugänglich ist.

  1. Das Ergebnis der tatsächlichen Einschränkungsprüfung kontrollieren, bevor das Feld als fehlerhaft markiert wird.
  2. Den Fehlertext mit dem Feld verknüpfen und den Fehlerzustand kenntlich machen.
  3. Den Fokus nach dem Absenden auf eine hilfreiche Übersicht oder das erste fehlerhafte Feld setzen.

Unterstützende Spezifikation lesen

Bootstrap-Designsystem: Datensätze verständlich darstellen und filtern

Die Tabellenkomponente für vergleichbare Daten verwenden

Die Tabelle verfügt über Spaltenüberschriften, Zeilenüberschriften und eine Beschriftung. table-hover sorgt für eine Hover-Darstellung, macht die Zeilen jedoch nicht zu Schaltflächen. Beim Filtern wird der ausgeblendete Zustand passender Zeilen geändert und die Anzahl der Ergebnisse in einem aria-live-Bereich aktualisiert. Der angezeigte Status bleibt Text innerhalb eines Badges, sodass seine Bedeutung auch bei einem Wechsel des Farbmodus erhalten bleibt.

html
<div class="table-responsive">
  <table class="table table-hover">
    <caption>Fictional equipment reservations</caption>
    <thead><tr><th scope="col">Equipment</th><th scope="col">Status</th></tr></thead>
    <tbody><tr><th scope="row">Camera kit A</th><td>Reserved</td></tr></tbody>
  </table>
</div>

Code-Referenz

Unterstützende Spezifikation lesen

Das Scrollen der Tabelle auf die Daten beschränken

table-responsive ermöglicht horizontales Scrollen, wenn eine breite Tabelle nicht in den verfügbaren Platz passt. Vermeiden Sie Dropdowns innerhalb dieses Wrappers, die aus dem ausgeschnittenen Bereich herausragen müssen, ohne dies vorher zu prüfen. Im Beispiel befindet sich der Filter oberhalb der Tabelle. Auf Mobilgeräten darf nur der Datenbereich horizontal scrollen; die Seite selbst sollte in den Viewport passen.

Unterstützende Spezifikation lesen

Bootstrap Designsystem: Auswahl im Modal überprüfen API

Erst öffnen, wenn das Formular gültig ist

Das interaktive Beispiel erstellt eine Instanz von Bootstrap Modal oder verwendet eine vorhandene und ruft show nur auf, wenn die Validierung erfolgreich ist. So wird verhindert, dass die Prüfebene Fehler verdeckt, die noch behoben werden müssen. Der Text wird mit den aktuellen Werten befüllt. Über „Angaben bearbeiten“ lässt sich das Modal schließen, während die Formulareingaben erhalten bleiben.

javascript
const element = document.getElementById("review-modal");
const modal = bootstrap.Modal.getOrCreateInstance(element);
// Run after validation and after populating the review text.
modal.show();
element.addEventListener("hidden.bs.modal", () => {
  document.querySelector("#reservation button[type=submit]").focus();
});

Code-Referenz

Unterstützende Spezifikation lesen

Das Modal als Komponentenlebenszyklus behandeln

Bootstrap steuert den Hintergrund und den Übergang. Verwenden Sie die zugehörigen Methoden und Ereignisse, statt die Anzeige manuell umzuschalten, da sonst Fokus oder Hintergrund inkonsistent sein können. Bei der Bestätigung in dieser Demonstration wird eine lokale Tabellenzeile hinzugefügt und das Modal geschlossen. Es wird kein Reservierungsdienst aufgerufen. Die Erfolgsmeldung beschreibt genau dieses lokale Ergebnis.

Unterstützende Spezifikation lesen

Bootstrap Designsystem: Dieses Bootstrap-Beispiel integrieren und erweitern

Eine passende CSS- und JavaScript-Version laden

Das eingebettete Beispiel lädt lokal gespeicherte Dateien von Bootstrap 5.3.8 CSS und dem Bundle. Seine Datenattribute und das Modal-API stammen aus dieser Version. Importieren Sie in einer Vite-Anwendung das kompilierte CSS und das benötigte Plugin wie im Abschnitt zur Einrichtung gezeigt. Vermeiden Sie es, das Bundle zu laden und über einen anderen Wrapper eine zweite Instanz desselben Plugins zu initialisieren.

Unterstützende Spezifikation lesen

Anhand des tatsächlichen Komponentenvertrags erweitern

  • Verwenden Sie das Beispiel, um Fokus, Schließen des Modals und Theme-Wechsel zu prüfen.
  • Anwendungsdatenoperationen vom Verhalten des Bootstrap-Plugins getrennt halten.
  • Theme-Überschreibungen in den Zuständen normal, Hover, Fokus, ungültig und deaktiviert erneut prüfen.

Unterstützende Spezifikation lesen

Bootstrap Designsystem: Komponentenbeispiele

index.html — vollständiges Reservierungsbeispiel

Eine vollständige Bootstrap-5.3.8-Seite mit Stylesheet, Modal-Laufzeit, Validierung, Filtern und lokaler Bestätigung. Speichern Sie diese Datei als index.html und stellen Sie den Ordner mit dem untenstehenden Befehl bereit. Für die festgelegten CDN-Abhängigkeiten ist eine Netzwerkverbindung erforderlich.

html
<!doctype html><html lang="en" data-bs-theme="light"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Bootstrap equipment reservations — OpenDesign example</title><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"><style>body{margin:0}main{max-width:1120px;margin:auto}.demo-stat{font-variant-numeric:tabular-nums}.table td,.table th{vertical-align:middle}.table caption{font-size:.875rem}.demo-status:empty{display:none}@media(max-width:575px){.table th,.table td{font-size:.8125rem;padding:.65rem .4rem}.demo-mobile-hide{display:none}}@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important}}</style></head><body>
<header class="border-bottom bg-body-tertiary px-3 px-md-4 py-3 d-flex align-items-center justify-content-between gap-3"><div><strong>Studio inventory</strong><span class="badge text-bg-primary ms-2">Bootstrap 5.3.8</span></div><button id="theme" type="button" class="btn btn-outline-secondary btn-sm" aria-pressed="false">Dark mode</button></header>
<main class="p-3 p-md-4"><div class="d-flex align-items-start justify-content-between gap-3 mb-4"><div><p class="text-body-secondary small mb-1">EQUIPMENT / RESERVATIONS</p><h1 class="h3 mb-2">Keep the next shoot ready.</h1><p class="text-body-secondary mb-0">Check equipment, create a local reservation and review its details.</p></div><span class="badge rounded-pill text-primary-emphasis bg-primary-subtle border border-primary-subtle demo-mobile-hide">Interactive example</span></div>
<div class="row g-3 mb-4"><div class="col-4"><div class="border rounded p-3"><div class="text-body-secondary small">Equipment</div><strong class="fs-3 demo-stat">12</strong></div></div><div class="col-4"><div class="border rounded p-3"><div class="text-body-secondary small">Reservations</div><strong id="count" class="fs-3 demo-stat">3</strong></div></div><div class="col-4"><div class="border rounded p-3"><div class="text-body-secondary small">Available</div><strong class="fs-3 demo-stat">8</strong></div></div></div>
<div class="row g-4"><section class="col-lg-7" aria-labelledby="list-title"><div class="d-flex align-items-center justify-content-between gap-3 mb-3"><h2 id="list-title" class="h5 m-0">Reservation list</h2><div><label for="filter" class="visually-hidden">Filter reservations by status</label><select class="form-select form-select-sm" id="filter"><option value="all">All statuses</option><option value="Reserved">Reserved</option><option value="In use">In use</option><option value="Draft">Draft</option></select></div></div><div class="table-responsive border rounded"><table class="table table-hover mb-0"><caption class="px-3">Fictional records. New entries stay in this browser tab.</caption><thead class="table-light"><tr><th scope="col">Equipment</th><th scope="col">Date</th><th scope="col">Status</th></tr></thead><tbody id="rows"><tr data-status="Reserved"><th scope="row" class="fw-medium">Camera kit A<div class="small fw-normal text-body-secondary">Mia Chen</div></th><td>10 Oct</td><td><span class="badge text-primary-emphasis bg-primary-subtle">Reserved</span></td></tr><tr data-status="In use"><th scope="row" class="fw-medium">Lighting studio<div class="small fw-normal text-body-secondary">Alex Kim</div></th><td>10 Oct</td><td><span class="badge text-success-emphasis bg-success-subtle">In use</span></td></tr><tr data-status="Draft"><th scope="row" class="fw-medium">Audio recorder<div class="small fw-normal text-body-secondary">Jules Davis</div></th><td>11 Oct</td><td><span class="badge text-secondary-emphasis bg-secondary-subtle">Draft</span></td></tr></tbody></table></div><p id="empty" class="alert alert-info mt-3" hidden>No reservations match this status.</p><p id="results" class="small text-body-secondary mt-2" aria-live="polite">3 reservations shown</p><div class="alert alert-primary mt-4 mb-0"><strong>Try the system</strong><p class="small mb-0 mt-1">Switch color mode, filter the table, submit an empty form, then review a complete reservation in a Bootstrap modal.</p></div></section>
<section class="col-lg-5" aria-labelledby="form-title"><div class="card"><div class="card-body p-3 p-md-4"><h2 id="form-title" class="h5 mb-3">New reservation</h2><form id="reservation" novalidate><div id="error-summary" class="alert alert-danger" tabindex="-1" role="alert" hidden><strong>Check the reservation details.</strong><ul class="mb-0 mt-2" id="error-links"></ul></div><div class="mb-3"><label class="form-label" for="equipment">Equipment</label><select class="form-select" id="equipment" aria-describedby="equipment-error" required><option value="">Choose equipment</option><option>Camera kit A</option><option>Lighting studio</option><option>Audio recorder</option></select><div id="equipment-error" class="invalid-feedback">Choose equipment for this reservation.</div></div><div class="mb-3"><label class="form-label" for="owner">Reserved by</label><input class="form-control" id="owner" autocomplete="name" aria-describedby="owner-hint owner-error" required><div class="form-text" id="owner-hint">Use a fictional name for this example.</div><div class="invalid-feedback" id="owner-error">Enter the name of the person reserving equipment.</div></div><div class="mb-3"><label class="form-label" for="date">Reservation date</label><input class="form-control" id="date" type="date" aria-describedby="date-error" required><div class="invalid-feedback" id="date-error">Choose a reservation date.</div></div><button type="submit" class="btn btn-primary w-100">Review reservation</button></form><p class="small text-body-secondary mt-3 mb-0">This example validates input locally. It does not reserve real equipment.</p></div></div></section></div><div id="notice" class="alert alert-success mt-4 demo-status" role="status" hidden></div></main>
<div class="modal fade" id="review-modal" tabindex="-1" aria-labelledby="review-title" aria-hidden="true"><div class="modal-dialog modal-dialog-centered"><div class="modal-content"><div class="modal-header"><h2 class="modal-title fs-5" id="review-title">Review reservation</h2><button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close review"></button></div><div class="modal-body"><dl class="row mb-0"><dt class="col-4">Equipment</dt><dd class="col-8" id="review-equipment"></dd><dt class="col-4">Reserved by</dt><dd class="col-8" id="review-owner"></dd><dt class="col-4">Date</dt><dd class="col-8" id="review-date"></dd></dl><p class="small text-body-secondary mt-3 mb-0">Confirming adds a row to this local example only.</p></div><div class="modal-footer"><button class="btn btn-outline-secondary" data-bs-dismiss="modal" type="button">Edit details</button><button class="btn btn-primary" id="confirm" type="button">Add to example</button></div></div></div></div>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script><script>
const $=id=>document.getElementById(id);const fields=['equipment','owner','date'];const review=bootstrap.Modal.getOrCreateInstance($('review-modal'));
$('theme').onclick=()=>{const dark=document.documentElement.dataset.bsTheme!=='dark';document.documentElement.dataset.bsTheme=dark?'dark':'light';$('theme').setAttribute('aria-pressed',String(dark));$('theme').textContent=dark?'Light mode':'Dark mode'};
function filter(){let count=0;for(const row of $('rows').rows){row.hidden=$('filter').value!=='all'&&row.dataset.status!==$('filter').value;if(!row.hidden)count++}$('empty').hidden=count>0;$('results').textContent=count+' reservations shown'}$('filter').onchange=filter;
function validateField(id){const el=$(id),invalid=!el.checkValidity();el.classList.toggle('is-invalid',invalid);el.setAttribute('aria-invalid',String(invalid));return !invalid}
$('reservation').onsubmit=e=>{e.preventDefault();const invalid=fields.filter(id=>!validateField(id));$('error-links').replaceChildren();$('error-summary').hidden=invalid.length===0;if(invalid.length){for(const id of invalid){const li=document.createElement('li'),a=document.createElement('a');a.href='#'+id;a.className='alert-link';a.textContent=$(id+'-error').textContent;a.onclick=e=>{e.preventDefault();$(id).focus()};li.append(a);$('error-links').append(li)}$('error-summary').focus();return}for(const id of fields)$('review-'+id).textContent=$(id).value;review.show()};
for(const id of fields)$(id).addEventListener('input',()=>{if($(id).getAttribute('aria-invalid')==='true')validateField(id)});
$('review-modal').addEventListener('hidden.bs.modal',()=>$('reservation').querySelector('button').focus());
$('confirm').onclick=()=>{const row=document.createElement('tr');row.dataset.status='Reserved';const name=document.createElement('th');name.scope='row';name.className='fw-medium';name.textContent=$('equipment').value;const owner=document.createElement('div');owner.className='small fw-normal text-body-secondary';owner.textContent=$('owner').value;name.append(owner);const date=document.createElement('td');date.textContent=$('date').value;const state=document.createElement('td'),badge=document.createElement('span');badge.className='badge text-primary-emphasis bg-primary-subtle';badge.textContent='Reserved';state.append(badge);row.append(name,date,state);$('rows').prepend(row);$('count').textContent=$('rows').rows.length;$('filter').value='all';filter();review.hide();$('notice').hidden=false;$('notice').textContent='Reservation added to this local example. No data was sent.';$('reservation').reset();for(const id of fields){$(id).classList.remove('is-invalid');$(id).removeAttribute('aria-invalid')}};
</script></body></html>

Code-Referenz

  • Kein Dienst erhält das Formular. Bestätigte Reservierungen bestehen nur während der Sitzung dieser Seite.
  • Die lokale Vorschau enthält dieselben festgelegten Versionen von CSS und JavaScript. Diese Kopie verwendet deren öffentliche CDN-URLs.

Feldbeschriftung, Hinweis und expliziter Fehlerzustand

Diese eigenständige Feldkomposition verwendet Bootstrap-Formatierung und ein tatsächliches Validierungsergebnis. Das Seitenbeispiel ergänzt eine Fehlerübersicht mit fokussierbaren Links zu den drei Feldern. Ein roter Rahmen allein vermittelt nicht, was korrigiert werden muss.

html
<form id="reservation" novalidate>
  <label for="owner" class="form-label">Reserved by</label>
  <input id="owner" class="form-control" required
    aria-describedby="owner-hint owner-error">
  <div id="owner-hint" class="form-text">Use a fictional name.</div>
  <div id="owner-error" class="invalid-feedback">Enter a name.</div>
  <button class="btn btn-primary mt-3" type="submit">Review reservation</button>
</form>
<script>
const form = document.querySelector('#reservation');
const input = document.querySelector('#owner');
form.addEventListener('submit', event => {
  event.preventDefault();
  const invalid = !input.checkValidity();
  input.classList.toggle('is-invalid', invalid);
  input.setAttribute('aria-invalid', String(invalid));
  if (invalid) input.focus();
});
</script>

Code-Referenz

  • .is-invalid kann auch ohne .was-validated explizit gesetzt werden.
  • aria-describedby verknüpft Hinweis- und Fehlertext; aria-invalid gibt den aktuellen Zustand an.
  • Die Dokumentation weist darauf hin, dass eine rein visuelle benutzerdefinierte Validierung assistiven Technologien nicht genügend Informationen bereitstellt.

Ein natives Prüfmodal mit eindeutiger Beschriftung

Das Modal verwendet das tatsächliche Plugin von Bootstrap, den Hintergrund, die Escape-Tastenbehandlung und die Fokusverwaltung. Platzieren Sie den Titel in modal-header, die Prüfung in modal-body und die Aktionen zum Fortfahren in modal-footer.

html
<button class="btn btn-primary" data-bs-toggle="modal"
  data-bs-target="#review">Review reservation</button>
<div class="modal fade" id="review" tabindex="-1"
  aria-labelledby="review-title" aria-hidden="true">
  <div class="modal-dialog modal-dialog-centered">
    <div class="modal-content">
      <div class="modal-header">
        <h2 class="modal-title fs-5" id="review-title">Review reservation</h2>
        <button class="btn-close" data-bs-dismiss="modal"
          aria-label="Close review"></button>
      </div>
      <div class="modal-body">Camera kit A · 10 October</div>
      <div class="modal-footer">
        <button class="btn btn-outline-secondary" data-bs-dismiss="modal">Edit details</button>
      </div>
    </div>
  </div>
</div>

Code-Referenz

  • Das passende Bootstrap-JavaScript-Bundle einmal laden.
  • Das data-API öffnet ein statisches Beispiel. Das funktionierende Reservierungsformular verwendet nach erfolgreicher Eingabe Modal.getOrCreateInstance.
  • Verwenden Sie shown.bs.modal für Verhalten, das erst nach Abschluss des Öffnungsübergangs ausgeführt werden soll.

Eine responsive Kombination aus Liste und Formular

Die Inventarliste belegt am lg-Breakpoint sieben Spalten, das Formular fünf. Unterhalb von lg werden beide Bereiche untereinander angeordnet. g-4 sorgt für einen Abstand von 1.5rem zwischen den Elementen. Die Spalten beschreiben die Breite; semantische Bereiche und Überschriften beschreiben den Inhalt.

html
<main class="container py-4">
  <div class="row g-4">
    <section class="col-lg-7" aria-labelledby="reservations-title">
      <h2 id="reservations-title" class="h5">Reservations</h2>
      <div class="table-responsive">
        <table class="table table-hover">
          <caption>Fictional equipment reservations</caption>
          <thead><tr><th scope="col">Equipment</th><th scope="col">Status</th></tr></thead>
          <tbody><tr><th scope="row">Camera kit A</th><td>Reserved</td></tr></tbody>
        </table>
      </div>
    </section>
    <section class="col-lg-5" aria-labelledby="new-title">
      <h2 id="new-title" class="h5">New reservation</h2>
    </section>
  </div>
</main>

Code-Referenz

  • Dasselbe Raster kann col-md-* verwenden, wenn der Inhalt tatsächlich schon bei einem früheren Breakpoint passt.
  • Verwenden Sie die obige Breakpoint-Tabelle statt Media Queries mit CSS-Variablen; var() kann keinen Schwellenwert für Media Queries bereitstellen.
04

Bootstrap Designsystem: Einrichtung für AI agents

Ausgangspunkt für die Implementierung

Für dieses vollständige HTML-Beispiel ist kein Build-Schritt erforderlich. Es importiert Bootstrap 5.3.8 über die in der Datei angegebenen, festgelegten CDN-URLs. Die kürzeren Beispiele weiter unten zeigen einzelne Muster aus dieser funktionierenden Seite isoliert.

sh
# Save the complete index.html from Component Examples in a new folder.
# Serve that folder with Python 3:
python3 -m http.server 8000
# Open http://localhost:8000/ in a browser.

Ein Prompt für dein Projekt

Agenten-Prompt
Implementieren Sie mit Bootstrap 5.3.8 und diesem Leitfaden eine Benutzeroberfläche zur Reservierung von Ausrüstung. Verwenden Sie eine Zeile mit g-4 sowie col-lg-7 und col-lg-5, Abstände mit p-3 p-md-4, Theme-abhängige Rollen für Body-, dezente und hervorgehobene Farben, eine semantische Tabelle und beschriftete Formularsteuerelemente. Validieren Sie die Eingaben mit expliziten Fehlern und einer Fehlerübersicht, bevor Sie das native Bootstrap Modal öffnen. Behalten Sie beim Bearbeiten die Eingaben bei. Fügen Sie Datensätze nur zum lokalen Demo-Zustand hinzu, sofern kein echtes API bereitgestellt wird. Unterstützen Sie data-bs-theme light/dark und das Schließen per Tastatur. Ersetzen Sie die vorgegebene Skala nicht durch willkürliche Werte.
05

Bootstrap Designsystem: Quellen und Geltungsbereich

Anwendungsleitfaden für OpenDesign’s Bootstrap 5.3.8 und ausführbares Beispiel mit nativen Komponenten. Referenzwerte stammen aus der verlinkten Bootstrap-Dokumentation und dem festgelegten, kompilierten CSS. Reservierungsdatensätze, Layoutkomposition und Validierungsübersicht sind eigens erstellter Anwendungscode; es wird keine echte Reservierung übermittelt.