Sistema di componenti CSS · Nuova risorsa

Sistema di design Bootstrap.

Usa Bootstrap 5.3.8 tramite le scale effettive di spaziatura, i colori semantici, la griglia responsive e le API dei componenti. Prova un modulo di prenotazione funzionante, un riepilogo degli errori, un filtro per tabella, una finestra modale e un selettore della modalità colore, poi riutilizza il codice documentato.

Guida OpenDesign8 capitoli66 voci di riferimentoGuida applicativa originale
01

Anteprima dell’interfaccia del sistema di design Bootstrap

Filtra le prenotazioni, convalida i campi, esamina i dettagli in una modale nativa e passa dalla modalità chiara a quella scura.

Prenotazioni attrezzature · Bootstrap 5.3.8Apri l’esempio completo
Bootstrap 5.3.8 CSS nativo e JavaScript, serviti localmente. I dati delle prenotazioni e il comportamento dell’applicazione sono esempi originali. · Riferimento per l’implementazione
02

Riferimento di progettazione del sistema di design Bootstrap

Bootstrap 5.3.8 CSS compilato predefinito e documentazione della versione 5.3. I valori sono impostazioni predefinite, non regole di brand obbligatorie. I confronti tra rem e pixel presuppongono una radice di 16px; le dimensioni responsive dei caratteri possono variare al di sotto del valore previsto per gli schermi grandi. La pagina OpenDesign circostante mantiene la propria tipografia.

Colori semantici e ruoli delle superfici

Fonte
Nome / regolaValore / configurazioneUtilizzo
--bs-primary#0d6efd Colore base per azioni principali e link.
--bs-secondary#6c757d Famiglia di temi secondaria; non corrisponde al ruolo adattivo del testo secondario del corpo.
--bs-success#198754 Colore base per gli stati positivi; da accompagnare con un’etichetta.
--bs-danger#dc3545 Colore base per i temi di errore e distruttivi.
--bs-warning#ffc107 Colore base per i temi di avviso; verifica il contrasto del testo in primo piano.
--bs-info#0dcaf0 Colore base per i temi informativi.
--bs-body-bg#fffSuperficie della pagina in modalità chiara.
--bs-body-color#212529 Colore del testo del corpo in modalità chiara.
--bs-secondary-bg#e9ecef Superficie secondaria in modalità chiara.
--bs-tertiary-bg#f8f9fa Superficie del pannello discreta in modalità chiara.
--bs-primary-bg-subtle#cfe2ff Superficie primaria colorata in modalità chiara.
--bs-primary-text-emphasis#052c65 Testo abbinato alle superfici primary-subtle.
--bs-border-color#dee2e6 Ruolo del bordo in modalità chiara.

Tipografia del corpo e gerarchia di lettura

Fonte
Nome / regolaValore / configurazioneUtilizzo
--bs-body-font-size1remDimensione predefinita del testo del corpo: 1rem, normalmente 16px.
--bs-body-line-height1.5Moltiplicatore senza unità: altezza riga normalmente pari a 24px.
--bs-body-font-weight400Spessore normale del testo del corpo.
--bs-body-font-familyvar(--bs-font-sans-serif)Stack di font dell’interfaccia di sistema fornito da Bootstrap.
--bs-font-monospaceSFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospaceIl codice e i valori tecnici usano lo stack monospaziato.

Dimensioni delle intestazioni e utility display

Fonte
Nome / regolaValore / configurazioneUtilizzo
h1 / .h12.5remValore previsto per gli schermi grandi; per impostazione predefinita h1–h4 usano dimensioni responsive.
h2 / .h22remValore previsto per gli schermi grandi; per impostazione predefinita h1–h4 usano dimensioni responsive.
h3 / .h31.75remValore previsto per gli schermi grandi; per impostazione predefinita h1–h4 usano dimensioni responsive.
h4 / .h41.5remValore previsto per gli schermi grandi; per impostazione predefinita h1–h4 usano dimensioni responsive.
h5 / .h51.25remDimensione predefinita fissa dell’intestazione.
h6 / .h61remDimensione predefinita fissa dell’intestazione.
.lead1.25rem / weight 300Testo introduttivo; non sostituisce un’intestazione.
.small0.875emTesto relativamente piccolo; da usare con moderazione per i metadati.

Scala delle utility di spaziatura

Fonte
Nome / regolaValore / configurazioneUtilizzo
00Da usare con le utility m/p/gap/g; ad esempio p-0.
10.25remDa usare con le utility m/p/gap/g; ad esempio p-1.
20.5remDa usare con le utility m/p/gap/g; ad esempio p-2.
31remDa usare con le utility m/p/gap/g; ad esempio p-3.
41.5remDa usare con le utility m/p/gap/g; ad esempio p-4.
53remDa usare con le utility m/p/gap/g; ad esempio p-5.
ms / meinline start / endConvenzione per i lati logici; a differenza di ml/mr delle versioni precedenti di Bootstrap.
p-3 p-md-41rem → 1.5rem at mdSpaziatura interna responsive usata nell’esempio.
gap-20.5remSpazio tra gli elementi figli di flex/grid.

Breakpoint della griglia responsive

Fonte
Nome / regolaValore / configurazioneUtilizzo
xs / .col-0Fascia base, senza infisso xs.
sm / .col-sm-576pxFascia small; larghezza massima di .container: 540px.
md / .col-md-768pxFascia medium; larghezza massima di .container: 720px.
lg / .col-lg-992pxFascia large; larghezza massima di .container: 960px.
xl / .col-xl-1200pxFascia extra-large; larghezza massima di .container: 1140px.
xxl / .col-xxl-1400pxFascia predefinita più ampia; larghezza massima di .container: 1320px.
Grid columns12Una composizione col-lg-7 + col-lg-5 riempie una riga.
Default horizontal gutter1.5remPadding di 0.75rem per lato nelle colonne; la riga compensa con margini negativi.

Raggi dei bordi ed elevazione

Fonte
Nome / regolaValore / configurazioneUtilizzo
--bs-border-width1pxLarghezza predefinita del bordo.
--bs-border-radius0.375remCampi, schede e angoli arrotondati predefiniti.
--bs-border-radius-sm0.25remArrotondamento compatto.
--bs-border-radius-lg0.5remArrotondamento più ampio.
--bs-border-radius-xl1remArrotondamento ampio per le superfici.
--bs-border-radius-xxl2remArrotondamento extra-large per le superfici.
--bs-border-radius-pill50remForma a pillola, non un raggio misurato di un componente.
--bs-box-shadow-sm0 0.125rem 0.25rem rgba(0, 0, 0, 0.075)Elevazione discreta.
--bs-box-shadow0 0.5rem 1rem rgba(0, 0, 0, 0.15)Elevazione predefinita.
--bs-box-shadow-lg0 1rem 3rem rgba(0, 0, 0, 0.175)Elevazione marcata; non applicarla a tutte le superfici.

Dimensioni dei pulsanti e variabili di stato

Fonte
Nome / regolaValore / configurazioneUtilizzo
--bs-btn-padding-x0.75remPadding orizzontale predefinito del pulsante.
--bs-btn-padding-y0.375remPadding verticale predefinito del pulsante.
--bs-btn-font-size1remDimensione predefinita dell’etichetta del pulsante.
--bs-btn-line-height1.5Moltiplicatore predefinito dell’altezza riga dell’etichetta.
--bs-btn-border-width1pxSpessore predefinito del bordo.
--bs-btn-border-radiusvar(--bs-border-radius)Raggio predefinito del pulsante.
--bs-btn-disabled-opacity0.65Stile visivo; usa anche l’attributo disabled effettivo.

Variazioni dei ruoli tra modalità chiara e scura

Fonte
Nome / regolaValore / configurazioneUtilizzo
--bs-body-bglight #fff / dark #212529Lo sfondo della pagina dipende da data-bs-theme.
--bs-body-colorlight #212529 / dark #dee2e6Il colore del testo si adatta alla superficie.
--bs-border-colorlight #dee2e6 / dark #495057Bordo adattivo al tema.
--bs-primary-bg-subtlelight #cfe2ff / dark #031633Lo sfondo colorato dello stato cambia in base alla modalità.
--bs-primary-text-emphasislight #052c65 / dark #6ea8feDa usare con la superficie subtle corrispondente.
data-bs-themelight | darkDa impostare globalmente su html o su un sottoalbero locale.
03

Guida completa al sistema di design Bootstrap

Una guida pratica per scegliere, applicare e valutare questo sistema in un’interfaccia reale.

DESIGN-bootstrap.md

Indicazioni complete, un punto di partenza per l’implementazione e link alle fonti.

Scarica la guida

Sistema di design Bootstrap: scegli le responsabilità di Bootstrap e JavaScript CSS

Un foglio di stile, comportamento dei componenti opzionale

Il foglio di stile compilato di Bootstrap fornisce griglia, tipografia, utility e aspetto dei componenti. Il bundle JavaScript aggiunge plugin interattivi come Modal, Collapse e Dropdown. Un pulsante stilizzato non richiede JavaScript; un trigger modale data-bs-toggle, invece, sì. L’anteprima funzionante carica localmente il foglio di stile e il bundle corrispondenti alla versione 5.3.8, così che i controlli mostrino il comportamento effettivo previsto.

Da questa guida su OpenDesign

Il filtraggio della tabella delle prenotazioni, il riepilogo degli errori e l’inserimento locale delle righe sono codice dell’applicazione. Mantenere chiara questa distinzione permette di sostituire i dati fittizi con un servizio senza attribuire a Bootstrap funzionalità di prenotazione che non offre.

  • CSS: layout, tipografia, pulsanti, campi, tabelle e stili degli stati.
  • Bootstrap JavaScript: apertura della modale, sfondo, tasto Escape e gestione dello stato attivo.
  • JavaScript dell’applicazione: messaggi di convalida, filtraggio dei record e aggiornamenti dei dati locali.

Leggi la specifica di supporto

Scegli CSS compilato o una build Sass

Usa CSS compilato per iniziare rapidamente o per un prodotto che può adottare il set standard di utility. Usa il sorgente Sass per modificare le mappe dei temi, la generazione delle utility o la griglia in fase di build. Le proprietà personalizzate di CSS a runtime sono utili per personalizzare i singoli componenti, ma modificare una variabile di colore radice non ricompila tutte le varianti precompilate.

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

Riferimento del codice

Leggi la specifica di supporto

Applica colori semantici e modalità colore nel sistema di design Bootstrap

Abbina una superficie di stato al colore del testo in primo piano

I badge delle prenotazioni usano bg-primary-subtle con text-primary-emphasis. Sono ruoli semantici abbinati, quindi il colore del testo e lo sfondo si adattano entrambi quando cambia data-bs-theme. Uno sfondo blu puro abbinato a un colore grigio arbitrario per il testo perde questa relazione. Le etichette «Prenotato», «In uso» e «Bozza» restano inoltre visibili: il colore non è l’unico modo per comunicarne il significato.

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>

Riferimento del codice

Leggi la specifica di supporto

Limita le personalizzazioni al componente

Per un’azione personalizzata, modifica localmente le proprietà --bs-btn-*. Imposta i valori di hover e active oltre allo sfondo a riposo. L’esempio qui sotto è una variante dell’applicazione, non un valore predefinito di Bootstrap. Applica questa classe solo al pulsante interessato, così da non modificare inavvertitamente tutte le azioni principali in altre parti della pagina.

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;
}

Riferimento del codice

Leggi la specifica di supporto

Usa la scala tipografica effettiva del sistema di design Bootstrap

Distingui la semantica del documento dalla dimensione visiva

Il titolo principale dell’anteprima è un h1 con la classe h3: resta l’intestazione principale della pagina, ma usa una scala visiva più contenuta, adatta a uno strumento. Le intestazioni di sezione sono elementi h2 con lo stile h5. Bootstrap fornisce sia gli stili predefiniti degli elementi sia le classi equivalenti per le intestazioni, consentendo questa distinzione senza saltare livelli nella struttura del documento.

Il testo del corpo predefinito è 1rem con un’altezza riga di 1.5. Le dimensioni da h1 a h4 aumentano in modo responsive prima di raggiungere i valori della tabella di riferimento. Uno screenshot a una sola larghezza, quindi, non definisce l’intera scala tipografica. Usa gli stili compilati o il comportamento Sass documentato invece di copiare una dimensione in pixel misurata in un’unica finestra.

Leggi la specifica di supporto

Assegna al testo secondario un ruolo adattivo al tema

text-body-secondary segue la modalità colore del corpo. È adatto alle informazioni di supporto sui record, come il nome del responsabile sotto il titolo dell’attrezzatura. La classe small riduce le dimensioni rispetto al contesto; applicarla a tutte le etichette dei campi renderebbe il modulo più difficile da consultare. Mantieni le etichette alla dimensione normale dei moduli e riserva il testo compatto ai suggerimenti e ai metadati.

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>

Riferimento del codice

Leggi la specifica di supporto

Componi con le utility di spaziatura e la griglia nel sistema di design Bootstrap

Usa la scala invece di spazi arbitrari

p-3 indica un padding di 1rem; p-4 indica 1.5rem e p-5 passa a 3rem. Le etichette sono chiavi della scala, non quantità espresse letteralmente in pixel. L’anteprima usa p-3 p-md-4, così il padding esterno aumenta a 768px, mentre mb-3 separa i gruppi di campi di 1rem. È una scelta concreta per questo esempio, non una nuova scala di spaziatura ufficiale.

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>

Riferimento del codice

Leggi la specifica di supporto

Mantieni intatta la relazione tra righe e colonne

Leggi la specifica di supporto

Crea campi con relazioni esplicite nel sistema di design Bootstrap

Collega etichette, suggerimenti e messaggi di convalida

form-label applica uno stile a un’etichetta reale; il suo valore for deve corrispondere all’id dell’input. form-control applica uno stile agli input di testo, mentre form-select applica uno stile a un elemento select. L’anteprima usa aria-describedby per gli ID dei suggerimenti e degli errori e required per il vincolo effettivo. I nomi delle classi non creano automaticamente queste relazioni semantiche.

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>

Riferimento del codice

Leggi la specifica di supporto

Usa uno stato di errore reale e un riepilogo raggiungibile

Al momento dell’invio, l’esempio controlla ogni campo, imposta is-invalid e aria-invalid, crea collegamenti testuali ai campi non validi e porta il focus sul riepilogo. La correzione di un campo ne aggiorna lo stato senza cancellare le altre risposte. Questo livello applicativo è essenziale: la documentazione di convalida Bootstrap avverte che il solo feedback visivo personalizzato non è esposto completamente alle tecnologie assistive.

  1. Controlla il risultato del vincolo effettivo prima di contrassegnare il campo come non valido.
  2. Associa il testo dell’errore al campo e rendi noto lo stato non valido.
  3. Dopo l’invio, porta il focus su un riepilogo utile o sul primo campo non valido.

Leggi la specifica di supporto

Sistema di design Bootstrap: presentare e filtrare i record senza perderne il significato

Usa il componente tabella per dati da confrontare

La tabella ha intestazioni di colonna e di riga, oltre a una didascalia. table-hover applica uno stile al passaggio del cursore, ma non trasforma le righe in pulsanti. Il filtro modifica la visibilità delle righe corrispondenti e aggiorna il conteggio dei risultati con aria-live. Lo stato mostrato resta testuale all’interno di un badge, così il suo significato non cambia al variare della modalità colore.

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>

Riferimento del codice

Leggi la specifica di supporto

Limita lo scorrimento della tabella ai dati

table-responsive consente lo scorrimento orizzontale quando una tabella ampia non entra nello spazio disponibile. Prima di inserire in questo contenitore un menu a discesa che deve fuoriuscire dalla sua area ritagliata, verifica che funzioni correttamente. Nell’esempio, il filtro si trova sopra la tabella. Sui dispositivi mobili può scorrere orizzontalmente solo l’area dei dati; la pagina deve rimanere entro il viewport.

Leggi la specifica di supporto

Sistema di design Bootstrap: rivedere la selezione con la finestra modale API

Apri la finestra solo dopo aver convalidato il modulo

L’esempio interattivo crea o riutilizza l’istanza Bootstrap Modal e chiama show solo quando la convalida ha esito positivo. In questo modo la finestra di riepilogo non copre gli errori che richiedono attenzione. Il testo viene popolato con i valori correnti; scegliendo Modifica dettagli si chiude la finestra modale e i dati del modulo restano invariati.

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();
});

Riferimento del codice

Leggi la specifica di supporto

Gestisci la finestra modale come un componente con un proprio ciclo di vita

Bootstrap gestisce lo sfondo e le transizioni. Usa i suoi metodi e i suoi eventi invece di alternare manualmente la proprietà display, per evitare incoerenze nel focus o nello sfondo. In questa dimostrazione, la conferma aggiunge una riga alla tabella locale e chiude la finestra modale; non chiama un servizio di prenotazione. Il messaggio di conferma descrive con precisione questo risultato locale.

Leggi la specifica di supporto

Sistema di design Bootstrap: integrare ed estendere questo esempio Bootstrap

Carica una release corrispondente di CSS e JavaScript

L’esempio incorporato carica i file Bootstrap 5.3.8 CSS e bundle archiviati localmente. Gli attributi data e l’API Modal provengono da questa release. In un’applicazione Vite, importa il file CSS compilato e il plugin necessario come mostrato nella sezione di configurazione. Evita di caricare il bundle e inizializzare una seconda copia dello stesso plugin tramite un altro wrapper.

Leggi la specifica di supporto

Estendi l’esempio rispettando il contratto effettivo del componente

  • Usa l’esempio per verificare il focus, la chiusura della finestra modale e i cambi di tema.
  • Mantieni separate le operazioni sui dati dell’applicazione dal comportamento del plugin Bootstrap.
  • Ricontrolla ogni personalizzazione del tema negli stati normale, hover, focus, non valido e disabilitato.

Leggi la specifica di supporto

Bootstrap Esempi di componenti del sistema di design

index.html — esempio completo per le prenotazioni

Una pagina completa con Bootstrap 5.3.8, il foglio di stile, il runtime modale, la convalida, i filtri e la conferma locale. Salva questo file come index.html e servi la cartella con il comando riportato sotto. Le dipendenze CDN fissate a una versione specifica richiedono una connessione di rete.

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>

Riferimento del codice

  • Nessun servizio riceve i dati del modulo. Le prenotazioni confermate esistono solo nella sessione di questa pagina.
  • L’anteprima locale include gli stessi file CSS e JavaScript fissati a una versione specifica; questa copia usa i relativi URL CDN pubblici.

Etichetta del campo, suggerimento e stato di errore esplicito

Questa composizione autonoma del campo usa gli stili di Bootstrap e un risultato di convalida reale. L’esempio di pagina aggiunge un riepilogo degli errori con collegamenti attivabili da tastiera ai tre campi. Un semplice bordo rosso non comunica come correggere l’errore.

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>

Riferimento del codice

  • .is-invalid può essere impostato esplicitamente senza .was-validated.
  • aria-describedby collega il testo del suggerimento e dell’errore; aria-invalid esprime lo stato corrente.
  • La documentazione avverte che il solo feedback visivo personalizzato non fornisce informazioni sufficienti alle tecnologie assistive.

Una finestra modale di riepilogo nativa con un’etichetta chiara

La finestra modale usa il plugin effettivo di Bootstrap, lo sfondo, la gestione del tasto Esc e la gestione del focus. Inserisci il titolo in modal-header, il riepilogo in modal-body e le azioni per proseguire 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>

Riferimento del codice

  • Carica una volta il bundle JavaScript corrispondente di Bootstrap.
  • L’attributo data API apre un esempio statico; il modulo di prenotazione funzionante usa Modal.getOrCreateInstance dopo l’inserimento di dati validi.
  • Usa shown.bs.modal per il comportamento che deve attendere il completamento della transizione di apertura.

Composizione reattiva di elenco e modulo

Al breakpoint lg, l’elenco delle attrezzature occupa sette colonne e il modulo cinque. Sotto lg, le due sezioni si dispongono una sotto l’altra. g-4 assegna alla composizione uno spazio tra gli elementi di 1.5rem. Le colonne descrivono le larghezze; le sezioni e le intestazioni semantiche descrivono il contenuto.

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>

Riferimento del codice

  • La stessa griglia può usare col-md-* se i contenuti trovano davvero spazio già a quel breakpoint.
  • Usa la tabella dei breakpoint qui sopra invece di media query con variabili CSS; var() non può fornire una soglia per una media query.
04

Bootstrap Configurazione dell’agente per il sistema di design

Punto di partenza per l’implementazione

Questo esempio completo con HTML non richiede una fase di compilazione. Importa Bootstrap 5.3.8 dagli URL CDN fissati a una versione specifica, indicati nel file. Gli esempi più brevi qui sotto isolano singoli schemi della pagina funzionante.

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.

Un prompt per il tuo progetto

Prompt per l’agente
Implementa un’interfaccia per prenotare attrezzature usando Bootstrap 5.3.8 e questa guida. Usa una riga g-4 con col-lg-7 e col-lg-5, spaziatura p-3 p-md-4, ruoli cromatici per il corpo del testo e per i colori tenui e intensi, una tabella semantica e controlli del modulo con etichette. Esegui la convalida con errori espliciti e un riepilogo degli errori prima di aprire la finestra modale nativa Bootstrap Modal. Quando si modificano i dati, conserva i valori inseriti; aggiungi record solo allo stato locale della demo, a meno che non venga fornito un vero API. Supporta data-bs-theme light/dark e la chiusura da tastiera. Non sostituire la scala indicata con valori arbitrari.
05

Bootstrap Fonti e ambito del sistema di design

Guida applicativa Bootstrap 5.3.8 di OpenDesign ed esempio eseguibile con componenti nativi. I valori di riferimento provengono dalla documentazione Bootstrap collegata e dal file CSS compilato e fissato a una versione specifica. I record delle prenotazioni, la composizione del layout e il riepilogo della convalida sono codice applicativo originale; non viene inviata alcuna prenotazione reale.