Skip to content

Checklist finale & Optimisation

  • Code valide (W3C Validator)
  • Toutes les balises sont fermĂ©es
  • Attributs alt sur toutes les images
  • Un seul <h1> par page
  • HiĂ©rarchie de titres logique (h1 → h2 → h3)
  • Pas d’IDs dupliquĂ©s
Erreurs fréquentes
  • Balises non fermĂ©es : <div>...</div> manquant
  • alt manquant sur <img>
  • HiĂ©rarchie incorrecte : h1 → h3 (saute h2)
  • IDs dupliquĂ©s (doivent ĂȘtre uniques)
  • Attributs invalides

  • Code valide (W3C CSS Validator)
  • Pas de propriĂ©tĂ©s obsolĂštes
  • Variables CSS bien dĂ©finies dans :root
  • Pas de code dupliquĂ©
Optimisations CSS
/* ❌ À Ă©viter - sĂ©lecteurs trop longs */
body div.container ul li a.link { }
/* ✅ PrĂ©fĂ©rer - classes simples */
.nav-link { }
/* ❌ Éviter - propriĂ©tĂ©s rĂ©pĂ©tĂ©es */
.btn-primary { background: #667eea; }
.btn-secondary { background: #667eea; }
/* ✅ PrĂ©fĂ©rer - variables */
:root { --color-primary: #667eea; }
.btn-primary { background: var(--color-primary); }

  • Pas d’erreurs dans la console
  • Scripts chargĂ©s avec defer
  • Event listeners nettoyĂ©s si nĂ©cessaire
  • Gestion des erreurs pour Ă©lĂ©ments manquants
// ✅ Bon - VĂ©rifier l'existence
const element = document.querySelector('.element');
if (element) {
element.addEventListener('click', handleClick);
}

  • Tab : Navigation entre Ă©lĂ©ments
  • Shift+Tab : Navigation arriĂšre
  • Enter/Espace : Activation
  • Escape : Fermer modals/menus
Tester la navigation clavier
  1. Ne pas utiliser la souris
  2. Appuyer sur Tab pour naviguer
  3. Vérifier que le focus est visible
  4. Tester tous les boutons avec Enter/Espace
  5. Tester les modals/menus avec Escape

  • Tous les liens/boutons ont un :focus visible
  • Outline personnalisĂ© si supprimĂ©
  • Contraste suffisant pour le focus
/* ✅ Bon */
a:focus,
button:focus {
outline: 2px solid var(--color-primary);
outline-offset: 2px;
}
/* ❌ Mauvais */
*:focus {
outline: none; /* Rend inaccessible */
}

  • Texte/fond : ratio minimum 4.5:1
  • Texte large (18px+) : ratio minimum 3:1
  • TestĂ© avec Contrast Checker
CombinaisonRatioRésultat
Noir sur blanc21:1✅ Excellent
#333 sur #FFF12.6:1✅ Excellent
#666 sur #FFF5.7:1✅ Bon
#999 sur #FFF2.8:1❌ Insuffisant

  • WAVE : Scanner d’accessibilitĂ©
  • Lighthouse : Audit complet
  • Test au clavier manuel
  • Test avec lecteur d’écran (optionnel)

FormatUsageCompression
JPEGPhotosTinyJPG
PNGGraphiques + transparenceTinyPNG
SVGIcĂŽnes, logosSVGOMG
WebPNavigateurs modernesSquoosh

Checklist images :

  • Taille appropriĂ©e (pas de 4000px affichĂ©s Ă  400px)
  • CompressĂ©es
  • Attributs width et height
  • loading="lazy" pour images bas de page
<img
src="image.jpg"
alt="Description"
width="800"
height="600"
loading="lazy"
>
Images responsives
<picture>
<source srcset="image-small.jpg" media="(max-width: 600px)">
<source srcset="image-medium.jpg" media="(max-width: 1200px)">
<img src="image-large.jpg" alt="Description">
</picture>

  • Supprimer le CSS inutilisĂ©
  • Regrouper les propriĂ©tĂ©s similaires
  • Utiliser variables pour Ă©viter rĂ©pĂ©tition
  • Minimiser les sĂ©lecteurs complexes

  • Scripts avec defer
  • Pas de JavaScript inline excessif
  • Éviter les librairies lourdes si inutiles
  • Event delegation pour listes
// ❌ Ajouter listener Ă  chaque Ă©lĂ©ment
items.forEach(item => {
item.addEventListener('click', handleClick);
});
// ✅ Event delegation
container.addEventListener('click', (e) => {
if (e.target.matches('.item')) {
handleClick(e);
}
});

<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Titre unique (50-60 caractĂšres) -->
<title>Les Aventures de Léo - Chapitre 1</title>
<!-- Description (150-160 caractĂšres) -->
<meta name="description" content="Découvrez le premier chapitre des aventures de Léo, un garçon curieux qui part à l'aventure.">
<!-- Langue -->
<html lang="fr">
<!-- Favicon -->
<link rel="icon" href="/favicon.ico">
</head>

Checklist SEO :

  • Titre unique par page (< 60 caractĂšres)
  • Meta description (< 160 caractĂšres)
  • Balise <html lang="fr">
  • Structure de titres logique (h1 → h2 → h3)
  • URLs descriptives (/chapitre-1 pas /page?id=1)
  • Images avec alt descriptifs

  • TestĂ© sur mobile, tablette, desktop
  • Meta viewport prĂ©sent
  • Texte lisible (min 16px)
  • Boutons tapables (min 44x44px)
  • Navigation mobile fonctionnelle
<meta name="viewport" content="width=device-width, initial-scale=1.0">
Tailles de breakpoints courantes
/* Mobile first */
@media (min-width: 640px) { /* Tablette */ }
@media (min-width: 1024px) { /* Desktop */ }
@media (min-width: 1280px) { /* Large desktop */ }

  • Tous les liens fonctionnent
  • Pas de texte “Lorem ipsum”
  • Orthographe vĂ©rifiĂ©e
  • Images chargĂ©es correctement
  • Polices chargĂ©es correctement
  • HTML valide (W3C)
  • CSS valide (W3C)
  • JavaScript sans erreurs console
  • AccessibilitĂ© vĂ©rifiĂ©e (WAVE)
  • Performance testĂ©e (Lighthouse)
  • Chrome ✓
  • Firefox ✓
  • Safari ✓
  • Edge ✓
  • Mobile (< 640px) ✓
  • Tablette (640-1024px) ✓
  • Desktop (> 1024px) ✓

Options de déploiement gratuites
  • Netlify : Drag & drop, trĂšs simple
  • Vercel : OptimisĂ© pour frameworks modernes
  • GitHub Pages : HĂ©bergement gratuit via Git
  • Surge : DĂ©ploiement en ligne de commande

Vous avez terminé le cours MM2B ! Vous maßtrisez maintenant :

✅ HTML sĂ©mantique et accessibilitĂ© ✅ Graphisme CSS ✅ Layouts responsive ✅ InteractivitĂ© et animations

Prochaines étapes : Continuez à pratiquer, explorez des frameworks modernes, et surtout : créez vos propres projets !