Problématique : Gérer plusieurs interfaces digitales pour une entreprise nécessite :
Solution : Le Design System est une méthodologie qui répond à ces enjeux en industrialisant la conception des interfaces.
Un Design System est une bibliothèque de composants réutilisables (boutons, formulaires, cartes, etc.) associée à des règles d’utilisation (guides de style, conventions de nommage, charte graphique,…).
Il sert de référentiel unique pour garantir la cohérence visuelle et fonctionnelle sur tous les projets digitaux d’une entreprise.
Exemple 1 : Photon Design System de Mozilla (utilisé pour Firefox).
Exemple 2 : Material Design de Google
Si vous n’utilisez pas de Design System, cela peut engendrer les problèmes suivants :
Un Design System repose sur 4 éléments clés :
Exemple :
:root { --primary-color: #22c55e; /* Vert */ --secondary-color: #0f172a; /* Bleu foncé */ --font-main: 'Inter', sans-serif; --spacing-unit: 8px; }
Cette méthode a été proposée par Brad Frost en 2013. Il s’agit d’une approche qui vise à améliorer la qualité du design en le rendant plus efficace et plus facile à utiliser, grâce à l’organisation des éléments graphiques en différents niveaux de complexité. Ces derniers sont conçus pour être scalables, réutilisables* et modulaires, pouvant être combinés pour construire des sections plus grandes.
Elle permet d’optimiser la création, la maintenance et la mise à jour des éléments visuels du design. C’est une approche logique et systémique qui facilite la création d’un design cohérent et compréhensible, tout en améliorant de facto l’expérience utilisateur globale.
Inspiré de la chimie, l’approche Atomic Design décompose une interface en 5 niveaux :
(Atomes → Molécules → Organismes → Templates → Pages)
Sources : justinmind.com
Document qui détaille chaque composant :
Lien vers une vidéo de présentation sur l’Atomic Design
<button class="btn-primary">Valider</button>
Outils recommandés :
Exemple de palette :
Nous n’avons pas forcément le temps d’aborder tous les sujets, techniques et méthodes associés au Design System, mais sachez qu’il existe l’Atomic Design qui fait l’objet d’une courte présentation (existe depuis 2013)
Exemple : Un bouton (en version VueJS) :
<template> <button :class="['btn', `btn--${variant}`]"> <slot></slot> </button> </template> <script> export default { props: { variant: { type: String, default: 'primary', // primary|secondary|ghost }, }, }; </script> <style> .btn { padding: 0.5rem 1rem; border-radius: 4px; font-weight: 500; } .btn--primary { background: #22c55e; color: white; } </style>
Exemple : Une carte (Card) avec un titre (atome) et un bouton (atome) :
<template> <div class="card"> <h3></h3> <p> <hr /> <h1 id="a-rédiger">A rédiger</h1> </p> <DevButton variant="secondary">En savoir plus</DevButton> </div> </template>
Exemple de documentation :
Utilisation : Mettre en avant un contenu (article, produit).
Props :
title
content
<DevCard title="Mon Produit" content="Description..." />
Vous pouvez utiliser un de vos Frameworks préférés.
Consigne :
variant
primary
secondary
disabled
Consigne : Utilise le bouton créé précédemment pour construire une carte (DevCard).
La carte doit avoir :
Consigne : Rédige une documentation Markdown pour la carte créée.
Une description :
Une entreprise de e-commerce souhaite harmoniser ses 5 sites web (desktop + mobile).
StoryBoard est pas mal et gratuit.
Un Design System n’est pas un projet ponctuel, mais un processus continu qui évolue avec vos produits.
Il nécessite :
:root { --primary: #22c55e; /* Vert */ --secondary: #0f172a; /* Bleu foncé */ --text: #e5e7eb; /* Texte clair */ --font-main: 'Inter', sans-serif; }
Tap correspond à l’action de l’utilisateur consistant à taper/cliquer sur un élément interactif (bouton, lien, carte, etc.). Navigation, c’est la changement de page, de vue, ou de section dans une application ou un site web, déclenché par cette action.
Comportement :
Quand un utilisateur click ou tape dans le cas d’une application sur mobile, sur un élément (ex : un bouton, un lien, une carte), l’application navigue vers une autre page, un autre écran, ou une autre section.
Exemples : Cliquer sur un bouton “Voir le produit” pour accéder à la page détaillée du produit ou taper sur un onglet de menu pour afficher une nouvelle section.
Exemple technique (Vue.js/React)
<template> <button @click="$router.push('/produit')">Voir le produit</button> </template>
Dans ce code, le @click (ou v-on:click) déclenche une navigation vers la route / produit.
@click
v-on:click
Cas d’usage :
Overlay : c’est un calque superposé à l’interface existante, souvent semi-transparent, qui masque partiellement le contenu sous-jacent, tandis que la Modale est une fenêtre ou boîte de dialogue qui s’affiche par-dessus le contenu principal et requiert une action de l’utilisateur (fermeture, validation, etc.) pour revenir à l’interface normale.
Un overlay est utilisé pour attirer l’attention sur un contenu spécifique (ex : une alerte, un formulaire, une confirmation) sans quitter la page.
Exemples :
Exemple technique (Vue.js)
<template> <div> <button @click="showModal = true">Ouvrir la modal</button> <div v-if="showModal" class="modal-overlay"> <div class="modal"> <h2>Titre de la modal</h2> <p>Contenu de la modal...</p> <button @click="showModal = false">Fermer</button> </div> </div> </div> </template> <script> export default { data() { return { showModal: false }; } }; </script> <style> .modal-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.5); /* Fond semi-transparent */ display: flex; align-items: center; justify-content: center; z-index: 1000; /* Au-dessus du reste */ } .modal { background: white; padding: 2rem; border-radius: 8px; max-width: 500px; width: 100%; } </style>
Cas d’usage
Smart Animate est une technique d’animation intelligente qui permet de fluidifier les transitions entre deux états d’une interface, en utilisant des interpolations (mouvements, fondu, redimensionnement) pour rendre les changements plus naturels et moins abrupts.
Souvent implémentée avec des outils spécifiques comme des bibliothèques CSS du type Animate.css ou framer-motion.
Quand un élément change de position, de taille, ou de contenu, une animation fluide est appliquée pour guider l’œil de l’utilisateur et améliorer son expérience (du moins pour les personnes voyantes)
Exemple avec des CSS (transition)
.card { transition: all 0.3s ease; /* Animation fluide */ } .card:hover { transform: scale(1.05); /* Légèrement agrandi */ box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2); /* Ombre plus marquée */ }
Micro-interactions :
Transitions entre pages :
Éléments dynamiques :
Pour conclure :
<template> <button :class="['btn', `btn--${variant}`]" :disabled="disabled"> <slot>Bouton</slot> </button> </template> <script> export default { props: { variant: { type: String, default: 'primary' }, disabled: { type: Boolean, default: false }, }, }; </script>
<template> <div class="card"> <h3></h3> <p> <hr /> <h1 id="a-rédiger">A rédiger</h1> </p> <DevButton variant="secondary">En savoir plus</DevButton> </div> </template> <script> import DevButton from './DevButton.vue'; export default { components: { DevButton }, props: { title: { type: String, default: 'Titre par défaut' }, content: { type: String, default: 'Contenu par défaut' }, }, }; </script>
La Carte (DevCard)
Description : Affiche un contenu sous forme de carte avec un titre, une description et un bouton.
Propriétés (tableau) :
<DevCard title="Mon Produit" content="Un produit incroyable..." />