Services publics et éducation · Nouvelle ressource

Système de design Amsterdam.

Utilisez le contrat réel et open source de Switch de Amsterdam, avec un thème neutre complet, des libellés accessibles et des préférences de lecture appliquées immédiatement.

Guide OpenDesign8 chapitres25 entrées de référenceGuide de l’application d’origine
01

Aperçu de l’interface du système de design Amsterdam

Activez le texte agrandi, le contraste renforcé et la réduction des animations de l’aperçu ; restaurez les paramètres par défaut.

Personnalisez un aperçu de lectureOuvrir l’exemple complet
CSS du commutateur natif Amsterdam4.4.0, thème neutre d’origine et comportement de l’application ; aucun élément graphique propriétaire. · Référence de mise en œuvre
02

Référence de conception du système de design Amsterdam

Implémentations de CSS et React4.4.0 examinées ; vérification des limites concernant les jetons et les éléments graphiques propriétaires. Toutes les valeurs du thème de l’aperçu sont originales.

Contrat du composant open source

Source
Nom / règleValeur / configurationUtilisation
CSS package@amsterdam/design-system-css 4.4.0Feuille de style du commutateur natif utilisée sans modification.
Class anatomyams-switch; ams-switch__input; ams-switch__labelL’input précède immédiatement le label associé.
Input semanticstype=checkbox; role=switchL’état natif checked représente l’activation ou la désactivation.
Native behaviorImmediate binary settingLa source React indique qu’aucune soumission de formulaire n’est requise.
React propsInputHTMLAttributes<HTMLInputElement>Les propriétés checked, defaultChecked, onChange, disabled et ARIA sont transmises à l’input.
FocusInput focus styles the following labelNe masquez pas l’input réel avec display:none.

Thème neutre complet et original pour le commutateur

Source
Nom / règleValeur / configurationUtilisation
--ams-switch-inline-size50pxLargeur originale du rail du commutateur.
--ams-switch-thumb-inline-size / block-size22px / 22pxGéométrie originale du curseur circulaire.
--ams-switch-label-border-width3pxMarge intérieure du rail ; la translation à l’état checked utilise cette valeur.
--ams-switch-background-color#666Couleur originale du rail à l’état désactivé.
--ams-switch-checked-background-color#286044 Couleur originale du rail à l’état activé ; ce n’est pas un jeton de marque Amsterdam.
--ams-switch-thumb-background-color#fffCouleur originale du curseur.
--ams-switch-disabled-background-color#aaaApparence en état désactivé ; la propriété native disabled fournit le comportement correspondant.
--ams-switch-outline-offset4pxDétachement de l’anneau de focus.
--ams-switch-cursor / disabled-cursorpointer / not-allowedConfiguration explicite des interactions.
--ams-switch-thumb-hover-box-shadow0 0 0 2px #fffTraitement original au survol.

Typographie et mise en page de l’application

Source
Nom / règleValeur / configurationUtilisation
Font / bodyArial / 18px with 1.5 leadingConfiguration neutre originale ; aucun élément graphique Amsterdam Sans.
Heading36px; 30px below700pxChoix de l’application, pas une échelle officielle de Amsterdam.
Layout900px maximum; two columns with32px gapChoix de l’application ; une colonne sous 700px.
Larger reading mode22px article textPréférence locale, qui ne remplace pas le zoom global du navigateur.
Reduced motionOS preference plus local preview settingLe composant CSS respecte déjà prefers-reduced-motion pour ses transitions.

Réutilisation et limites de propriété

Source
Nom / règleValeur / configurationUtilisation
Component codeEUPL-1.2 or laterConservez la licence et les mentions applicables.
DocumentationCC0-1.0Séparez-le des éléments graphiques propriétaires.
Token package4.3.0Proprietary assetsSa propre licence LICENSE l’exclut de la licence open source.
Amsterdam Sans / icons / logoRestricted institutional assetsNon repris dans cet exemple indépendant.
03

Guide complet du système de design Amsterdam

Un guide pratique pour choisir, appliquer et évaluer ce système dans une interface réelle.

DESIGN-amsterdam.md

Des conseils complets, un point de départ pour la mise en œuvre et des liens vers les sources.

Télécharger le guide

Système de design Amsterdam : séparer le composant du thème

Utilisez honnêtement la couche open source

Amsterdam publie séparément le composant CSS, ce qui permet d’implémenter son contrat de classes en dehors de React. La feuille de style dépend des propriétés personnalisées de CSS ; l’importer sans thème complet laisse des dimensions et des couleurs importantes sans valeur définie. La feuille de style du commutateur natif de cet exemple est donc associée à une configuration neutre complète et originale.

Extrait de ce guide OpenDesign

Le dépôt distingue les packages open source des éléments graphiques propriétaires. Le package de jetons examiné, en version 4.3.0, comporte sa propre mention de licence, qui l’exclut de la licence open source. Amsterdam Sans, les icônes et le logo de la ville sont également soumis à des restrictions spécifiques. Ce guide les mentionne à titre de contexte, mais ne les redistribue pas et ne prétend pas qu’un téléchargement public depuis npm confère des droits d’utilisation illimités de la marque.

Consultez la spécification associée

Système de design Amsterdam : une configuration neutre complète

Fournissez toutes les propriétés nécessaires au composant

Le tableau de référence répertorie toutes les variables utilisées par la feuille de style du commutateur sélectionnée. La largeur, les dimensions du curseur, l’épaisseur de la bordure, les couleurs, le décalage du contour, le curseur et le traitement au survol ont tous des valeurs explicites. Ces valeurs sont originales pour cet exemple et ne sont pas des jetons de conception Amsterdam copiés. Cette distinction permet de reproduire l’exemple sans avoir à deviner les éléments manquants du thème.

Le rail mesure 50px de large, avec un curseur de 22px et une bordure de 3px. La transformation de l’état natif checked calcule le déplacement du curseur à partir de sa largeur et de l’épaisseur de la bordure. Modifier uniquement la largeur du rail peut donc désaligner le curseur ; modifiez ensemble les dimensions associées et vérifiez les deux états.

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

Référence du code

Consultez la spécification associée

Système de design Amsterdam : anatomie du commutateur natif

Le label doit suivre l’input

L’implémentation React produit un conteneur, un input et un label associé vide. Son CSS utilise des sélecteurs de frères adjacents pour appliquer des styles au label en fonction des états de focus, checked et disabled de l’input. Dans une implémentation HTML simple, conservez cet ordre : insérer une description entre l’input et le label rompt ces sélecteurs.

L’input réel est une case à cocher avec role="switch". Il conserve la propriété native checked et le comportement clavier. Comme le label visuel ne contient aucun texte, fournissez un nom accessible avec aria-label ou aria-labelledby. L’exemple fait référence au titre visible du paramètre et associe son explication avec 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>

Référence du code

Consultez la spécification associée

Système de design Amsterdam : paramètres immédiats

Un commutateur modifie la vue actuelle

Le code source du composant définit Switch comme un paramètre binaire à effet immédiat. L’aperçu respecte ce contrat : l’agrandissement du texte modifie la taille de l’article, le renforcement du contraste modifie le texte et le contour, et la réduction des animations supprime le bref effet d’apparition du badge. Aucun bouton Enregistrer ne prétend envoyer ces choix locaux à un service de compte.

Restaurer les paramètres par défaut désactive les trois états natifs checked et réapplique les classes par défaut de l’article. Un message d’état décrit les paramètres activés. Rien n’est conservé après une navigation ou un rechargement. Un service de préférences en production pourrait ajouter la persistance, mais il devrait préciser si le paramètre s’applique à cette page, à un appareil ou à un compte.

  1. Activez Texte agrandi et vérifiez la taille du paragraphe dans l’article adjacent.
  2. Placez le focus sur Contraste renforcé et appuyez sur Espace pour l’activer ou le désactiver au clavier.
  3. Restaurez les paramètres par défaut et vérifiez que les trois commutateurs et l’article reviennent ensemble à leur état initial.

Consultez la spécification associée

Système de design Amsterdam : clavier, focus et animations

Laissez l’input natif disponible

La feuille de style réduit la largeur visuelle de l’input, mais conserve le contrôle réel. Son sélecteur de focus place le contour sur le label suivant. Remplacer l’input par un div décoratif ferait perdre les sémantiques natives du formulaire et nécessiterait une implémentation clavier distincte. N’appliquez pas display:none à l’input.

La feuille de style native limite ses transitions à prefers-reduced-motion:no-preference. L’effet appliqué à l’article respecte également la préférence du système d’exploitation, indépendamment du commutateur local. Une personne qui demande moins d’animations au niveau du système ne devrait pas avoir à découvrir un commutateur supplémentaire pour que l’exemple adopte un comportement discret.

  • Utilisez la propriété checked comme source de vérité ; n’inventez pas un état visuel activé sans rapport.
  • Donnez un nom stable à chaque paramètre et associez son explication au champ correspondant.
  • Après avoir modifié la géométrie ou les couleurs du thème, testez les états désactivé, activé, avec focus et indisponible.

Consultez la spécification associée

Système de design Amsterdam — composition de l’aperçu de lecture

Montrez l’effet à côté du contrôle

L’exemple utilise une composition en deux colonnes afin que chaque paramètre ait une conséquence visible dans l’article. En dessous d’un point de rupture de 700px propre à l’application, les contrôles s’empilent au-dessus de l’aperçu. La largeur maximale de 900px et l’écart de 32px sont des choix de mise en page initiaux, et non la preuve d’un jeton de grille à l’échelle de la ville.

La police neutre est Arial. Le texte du corps est en 18px, avec une interligne de 1.5 ; le mode texte agrandi ne modifie que l’article, qui passe à 22px. Il s’agit d’un exemple de paramètre d’application, et non d’un remplacement du zoom du navigateur ni d’une affirmation selon laquelle ces tailles seraient prescrites par Amsterdam. Les libellés longs passent à la ligne sans réduire la largeur native de l’interrupteur.

Consultez la spécification associée

Système de design Amsterdam — intégration de CSS ou React

Choisissez la couche d’implémentation

Dans une application React existante, le composant Switch vérifié accepte les attributs d’entrée standard et transmet la ref à l’input. Pour une utilisation contrôlée, fournissez checked et onChange ; pour une utilisation non contrôlée, vous pouvez fournir defaultChecked. Le composant ne fournit ni stockage d’application ni API de préférences de compte.

Pour cet exemple indépendant de HTML, seul le Switch open source CSS est requis. La configuration et le code complet fournissent la configuration de thème manquante et la gestion locale de l’état. Le gestionnaire de paquets peut installer des ressources propriétaires comme dépendances ; leur présence sur le disque n’autorise pas à les importer ni à les distribuer. L’exemple intégré ne contient que le CSS sélectionné et sa licence open source.

Consultez la spécification associée

Système de design Amsterdam — adoption et limites

Ne confondez pas ressemblance visuelle et affiliation

Le système de la ville vise à rendre les produits municipaux cohérents et accessibles. Son code réutilisable peut être étudié et adapté dans le respect de sa licence, mais son logo, sa police propriétaire et ses icônes sont soumis à des conditions distinctes. L’aperçu utilise une identité visuelle originale et un contenu neutre afin d’éviter qu’il soit pris pour un service Amsterdam.

La portée vérifiée se limite à un composant natif doté d’un thème personnalisé complet et d’un comportement local pertinent. Il ne s’agit pas d’une réimplémentation complète du thème de la ville. Un produit réel qui adopte le package CSS plus large doit définir et tester toutes les variables requises par les composants supplémentaires, plutôt que d’extrapoler la configuration de ce Switch à des contrôles sans rapport.

Consultez la spécification associée

Système de design Amsterdam — exemples de composants

Thème Switch neutre complet

Toutes les variables requises par la feuille de style native sont définies ; toutes les valeurs sont originales.

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

Référence du code

Structure native accessible

Véritable champ de saisie checkbox, rôle switch et libellé visuel adjacent.

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>

Référence du code

Préférences de lecture immédiates et complètes

Switch natif CSS, thème personnalisé et effets locaux visibles.

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>

Référence du code

04

Système de design Amsterdam — configuration de l’agent

Point de départ de l’implémentation

Utilisez uniquement le CSS open source ; le thème original complet et le HTML fonctionnel sont inclus. Aucun ensemble de jetons ou de ressources propriétaire n’est distribué. L’archive ZIP complète de l’exemple fonctionnel, disponible dans les Sources, fournit également les dépendances exactes de l’aperçu et le document complet. Extrayez-la, exécutez python3 -m http.server 8080 dans ce répertoire, puis ouvrez http://localhost:8080/amsterdam.html. N’ouvrez pas les exemples utilisant des modules via 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 pour votre projet

Prompt pour l’agent IA
Utilisez le Switch open source CSS de Amsterdam avec un thème original complet. Préservez la structure wrapper/input/libellé adjacent, role=switch et un nom accessible. Appliquez immédiatement les paramètres binaires et utilisez checked comme état. Respectez la préférence de réduction des animations et distinguez les préférences locales des paramètres de compte enregistrés. N’importez pas de jetons, polices, logos ou icônes propriétaires sans disposer des droits nécessaires.
05

Système de design Amsterdam — sources et portée

Exemple indépendant de OpenDesign. Les jetons de marque Amsterdam, la police Amsterdam Sans, les icônes officielles et le logo ne sont pas inclus.