Servizi pubblici e istruzione · Nuova risorsa

sistema di design Amsterdam.

Usa il contratto reale e open source di Switch di Amsterdam, con un tema neutro completo, etichette accessibili e preferenze di lettura applicate immediatamente.

Guida OpenDesign8 capitoli25 voci di riferimentoGuida applicativa originale
01

Anteprima dell’interfaccia del sistema di design Amsterdam

Attiva o disattiva il testo ingrandito, il contrasto elevato e la riduzione del movimento nell’anteprima; ripristina le impostazioni predefinite.

Regola un’anteprima di letturaApri l’esempio completo
CSS4.4.0 dello Switch nativo Amsterdam, tema neutro originale e comportamento dell’applicazione; nessuna risorsa proprietaria. · Riferimento per l’implementazione
02

Riferimento di progettazione del sistema di design Amsterdam

Implementazione di CSS e React4.4.0 esaminata; verificato il confine tra token e risorse proprietarie. Tutti i valori del tema dell’anteprima sono originali.

Contratto del componente open source

Fonte
Nome / regolaValore / configurazioneUtilizzo
CSS package@amsterdam/design-system-css 4.4.0Foglio di stile dello Switch nativo usato senza modifiche.
Class anatomyams-switch; ams-switch__input; ams-switch__labelL’input precede immediatamente l’etichetta associata.
Input semanticstype=checkbox; role=switchLo stato nativo `checked` rappresenta acceso/spento.
Native behaviorImmediate binary settingIl sorgente di React specifica che non è necessario inviare il modulo.
React propsInputHTMLAttributes<HTMLInputElement>Le proprietà checked, defaultChecked, onChange, disabled e ARIA vengono passate all’input.
FocusInput focus styles the following labelNon nascondere l’input effettivo con display:none.

Tema neutro originale completo per lo Switch

Fonte
Nome / regolaValore / configurazioneUtilizzo
--ams-switch-inline-size50pxLarghezza originale della traccia dello Switch.
--ams-switch-thumb-inline-size / block-size22px / 22pxGeometria originale della manopola circolare.
--ams-switch-label-border-width3pxRientro della traccia; la traslazione nello stato checked usa questo valore.
--ams-switch-background-color#666Colore originale della traccia nello stato disattivato.
--ams-switch-checked-background-color#286044 Colore originale della traccia nello stato attivato; non è un token del brand Amsterdam.
--ams-switch-thumb-background-color#fffColore originale della manopola.
--ams-switch-disabled-background-color#aaaAspetto disattivato; la proprietà nativa disabled gestisce il comportamento.
--ams-switch-outline-offset4pxSeparazione dell’indicatore di focus.
--ams-switch-cursor / disabled-cursorpointer / not-allowedConfigurazione esplicita delle interazioni.
--ams-switch-thumb-hover-box-shadow0 0 0 2px #fffEffetto hover originale.

Tipografia e layout dell’applicazione

Fonte
Nome / regolaValore / configurazioneUtilizzo
Font / bodyArial / 18px with 1.5 leadingConfigurazione neutra originale; nessuna risorsa Amsterdam Sans.
Heading36px; 30px below700pxScelta dell’applicazione, non una scala ufficiale di Amsterdam.
Layout900px maximum; two columns with32px gapScelta dell’applicazione; una colonna sotto i 700px.
Larger reading mode22px article textPreferenza locale, non sostituisce lo zoom globale del browser.
Reduced motionOS preference plus local preview settingIl componente CSS rispetta già prefers-reduced-motion per le transizioni.

Riutilizzo e confini d’identità

Fonte
Nome / regolaValore / configurazioneUtilizzo
Component codeEUPL-1.2 or laterMantieni la licenza e gli avvisi applicabili.
DocumentationCC0-1.0Separato dalle risorse proprietarie.
Token package4.3.0Proprietary assetsLa licenza inclusa esclude questo elemento dalla licenza open source.
Amsterdam Sans / icons / logoRestricted institutional assetsNon copiato in questo esempio indipendente.
03

Guida completa al sistema di design Amsterdam

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

DESIGN-amsterdam.md

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

Scarica la guida

sistema di design Amsterdam: separazione tra componente e tema

Usa correttamente il livello open source

Amsterdam pubblica separatamente il componente CSS, così il relativo contratto delle classi può essere implementato al di fuori di React. Il foglio di stile dipende dalle proprietà personalizzate di CSS; importarlo senza un tema completo lascia irrisolte dimensioni e colori importanti. Per questo, in questo esempio il foglio di stile dello Switch nativo è abbinato a una configurazione neutra originale completa.

Da questa guida su OpenDesign

Il repository separa i pacchetti open source dalle risorse proprietarie. Il pacchetto di token esaminato, versione 4.3.0, include una propria nota di licenza che lo esclude dalla licenza open source. Anche Amsterdam Sans, le icone e il logo della città sono soggetti a restrizioni specifiche. Questa guida li cita come contesto, ma non li ridistribuisce né sostiene che il download da npm pubblico conceda diritti d’uso illimitati del brand.

Leggi la specifica di supporto

sistema di design Amsterdam: una configurazione neutra completa

Fornisci tutte le proprietà necessarie al componente

La tabella di riferimento elenca tutte le variabili usate dal foglio di stile dello Switch selezionato. Larghezza, dimensioni della manopola, spessore del bordo, colori, offset del contorno, cursore ed effetto hover hanno tutti valori espliciti. Si tratta di valori originali per questo esempio, non di token di progettazione Amsterdam copiati. Questa distinzione consente ai lettori di riprodurre l’esempio senza dover indovinare i valori mancanti del tema.

La traccia è larga 50px, con una manopola da 22px e un bordo da 3px. La trasformazione nativa dello stato checked calcola lo spostamento in base alla larghezza della manopola e allo spessore del bordo. Modificare solo la larghezza della traccia può quindi disallineare la manopola; modifica insieme le dimensioni correlate e verifica entrambi gli stati.

css
:root {
  --ams-switch-label-border-width:3px;
  --ams-switch-background-color:#666;
  --ams-switch-thumb-background-color:#fff;
  --ams-switch-thumb-inline-size:22px;
  --ams-switch-thumb-block-size:22px;
  --ams-switch-inline-size:50px;
  --ams-switch-checked-background-color:#286044;
  --ams-switch-disabled-background-color:#aaa;
  --ams-switch-disabled-cursor:not-allowed;
  --ams-switch-cursor:pointer;
  --ams-switch-outline-offset:4px;
  --ams-switch-thumb-hover-box-shadow:0 0 0 2px #fff;
}

Riferimento del codice

Leggi la specifica di supporto

sistema di design Amsterdam: anatomia dello Switch nativo

L’etichetta deve seguire l’input

L’implementazione di React genera un contenitore, un input e un’etichetta associata vuota. Il relativo CSS usa selettori di fratello adiacente per applicare uno stile all’etichetta in base agli stati di focus, checked e disabled dell’input. Mantieni questo ordine in un’implementazione HTML semplice: inserendo una descrizione tra l’input e l’etichetta, i selettori non funzionano più.

L’input effettivo è una checkbox con role="switch". Mantiene la proprietà nativa checked e il comportamento da tastiera. Poiché l’etichetta visiva non contiene testo, fornisci un nome accessibile tramite aria-label o aria-labelledby. L’esempio fa riferimento al titolo visibile dell’impostazione e collega la relativa spiegazione tramite aria-describedby.

html
<strong id="reading-label">Larger text</strong>
<p id="reading-hint">Increase the article text size immediately.</p>
<div class="ams-switch">
  <input class="ams-switch__input" id="reading" type="checkbox" role="switch"
    aria-labelledby="reading-label" aria-describedby="reading-hint">
  <label class="ams-switch__label" for="reading"></label>
</div>

Riferimento del codice

Leggi la specifica di supporto

sistema di design Amsterdam: impostazioni immediate

Uno switch modifica la visualizzazione corrente

Il codice sorgente del componente definisce Switch come un’impostazione binaria immediata. L’anteprima rispetta questo comportamento: il testo più grande modifica le dimensioni dell’articolo, il contrasto maggiore modifica il testo e il contorno, mentre la riduzione del movimento elimina il breve effetto di comparsa del badge. Non c’è un pulsante Salva che finga di inviare queste scelte locali a un servizio dell’account.

Ripristina impostazioni predefinite azzera tutti e tre gli stati checked nativi e riapplica le classi predefinite dell’articolo. Un messaggio di stato descrive le impostazioni attive. Le modifiche non vengono mantenute dopo la navigazione o il ricaricamento. Un servizio di preferenze in produzione potrebbe aggiungere la persistenza, ma dovrebbe specificare se l’impostazione riguarda questa pagina, un dispositivo o un account.

  1. Attiva Testo più grande e controlla le dimensioni del paragrafo nell’articolo accanto.
  2. Porta il focus su Contrasto maggiore e premi Spazio per attivarlo o disattivarlo con la tastiera.
  3. Ripristina le impostazioni predefinite e verifica che tutti e tre gli interruttori e l’articolo tornino allo stato iniziale insieme.

Leggi la specifica di supporto

Sistema di design Amsterdam: tastiera, focus e movimento

Mantieni disponibile l’input nativo

Il foglio di stile riduce la larghezza visiva dell’input, ma mantiene il controllo effettivo. Il selettore di focus applica il contorno all’etichetta successiva. Sostituire l’input con un div decorativo eliminerebbe la semantica nativa del modulo e richiederebbe un’implementazione separata per la tastiera. Non applicare display:none all’input.

Il foglio di stile nativo limita le transizioni a prefers-reduced-motion:no-preference. Anche l’effetto sull’articolo rispetta la preferenza del sistema operativo, indipendentemente dall’interruttore locale. Chi richiede meno movimento a livello di sistema non dovrebbe dover scoprire un interruttore aggiuntivo prima che l’esempio si comporti in modo discreto.

  • Usa la proprietà checked come fonte attendibile; non inventare uno stato visivo attivo non correlato.
  • Assegna a ogni impostazione un nome stabile e associa la relativa spiegazione all’input.
  • Dopo aver modificato la geometria o i colori del tema, prova gli stati disattivato, attivato, con focus e disabilitato.

Leggi la specifica di supporto

Sistema di design Amsterdam: composizione dell’anteprima di lettura

Mostra l’effetto accanto al controllo

L’esempio usa una composizione a due colonne, così ogni impostazione ha un effetto visibile sull’articolo. Sotto un punto di interruzione specifico dell’applicazione di 700px, i controlli si dispongono sopra l’anteprima. La larghezza massima di 900px e la spaziatura di 32px sono scelte originali per il layout, non indicazioni di un token della griglia cittadina.

Il carattere neutro è Arial. Il testo del corpo è di 18px con interlinea 1.5; la modalità testo più grande modifica solo l’articolo, portandolo a 22px. È un esempio di impostazione dell’applicazione, non un’alternativa allo zoom del browser né un’affermazione che queste dimensioni siano prescritte da Amsterdam. Le etichette lunghe vanno a capo senza ridurre la larghezza dell’interruttore nativo.

Leggi la specifica di supporto

Sistema di design Amsterdam: integrazione CSS o React

Scegli il livello di implementazione

In un’applicazione React esistente, il componente Switch verificato accetta gli attributi standard di input e inoltra il ref all’input. L’uso controllato fornisce checked e onChange; quello non controllato può fornire defaultChecked. Il componente non include un sistema di archiviazione per l’applicazione né una API per le preferenze dell’account.

Per questo esempio HTML indipendente è necessario soltanto lo Switch CSS open source. La configurazione e il codice completo forniscono la configurazione del tema mancante e la gestione dello stato locale. Il programma di installazione del pacchetto potrebbe scaricare risorse proprietarie come dipendenze; averle sul disco non autorizza a importarle o distribuirle. L’esempio incluso contiene solo il CSS selezionato e la relativa licenza open source.

Leggi la specifica di supporto

Sistema di design Amsterdam: adozione e limiti

Non confondere la somiglianza visiva con un’affiliazione

Il sistema cittadino mira a rendere coerenti e accessibili i prodotti municipali. Il relativo codice riutilizzabile può essere studiato e adattato nei limiti della sua licenza, ma il logo, il carattere proprietario e le icone sono soggetti a condizioni separate. L’anteprima usa un’identità visiva originale e contenuti neutri, per evitare che venga scambiata per un servizio Amsterdam.

L’ambito verificato comprende un componente nativo con un tema personalizzato completo e un comportamento locale significativo. Non è una reimplementazione completa del tema cittadino. Un prodotto reale che adotta il pacchetto CSS più ampio dovrebbe definire e verificare tutte le variabili richieste dagli altri componenti, invece di estendere per analogia questa configurazione di Switch a controlli non correlati.

Leggi la specifica di supporto

Sistema di design Amsterdam: esempi di componenti

Tema Switch neutro completo

Sono definite tutte le variabili richieste dal foglio di stile nativo; tutti i valori sono originali.

css
:root {
  --ams-switch-label-border-width:3px;
  --ams-switch-background-color:#666;
  --ams-switch-thumb-background-color:#fff;
  --ams-switch-thumb-inline-size:22px;
  --ams-switch-thumb-block-size:22px;
  --ams-switch-inline-size:50px;
  --ams-switch-checked-background-color:#286044;
  --ams-switch-disabled-background-color:#aaa;
  --ams-switch-disabled-cursor:not-allowed;
  --ams-switch-cursor:pointer;
  --ams-switch-outline-offset:4px;
  --ams-switch-thumb-hover-box-shadow:0 0 0 2px #fff;
}

Riferimento del codice

Struttura nativa accessibile

Input checkbox effettivo, ruolo switch ed etichetta visiva adiacente.

html
<strong id="reading-label">Larger text</strong>
<p id="reading-hint">Increase the article text size immediately.</p>
<div class="ams-switch">
  <input class="ams-switch__input" id="reading" type="checkbox" role="switch"
    aria-labelledby="reading-label" aria-describedby="reading-hint">
  <label class="ams-switch__label" for="reading"></label>
</div>

Riferimento del codice

Preferenze di lettura immediate e complete

Switch nativo CSS, tema personalizzato ed effetti locali visibili.

html
<!doctype html><html lang="en"><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Reading preferences</title><link rel="stylesheet" href="vendor/amsterdam-switch-4.4.0/switch.css"><style>:root{--ams-switch-label-border-width:3px;--ams-switch-background-color:#666;--ams-switch-thumb-background-color:#fff;--ams-switch-thumb-inline-size:22px;--ams-switch-thumb-block-size:22px;--ams-switch-inline-size:50px;--ams-switch-checked-background-color:#286044;--ams-switch-disabled-background-color:#aaa;--ams-switch-disabled-cursor:not-allowed;--ams-switch-cursor:pointer;--ams-switch-outline-offset:4px;--ams-switch-thumb-hover-box-shadow:0 0 0 2px #fff;}*{box-sizing:border-box}body{margin:0;padding:32px 24px;font:18px/1.5 Arial,sans-serif;color:#242b28;background:#fafbf9}main{max-width:900px;margin:auto}h1{font-size:36px;line-height:1.2;margin:8px 0 16px}h2{font-size:24px;line-height:1.3}.layout{display:grid;grid-template-columns:1fr 1fr;gap:32px}.setting{display:flex;justify-content:space-between;gap:20px;border-top:1px solid #d5ddd7;padding:20px 0}.setting p{margin:4px 0;font-size:16px}.ams-switch{flex-shrink:0}.sample{background:white;border:1px solid #d5ddd7;padding:24px}.sample.large{font-size:22px}.sample.high{color:#000;border:3px solid #000}.sample .meta{font-size:.85em;color:inherit}.badge{display:inline-block;background:#e7eee8;padding:4px 8px}.sample:not(.quiet) .badge{animation:appear .3s ease}@keyframes appear{from{opacity:.2}to{opacity:1}}button{font:inherit;border:1px solid #286044;background:#fff;color:#286044;padding:10px 16px;cursor:pointer}button:focus-visible{outline:3px solid #286044;outline-offset:3px}footer{font-size:14px;margin-top:32px;border-top:1px solid #d5ddd7;padding-top:20px}#status{min-height:1.5em}@media(max-width:700px){body{padding:24px 16px}.layout{grid-template-columns:1fr}h1{font-size:30px}}@media(prefers-reduced-motion:reduce){.sample .badge{animation:none!important}}</style><main><small>PERSONAL READING VIEW</small><h1>Make this page easier to read</h1><p>Settings apply immediately to the preview. They are not saved after you leave.</p><div class="layout"><section aria-label="Reading preferences"><div class="setting"><div><strong id="large-label">Larger text</strong><p id="large-hint">Increase the article text size.</p></div><div class="ams-switch"><input class="ams-switch__input" type="checkbox" role="switch" id="large" aria-labelledby="large-label" aria-describedby="large-hint"><label class="ams-switch__label" for="large"></label></div></div><div class="setting"><div><strong id="high-label">Stronger contrast</strong><p id="high-hint">Use black text and a stronger outline.</p></div><div class="ams-switch"><input class="ams-switch__input" type="checkbox" role="switch" id="high" aria-labelledby="high-label" aria-describedby="high-hint"><label class="ams-switch__label" for="high"></label></div></div><div class="setting"><div><strong id="quiet-label">Reduce preview motion</strong><p id="quiet-hint">Remove the short badge appearance effect.</p></div><div class="ams-switch"><input class="ams-switch__input" type="checkbox" role="switch" id="quiet" aria-labelledby="quiet-label" aria-describedby="quiet-hint"><label class="ams-switch__label" for="quiet"></label></div></div><button id="reset">Restore defaults</button><p id="status" role="status">Default reading settings.</p></section><article class="sample" id="sample"><span class="badge">Reading preview</span><h2>A quieter place to read</h2><p>A community reading room offers shared tables, individual seats and a small collection of reference books.</p><p>Before visiting, check opening hours and ask about any facilities you need.</p><p class="meta">Original example content · no external service</p></article></div><footer>Native Amsterdam Switch CSS 4.4.0 with an original neutral token configuration. No proprietary Amsterdam fonts, icons, logos or theme tokens. Original local preference behavior.</footer></main><script>const ids=['large','high','quiet'];function apply(){const enabled=[];ids.forEach(id=>{const on=document.getElementById(id).checked;document.querySelector('#sample').classList.toggle(id,on);if(on)enabled.push(document.querySelector('#'+id+'-label').textContent)});document.querySelector('#status').textContent=enabled.length?enabled.join(', ')+'.':'Default reading settings.'}ids.forEach(id=>document.getElementById(id).onchange=apply);document.querySelector('#reset').onclick=()=>{ids.forEach(id=>document.getElementById(id).checked=false);apply()};</script></html>

Riferimento del codice

04

Sistema di design Amsterdam: configurazione dell’agente AI

Punto di partenza per l’implementazione

Solo CSS open source; tema originale completo ed esempio HTML funzionante. Non viene distribuito alcun pacchetto proprietario di token o risorse. Il file ZIP completo dell’esempio funzionante, disponibile in Sources, include anche le dipendenze esatte dell’anteprima e il documento completo. Estrailo, esegui python3 -m http.server 8080 in quella directory, poi apri http://localhost:8080/amsterdam.html. Non aprire gli esempi basati su moduli tramite file://.

bash
npm install @amsterdam/[email protected]
# Copy dist/switch/switch.css into your public assets.
# Load it before the complete original theme configuration below.
# Do not import the proprietary assets or tokens for this neutral example.

Un prompt per il tuo progetto

Prompt per l’agente
Usa lo Switch CSS open source Amsterdam con un tema originale completo. Mantieni la struttura wrapper/input/etichetta adiacente, role=switch e un nome accessibile. Applica subito le impostazioni binarie e usa checked come stato. Rispetta la preferenza di movimento ridotto e distingui le preferenze locali da quelle dell’account persistenti. Non importare token, caratteri, loghi o icone proprietari senza i diritti pertinenti.
05

Sistema di design Amsterdam: fonti e ambito

Esempio indipendente di OpenDesign. I token di brand Amsterdam, Amsterdam Sans, le icone ufficiali e il logo non sono inclusi.