class = « footer » > …
Titre de l'article
…
Pourquoi le sémantique est crucial : meilleur SEO (Google comprend la structure), meilleure accessibilité (lecteurs d'écran), et code plus lisible pour les développeurs.
🆕 Nouvelles balises et attributs HTML (2024-2026)
id = « modal » >
Confirmer
Voulez-vous continuer ?
onclick = « this.closest('dialog').close() » > Fermer
onclick = « document.getElementById('modal').showModal() » > Ouvrir
popovertarget = « info » > Aide
id = « info » popover > Contenu du popover
src = « photo.webp » loading = « lazy » alt = « Description » >
📋 Checklist accessibilité HTML
Règle Bon exemple Erreur fréquente Alt sur les images alt= »Logo entreprise » Oublier alt ou mettre alt= » » Labels sur les inputs Placeholder seul sans label Hiérarchie des titres h1 → h2 → h3 (dans l'ordre) Sauter de h1 à h4 Boutons vs liens Lien = navigation, bouton = action qui ne mène nulle part Rôles ARIA Seulement si pas de balise native Abuser de role= »button » sur des
Langue de la page Pas de lang défini
Règle #1 de l'accessibilité : utilisez les balises HTML natives. Un est accessible par défaut (clavier, lecteur d'écran). Un
🧠 Quiz
Quelle est la différence entre
?
est un contenu autonome et redistribuable (article de blog, commentaire, produit).
est un regroupement thématique à l'intérieur d'un contenu plus large. Un article peut contenir des sections, mais une section n'est pas forcément un article.
Quel attribut HTML permet d'afficher un tooltip/dropdown sans JavaScript ?
L'attribut popover . On crée un élément avec popover et on le lie à un bouton avec popovertarget= »id » . Le navigateur gère l'ouverture/fermeture nativement.
📐 Flexbox — Layout 1D
/* Flexbox = disposition sur UN axe (horizontal ou vertical) */
.navbar /* Centrer parfaitement un élément */
.center /* Propriétés des enfants */
.item
👉 Voir notre cours complet HTML & CSS pour les fondamentaux en détail.
🔲 CSS Grid — Layout 2D
/* Grid = disposition sur DEUX axes (lignes ET colonnes) */
.page-layout /* Grille responsive SANS media queries */
.cards-grid /* Placement explicite */
.header
.sidebar
🆕 CSS 2024-2026 : les nouveautés majeures
/* Container Queries — responsive basé sur le PARENT */
.card-container
@container card (
min-width :
400px )
}
/* :has() — Le sélecteur parent (enfin !) */
.form-group :has (
input :
invalid )
/* Cascade Layers — contrôler la priorité CSS */
@layer reset, base, components, utilities;
/* Nesting natif — comme Sass, mais sans préprocesseur */
.card
&:hover
}
Container Queries changent tout. Avant, un composant devait savoir dans quel viewport il serait affiché. Maintenant, il s'adapte à son conteneur. C'est la vraie modularité CSS.
⚡ Flexbox vs Grid — quand utiliser quoi ?
Critère Flexbox Grid Dimension 1D (ligne OU colonne) 2D (lignes ET colonnes) Cas d'usage Navbar, boutons, alignements Layouts de page, galleries, dashboards Contenu vs Layout Le contenu dicte la taille Le layout dicte la taille Responsive flex-wrap auto-fit / auto-fill
En pratique, on utilise les deux ensemble. Grid pour le layout global, Flexbox pour l'alignement à l'intérieur des composants.
🧠 Quiz
Comment créer une grille responsive sans media queries en CSS Grid ?
Avec grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)) . Les colonnes se créent automatiquement tant qu'il y a au moins 280px d'espace.
Qu'est-ce que le sélecteur :has() permet de faire ?
:has() est le premier sélecteur parent en CSS. Il permet de styliser un élément en fonction de ses enfants. Par exemple, .card:has(img) ne cible que les cartes contenant une image.
⚡ Les fondamentaux indispensables pour le front-end
// Destructuring — extraire des valeurs
const = userData;
const [first, …rest]
= items;
// Optional chaining & nullish coalescing
const city
= user
?. address
?. city
?? « Inconnue » ;
// Template literals
const html = `
Bonjour $ `;
// Spread / Rest
const newUser = ;
const merged = […arr1, …arr2];
// Array methods essentiels
const names = users.map (u => u.name);
const adults = users.filter (u => u.age >= 18 );
const total = prices.reduce ((sum, p) => sum + p, 0 );
const found = users.find (u => u.id === 42 );
👉 Voir notre cours JavaScript complet (12 chapitres)
🔄 Async/Await — le modèle asynchrone
// Fetch API — requêtes réseau
async function getUsers () `);
return await res.json ();
} catch (err)
}// Promise.all — requêtes parallèles
const [users, posts] = await Promise .all ([
fetch (« /api/users » ).then (r => r.json ()),
fetch (« /api/posts » ).then (r => r.json ()),
]);
🆕 Nouvelles features ES2024-2025
// Object.groupBy (ES2024)
const grouped
= Object .
groupBy (products, p
=> p.category);
// Promise.withResolvers (ES2024)
const = Promise .
withResolvers ();
// Set methods (ES2025)
const a = new Set ([1 , 2 , 3 ]);
const b = new Set ([2 , 3 , 4 ]);
a.intersection (b); // Set
a.union (b); // Set
a.difference (b); // Set
🧠 Quiz
Quelle est la différence entre ?? et || ?
|| retourne la valeur de droite si la gauche est falsy (0, « », false, null, undefined). ?? (nullish coalescing) retourne la droite uniquement si la gauche est null ou undefined . Donc 0 ?? 42 donne 0, mais 0 || 42 donne 42.
🔷 Pourquoi TypeScript est devenu le standard
En 2026, TypeScript n'est plus optionnel — c'est le choix par défaut pour tout projet front-end sérieux. React, Vue, Next.js, Angular : tous offrent une DX optimale en TS.
// Types de base pour le front-end
interface User // Props de composant React
interface ButtonProps // Generics — types réutilisables
interface ApiResponse <T >
👉 Voir notre cours TypeScript complet (12 chapitres)
🛡️ Patterns TypeScript fréquents en front-end
// Discriminated unions — état d'une requête
type RequestState <
T >
=
|
|
|
| ;
// Utility types
type UserPreview = Pick <
User ,
« id » | « name » | « avatar » >;
type EditableUser = Partial <
Omit <
User ,
« id » >>;
// as const — valeurs littérales immuables
const ROUTES = as const ;
Erreur classique : typer avec any partout. Autant rester en JavaScript. Si vous ne savez pas le type, utilisez unknown et faites un type guard.
🧠 Quiz
Quelle est la différence entre interface et type en TypeScript ?
Les deux définissent des formes d'objets. interface peut être étendue et fusionnée. type est plus flexible : unions, intersections, mapped types. En pratique, interface pour les objets/props, type pour les unions et utilitaires.
⚛️ React 19 — les changements majeurs
React 19 est la plus grosse mise à jour depuis les hooks. Les Server Components sont stables, le compilateur optimise automatiquement, et de nouveaux hooks simplifient les patterns courants.
// useActionState — formulaires avec état
import from « react » ;
function LoginForm () ;
redirect (
« /dashboard » );
},
);
return (
}
);
}
👉 Voir notre cours React complet (12 chapitres)
🧩 Les hooks essentiels (récap)
Hook Usage Exemple useState État local Compteur, toggle, valeur d'input useEffect Effets de bord Fetch, event listeners, timers useRef Référence persistante DOM, valeurs entre rendus useMemo Cache un calcul Filtrage/tri coûteux useCallback Cache une fonction Props stables pour React.memo useContext État global léger Thème, auth, langue useActionState Actions formulaire (R19) Login, CRUD, soumission use Lire ressources (R19) Lire une Promise ou un Context
React 19 + compilateur : le compilateur mémoïse automatiquement. useMemo , useCallback et React.memo deviennent moins nécessaires, mais gardez-les pour l'instant — le compilateur n'est pas encore partout.
🧠 Quiz
Qu'est-ce qu'un Server Component en React 19 ?
Un composant qui s'exécute uniquement sur le serveur . Il accède directement à la DB/API. Son JS n'est jamais envoyé au client , réduisant le bundle. Dans Next.js App Router, tous les composants sont Server Components par défaut (ajouter « use client » pour un Client Component).
💚 Vue 3 — le framework progressif
Vue 3 avec la Composition API est excellent si vous trouvez React trop « bas niveau ». Vue offre une réactivité fine (pas besoin de mémorisation), une syntaxe de template intuitive, et un écosystème cohérent.
@click = « increment » >
} (double: })
👉 Voir notre cours Vue.js complet (12 chapitres)
🔥 Svelte 5 & Solid.js — les challengers
// SVELTE 5 — Runes
// SOLID.JS — Réactivité fine-grained
import from « solid-js » ;
function Counter () > ;
}
Framework Force À considérer si… React Écosystème, emploi, communauté Plus d'opportunités pro Vue DX, courbe d'apprentissage Vous préférez la simplicité Svelte Performance, zéro runtime Moins de boilerplate Solid Performance brute Vous aimez React + perf
🧠 Quiz
Qu'est-ce que les « Signals » et pourquoi tous les frameworks les adoptent ?
Les Signals sont un modèle de réactivité fine-grained : quand une donnée change, seuls les éléments du DOM concernés sont mis à jour. Vue (ref), Solid (createSignal), Svelte 5 ($state), Angular (signal) les utilisent. React reste sur le re-render + diffing.
▲ Next.js 15 — App Router & Server Components
// app/page.tsx — Server Component (par défaut)
export default async function HomePage () );
return (
Blog
>
))}
);
}
👉 Voir notre cours Next.js complet (12 chapitres)
🗺️ Les meta-frameworks en 2026
Meta-framework Framework UI Point fort Idéal pour Next.js React Écosystème, Vercel, RSC Apps full-stack, SaaS Nuxt Vue DX, auto-imports Sites vitrines, apps Vue SvelteKit Svelte Performance, simplicité Sites rapides Astro Agnostique Zéro JS par défaut Blogs, docs, contenu Remix React Web standards, loaders Apps avec formulaires
Astro mérite une mention spéciale : HTML statique par défaut, JS uniquement pour les composants interactifs (« islands »). Idéal pour blogs et docs.
🧠 Quiz
Quelle est la différence entre SSR, SSG et ISR ?
SSR : page générée à chaque requête. SSG : page générée au build. ISR : SSG + re-génération en arrière-plan. Next.js supporte les trois.
🌊 Tailwind v4 — le nouveau moteur
Tailwind CSS v4 : moteur Rust (10x plus rapide), configuration CSS-first, nouvelles fonctionnalités.
class = « bg-blue-600 text-white px-6 py-3 rounded-lg
hover:bg-blue-700 active:scale-95
transition-all duration-200
disabled:opacity-50 disabled:cursor-not-allowed » >
Envoyer
class = « grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6 » > …
class = « bg-white dark:bg-gray-900 text-black dark:text-white » > …
👉 Voir notre cours Tailwind CSS complet (12 chapitres)
🎨 Les approches de styling en 2026
Approche Pour Contre Tailwind CSS Rapide, cohérent, performant HTML verbeux CSS Modules Scope local, familier Fichiers séparés CSS-in-JS Dynamique, colocalisé Runtime cost, SSR complexe CSS vanille Standard, zéro dépendance Scope global, maintenance shadcn/ui Copy/paste, customisable Pas une vraie lib npm
Tendance 2026 : Tailwind + shadcn/ui est la combo la plus populaire dans l'écosystème React/Next.js. shadcn/ui fournit des composants accessibles que vous copiez et personnalisez dans votre projet.
🧠 Quiz
Pourquoi Tailwind v4 est plus rapide que v3 ?
Tailwind v4 a été réécrit avec un moteur en Rust (au lieu de JS/PostCSS). Build ~10x plus rapide. La configuration se fait en CSS avec @theme au lieu de tailwind.config.js.
📊 Les métriques qui comptent
Métrique Mesure Bon Mauvais LCP Temps d'affichage du plus gros élément visible ≤ 2.5s > 4s INP Réactivité aux clics/inputs (remplace FID) ≤ 200ms > 500ms CLS Stabilité visuelle (décalages inattendus) ≤ 0.1 > 0.25
Impact SEO direct : Google utilise les Core Web Vitals comme facteur de ranking. Un mauvais LCP ou CLS peut pénaliser votre positionnement.
⚡ Optimisations essentielles
/* 1. IMAGES — format moderne + lazy loading */
src = « photo.webp »
srcset = « photo-400.webp 400w, photo-800.webp 800w »
sizes = « (max-width: 768px) 100vw, 50vw »
loading = « lazy » alt = « Description »
/> /* 2. FONTS — preload + display swap */
rel = « preload » href = « /fonts/inter.woff2 » as = « font » crossorigin >
/* 3. CODE SPLITTING — import dynamique */
const HeavyChart = lazy (() => import ('./HeavyChart' ));
/* 4. PRECONNECT aux domaines tiers */
rel = « preconnect » href = « https://fonts.googleapis.com » >
🔧 Checklist performance front-end
Performance Checklist
Images en WebP/AVIF avec srcset et loading= »lazy »
Fonts en woff2 avec font-display: swap et preload
Code splitting avec import() dynamique
CSS critique inline, le reste en defer
Preconnect aux CDN et API tierces
Minification HTML/CSS/JS en production
Compression Brotli ou gzip sur le serveur
Cache headers correctement configurés
Tree-shaking activé (Vite/webpack)
Audit Lighthouse ≥ 90 sur les 4 catégories
🧠 Quiz
Quelle métrique a remplacé FID dans les Core Web Vitals ?
INP (Interaction to Next Paint). Contrairement à FID qui mesurait uniquement la première interaction, INP mesure la réactivité sur toutes les interactions. Bon INP ≤ 200ms.
⚡ Vite — le build tool standard
# Créer un projet avec Vite
npm create vite@latest mon-projet — –template react-ts
# Structure
mon-projet/
├── index.html
├── vite.config.ts
├── tsconfig.json
├── package.json
└── src/
├── main.tsx
├── App.tsx
└── components/
// vite.config.ts
import from 'vite' ;
import react from '@vitejs/plugin-react' ;
export default defineConfig (,
build: ,
resolve: },
});
Pourquoi Vite a remplacé Webpack : démarrage instantané (ES modules natifs en dev), HMR ultra-rapide, configuration minimale, build de production optimisé avec Rollup.
🔍 ESLint 9 + Prettier
// eslint.config.js — Flat config (ESLint 9+)
import js from '@eslint/js' ;
import tseslint from 'typescript-eslint' ;
import react from 'eslint-plugin-react' ;
export default [
js.configs.recommended,
…tseslint.configs.recommended,
,
rules: ,
},
];
ESLint 9 = « flat config ». Fini les .eslintrc.json imbriqués. Un seul fichier eslint.config.js qui exporte un tableau.
🧪 Testing — Vitest + Testing Library + Playwright
// Tests unitaires — Vitest + Testing Library
import from '@testing-library/react' ;
import from 'vitest' ;
import Counter from './Counter' ;
describe ('Counter' , () => );
});
// Tests E2E — Playwright
import from '@playwright/test' ;
test ('login flow' , async () => );
Outil Type Remplace Vitest Tests unitaires/intégration Jest Testing Library Tests de composants Enzyme Playwright Tests E2E (navigateur) Cypress, Selenium MSW Mock d'API Nock, fetch mocks
🧠 Quiz
Pourquoi Vitest est préféré à Jest en 2026 ?
Vitest utilise le même pipeline que Vite, donc aucune configuration séparée . Compatible avec l'API Jest, supporte TypeScript et ESM nativement, mode watch ultra-rapide grâce au HMR.
🗺️ Roadmap d'apprentissage front-end (2026)
Étape Technologies Durée Objectif 1. Fondations HTML, CSS (Flexbox, Grid), JS ES6+ 2-3 mois Pages statiques et interactives 2. TypeScript Types, interfaces, generics 2-4 sem. Sécurité des types 3. Framework UI React (ou Vue/Svelte) 2-3 mois SPA avec composants 4. Styling Tailwind CSS, responsive 2-3 sem. Styliser rapidement 5. Meta-framework Next.js (ou Nuxt/SvelteKit) 1-2 mois SSR, routing, déploiement 6. Outils Vite, ESLint, Vitest, Playwright 2-4 sem. Workflow professionnel 7. Expertise Performance, accessibilité, archi Continu Niveau senior
Total réaliste : 8-12 mois pour être opérationnel en junior. L'expertise senior vient avec les projets réels et la veille continue.
🏗️ Architecture — structurer un projet
# Structure recommandée (Next.js / React)
src/
├── app/ # Routes (App Router)
│ ├── layout.tsx
│ ├── page.tsx
│ └── api/
├── components/ # Composants réutilisables
│ ├── ui/ # Boutons, inputs (shadcn)
│ └── features/ # Composants métier
├── hooks/ # Custom hooks
├── lib/ # Utilitaires, config
├── types/ # Types TS partagés
└── styles/ # CSS global
🔑 Principes d'architecture front-end
Principe En pratique Colocalisation Fichiers liés ensemble (composant + style + test + types) Composition > héritage Composez des petits composants, ne pas hériter de gros composants Single Responsibility Un composant = une responsabilité. > 200 lignes ? Découpez. DRY avec modération Dupliquez 2 fois avant d'abstraire. L'abstraction prématurée est pire. État minimal Dérivez les données (computed/useMemo) plutôt que stocker des doublons Server-first Maximum côté serveur (fetch, auth, SEO). Client = interactivité.
« La meilleure architecture est celle que toute l'équipe comprend. » Ne sur-architecturez pas un MVP. Commencez simple, refactorisez quand la complexité l'exige.
🧠 Quiz
Qu'est-ce que la colocalisation et pourquoi est-ce important ?
La colocalisation = placer les fichiers liés dans le même répertoire (composant, style, test, types). Quand vous supprimez un composant, vous supprimez tout son dossier — pas de fichiers orphelins.
Pourquoi dit-on « Server-first » en 2026 ?
Avec les Server Components, on fait le fetch, l'auth et le rendu HTML sur le serveur. Meilleur SEO (HTML prêt), meilleure performance (moins de JS au client), sécurité (clés API côté serveur). Le client ne gère que l'interactivité.
✅ Checklist du développeur front-end moderne
Maîtriser HTML sémantique et accessibilité de base
Connaître Flexbox, Grid, Container Queries et :has()
Écrire du JavaScript ES2024+ idiomatique
Utiliser TypeScript avec des types stricts (pas de any)
Maîtriser au moins un framework (React, Vue ou Svelte)
Savoir utiliser un meta-framework (Next.js, Nuxt, SvelteKit ou Astro)
Styliser efficacement avec Tailwind CSS ou CSS Modules
Optimiser les Core Web Vitals (LCP, INP, CLS)
Configurer Vite, ESLint et Prettier
Écrire des tests (Vitest + Playwright)
Versionner avec Git et déployer sur Vercel/Cloudflare
Faire de la veille technique régulière
❓ FAQ — Questions fréquentes
Quel framework front-end apprendre en premier en 2026 ?
React reste le choix le plus pragmatique pour l'employabilité. Vue est excellent pour débuter. Svelte si vous avez déjà de l'expérience et cherchez la performance maximale.
Faut-il apprendre TypeScript ou JavaScript d'abord ?
JavaScript d'abord, puis TypeScript rapidement après. Comprendre les fondamentaux JS (closures, prototypes, event loop) est essentiel, mais ne restez pas en JS pur trop longtemps.
Tailwind CSS ou CSS classique ?
Les deux. Comprendre CSS natif (Flexbox, Grid, cascade) est indispensable — Tailwind est une abstraction au-dessus. Mais pour la productivité en projet réel, Tailwind accélère considérablement le développement.
Combien de temps pour devenir développeur front-end ?
8-12 mois d'apprentissage intensif pour être opérationnel en junior. L'expertise vient avec la pratique : projets personnels, open-source, et veille régulière.
Next.js est-il obligatoire ?
Non. Un SPA React avec Vite suffit pour beaucoup de projets. Utilisez Next.js si vous avez besoin de SSR, SEO, ou API routes intégrées. Pour un site de contenu, Astro est souvent un meilleur choix.