👋

Introduction

DevStarter Kit est une bibliothèque de templates HTML, CSS et JavaScript vanilla, conçue pour les développeurs web débutants et intermédiaires francophones.

L'objectif est simple : vous fournir des composants professionnels, prêts à copier-coller, pour que vous puissiez vous concentrer sur l'apprentissage plutôt que sur la réinvention permanente des mêmes éléments de base.

ℹ️

Zéro dépendance. Tous les templates fonctionnent avec un fichier HTML vierge. Pas de npm, pas de build tool, pas de CDN externe requis.

Ce que contient le kit

Contenu
📦 DevStarter Kit v1.0
├── 5  templates Navbar    (Simple, Centrée, CTA, Dashboard, Glassmorphism)
├── 5  templates Footer    (Simple, 3 colonnes, Social, Newsletter, Entreprise)
├── 10 templates Cards     (Product, Profile, Pricing, Blog, Testimonial…)
├── 6  templates Forms     (Login, Register, Contact, Newsletter, Search, Checkout)
└── Système de design      (variables CSS, dark mode, animations, responsive)

Installation

Aucune installation requise. Trois méthodes selon votre contexte :

Méthode 1 — Téléchargement direct Recommandé

1
Téléchargez le projet Cliquez sur "Download ZIP" sur la page GitHub du projet ou téléchargez les fichiers individuellement.
2
Conservez la structure Ne déplacez pas les fichiers hors de leur dossier. Les pages HTML font référence à css/ et js/ en chemins relatifs.
3
Ouvrez index.html Double-cliquez sur index.html ou ouvrez-le via VS Code + Live Server.

Méthode 2 — Git clone

Terminal
git clone https://github.com/devstarterkit/devstarter-kit.git
cd devstarter-kit
# Ouvrir index.html dans votre navigateur

Méthode 3 — Copier un template seul

Vous n'avez besoin que d'un seul composant ? Naviguez vers la page correspondante (ex : navbar.html), cliquez sur Copier sous le template voulu, et collez le HTML + CSS dans votre projet. C'est tout.

💡

Pour un template isolé, pensez à aussi copier les variables CSS depuis css/variables.css dans votre propre feuille de style. Sans elles, les couleurs et espacements ne s'appliquent pas correctement.

📁

Structure des fichiers

Le projet suit une architecture modulaire simple, organisée par responsabilité :

devstarter-kit/ │ ├── index.html ← Page d'accueil ├── templates.html ← Catalogue général + recherche/filtres ├── navbar.html ← 5 templates de navigation ├── footer.html ← 5 templates de pied de page ├── cards.html ← 10 templates de cartes ├── forms.html ← 6 templates de formulaires ├── about.html ← À propos du projet ├── contribuer.html ← Guide de contribution ├── contact.html ← Formulaire de contact ├── docs.html ← Cette page ├── changelog.html ← Historique des versions │ ├── css/ │ ├── variables.css ← Variables CSS (couleurs, espacements, polices) │ ├── style.css ← Styles globaux (reset, typographie, composants) │ ├── layout.css ← Navbar, footer, hero, structure de page │ ├── components.css ← Composants réutilisables (feature cards, CTA…) │ ├── animations.css ← Keyframes, classes d'animation, skeleton │ └── responsive.css ← Media queries (mobile, tablet, desktop) │ └── js/ ├── main.js ← Init globale, navbar, scroll, reveal, tabs… ├── darkmode.js ← Toggle thème clair/sombre + persistance ├── copy.js ← Copie clipboard + feedback visuel + ripple ├── search.js ← Recherche, filtres, FilterGrid └── data.js ← Données des templates (catalogue centralisé)
📋

Copier un template

Chaque template de la bibliothèque est présenté avec ses onglets HTML et CSS (et JS quand nécessaire). Voici comment l'intégrer dans votre projet :

1
Copiez le HTML Cliquez sur l'onglet HTML du template, puis sur le bouton 📋 Copier. Collez dans votre fichier .html à l'endroit souhaité.
2
Copiez le CSS Cliquez sur l'onglet CSS, copiez et collez dans votre fichier .css (ou dans une balise <style> de votre HTML).
3
Ajoutez les variables (si besoin) Si vous utilisez un template hors du projet DevStarter Kit, copiez les variables CSS depuis css/variables.css dans votre propre feuille de style, dans un bloc :root { }.
4
Personnalisez Modifiez les couleurs via les variables, remplacez les textes, adaptez la structure à votre contenu.
⚠️

Si votre template s'affiche sans mise en forme, c'est presque toujours parce que les variables CSS sont manquantes. Copiez le contenu de css/variables.css en tête de votre feuille de style.

🌙

Mode sombre

Le dark mode est géré par le module js/darkmode.js. Il utilise l'attribut data-theme sur la balise <html> et les préférences système.

Fonctionnement

JavaScript — darkmode.js
// L'ordre de priorité est :
// 1. Préférence sauvegardée (localStorage)
// 2. Préférence système (prefers-color-scheme)
// 3. Mode clair par défaut

// Pour activer manuellement dans votre code :
DarkMode.apply('dark');   // forcer le mode sombre
DarkMode.apply('light');  // forcer le mode clair
DarkMode.toggle();        // basculer

Rendre un composant dark-mode compatible

Utilisez les variables CSS du système. Elles basculent automatiquement :

CSS
/* ✅ Bon — s'adapte automatiquement */
.ma-carte {
  background: var(--bg-card);
  color: var(--text);
  border: 1px solid var(--border);
}

/* ❌ Mauvais — valeur fixe, cassée en dark mode */
.ma-carte {
  background: #ffffff;
  color: #1A1A2E;
}

Ajouter le bouton toggle

HTML
<!-- Le script darkmode.js lie automatiquement tout bouton .dark-toggle -->
<button class="dark-toggle" aria-label="Basculer le thème">🌙</button>
📱

Responsive design

Tous les templates sont responsive. Le fichier css/responsive.css définit trois breakpoints :

Nom Largeur Sélecteur CSS Usage typique
Mobile < 640px max-width: 640px Smartphones portrait
Tablet 640px – 1024px max-width: 1024px Tablettes, petits laptops
Desktop > 1024px min-width: 1025px Écrans standards et larges
CSS — Exemple
.ma-grille {
  display: grid;
  grid-template-columns: repeat(3, 1fr); /* desktop : 3 colonnes */
  gap: var(--space-6);
}

@media (max-width: 1024px) {
  .ma-grille { grid-template-columns: repeat(2, 1fr); } /* tablet */
}

@media (max-width: 640px) {
  .ma-grille { grid-template-columns: 1fr; }           /* mobile */
}
🎨

Variables CSS

Toutes les variables sont définies dans css/variables.css sur :root. Les valeurs dark mode sont surchargées sur [data-theme="dark"].

Couleurs

Variable Valeur (light) Usage
--primary #6C63FF Couleur principale, liens, boutons
--primary-light #8B85FF Hover, états actifs
--primary-dark #4B44D6 Focus, pressed
--secondary #0FCCCE Accent secondaire, dégradés
--accent #FF6584 Badges, alertes, CTA alternatifs
--bg #F7F8FC Fond de page
--bg-card #FFFFFF Fond des cartes et panels
--text #1A1A2E Texte principal
--text-muted #6B7280 Texte secondaire, descriptions

Espacements

Variable Valeur Pixels equiv.
--space-2 0.5rem 8px
--space-3 0.75rem 12px
--space-4 1rem 16px
--space-6 1.5rem 24px
--space-8 2rem 32px
--space-12 3rem 48px
--space-16 4rem 64px
--space-24 6rem 96px

Border radius

Variable Valeur Usage
--radius-sm 6px Petits éléments, badges
--radius-md 12px Boutons, inputs
--radius-lg 20px Cartes standard
--radius-xl 28px Grandes cartes, modals
--radius-full 9999px Pills, avatars, chips
🔧

Classes utilitaires

Un ensemble de classes d'usage fréquent disponibles sur toutes les pages :

Classe Propriété CSS
.container max-width 1200px, centré, padding horizontal
.section padding vertical 6rem (var(--space-24))
.section--sm padding vertical 4rem (var(--space-16))
.grid-2 / .grid-3 / .grid-4 CSS Grid 2, 3 ou 4 colonnes égales
.grid-auto auto-fill, colonnes min 280px
.flex-center flex + align-items + justify-content: center
.flex-between flex + align-items: center + justify-content: space-between
.gradient-text Texte avec dégradé primary → secondary
.glass backdrop-filter blur + fond semi-transparent
.hover-lift translateY(-4px) + shadow au hover
.reveal Animation d'apparition au scroll (IntersectionObserver)
.btn-ripple Ajoute un effet ripple au clic
.skeleton Animation de chargement shimmer

Animations

Les animations sont définies dans css/animations.css. Utilisez les classes directement sur vos éléments :

Classe Effet Délais disponibles
.animate-fade-in Apparition en fondu .delay-100 à .delay-800
.animate-fade-in-up Apparition par le bas
.animate-fade-in-down Apparition par le haut
.animate-fade-in-left Apparition depuis la gauche
.animate-scale-in Apparition avec zoom
.animate-float Flottement vertical continu
HTML — Exemple avec délais
<h1 class="animate-fade-in-up">Titre</h1>
<p  class="animate-fade-in-up delay-200">Paragraphe</p>
<a  class="animate-fade-in-up delay-400">Bouton</a>

Toutes les animations respectent prefers-reduced-motion. Si l'utilisateur a activé la réduction de mouvement dans son OS, les animations sont désactivées automatiquement.

⚙️

Modules JavaScript

Le JavaScript est organisé en modules IIFE exposés sur window. Chaque module a une responsabilité unique.

Fichier Module Responsabilité
main.js Init globale, navbar scroll, mobile menu, scroll-top, reveal, tabs, accordion, compteurs
darkmode.js DarkMode Toggle thème, persistance localStorage, sync système
copy.js Copy Copie clipboard, feedback bouton, effet ripple
search.js Search, Filters, FilterGrid Recherche temps réel, filtres par chips, masquage de cartes
data.js TEMPLATES_DATA Catalogue centralisé des templates (données JSON)
📌

L'ordre de chargement des scripts est important : darkmode.js en premier (évite le flash), puis copy.js, search.js, data.js, et main.js en dernier.

📋

Copy API

Le module Copy expose trois méthodes publiques :

JavaScript
// Copier du texte + feedback visuel sur le bouton
await Copy.copyText('texte à copier', boutonElement);

// Auto-init : lie tous les .copy-btn à leur .code-block parent
// (appelé automatiquement par main.js)
Copy.initCopyButtons();

// Ajouter l'effet ripple sur les boutons .btn-ripple
Copy.initRipple();

Ajouter un bouton copier à votre propre bloc de code

HTML
<!-- Structure attendue par Copy.initCopyButtons() -->
<div class="code-block">
  <div class="code-block__header">
    <span class="code-block__lang">CSS</span>
    <button class="copy-btn">📋 Copier</button>
  </div>
  <pre><code>.ma-classe { color: red; }</code></pre>
</div>
🔔

Toast notifications

Le module Toast est exposé globalement par main.js. Il crée automatiquement le conteneur si absent.

JavaScript
// Afficher une notification
Toast.show('Message copié !', 'success');
Toast.show('Erreur réseau',   'error');
Toast.show('Mise à jour disponible', 'info');
Toast.show('Attention !',    'warning');

// Durée personnalisée (ms, défaut : 3000)
Toast.show('Sauvegardé', 'success', 5000);
📐

Standards de code

Règles à respecter pour que votre code soit cohérent avec le reste du projet :

📌

HTML : Balises sémantiques obligatoires (nav, article, section, main…). Attributs aria-label sur les éléments interactifs sans texte visible. Indentation 2 espaces.

🎨

CSS : Nommage BEM strict. Variables CSS du système uniquement (pas de valeurs hardcodées). Préfixe du bloc en cohérence avec le fichier HTML. Pas de !important.

JavaScript : ES6+ uniquement. Fonctions nommées et commentées. Pas de var, utiliser const et let. Délégation d'événements préférée aux listeners individuels.

🏷️

Convention BEM

Tout le CSS de DevStarter Kit suit la méthodologie BEM (Block Element Modifier) :

Structure BEM
/* Block — composant autonome */
.product-card { }

/* Element — partie du block (séparateur : __) */
.product-card__image { }
.product-card__title { }
.product-card__price { }
.product-card__btn   { }

/* Modifier — variante du block ou element (séparateur : --) */
.product-card--featured { }   /* carte mise en avant */
.product-card__btn--lg  { }   /* grand bouton */
⚠️

Ne jamais imbriquer les sélecteurs BEM. .block__element est une classe autonome, pas un sélecteur descendant .block .element. Cela garantit la portabilité des composants.