---
title: "La signalisation routière : les bases pour bien démarrer"
canonical: "https://permis-online.be/cours/theorique/introduction/"
source: "https://permis-online.be/cours/theorique/introduction/"
author: "Wenceslas Dasnois"
author_role: "Fondateur de Permis Online"
author_credentials: "Fondateur de l'Observatoire du Permis Belge (vérification des statistiques officielles du permis, 3 régions)"
publisher: "Permis Online"
published: "2026-07-08"
modified: "2026-07-12"
language: "fr"
word_count: 2275
---

# La signalisation routière : les bases pour bien démarrer

> **Summary:** Première leçon du cours gratuit du code de la route belge : les trois familles de la signalisation, les panneaux additionnels et les six catégories de signaux, expliqués simplement.

---

Les chapitres du cours[0Sommairevue d’ensemble](/cours/theorique/)[1IntroductionTu es ici](/cours/theorique/introduction/)[2Les panneaux9 leçons](/cours/theorique/signaux-de-danger/)[3Les usagers4 leçons](/cours/theorique/pietons/)[4Le marquage routier au sol3 leçons](/cours/theorique/lignes-continues-discontinues/)[5Arrêt et stationnement2 leçons](/cours/theorique/arret-ou-stationnement/)[6La vitesse2 leçons](/cours/theorique/limitations-de-vitesse/)[7Les contraventions2 leçons](/cours/theorique/degres-infractions/)[8La voie publique8 leçons](/cours/theorique/chaussee-trottoir-accotement/)[9Croisement et dépassement4 leçons](/cours/theorique/croisement/)[10Les règles de priorité1 leçon](/cours/theorique/regles-de-priorite/)[11L'environnement2 leçons](/cours/theorique/environnement-meteo/)[12Équipements & mécaniques6 leçons](/cours/theorique/types-de-vehicules/)[13Éclairage & visibilité1 leçon](/cours/theorique/eclairage-et-visibilite/)[14Les accidents3 leçons](/cours/theorique/en-etat-de-conduire/)[15Les agents qualifiés1 leçon](/cours/theorique/agents-qualifies/)[16Préparer ton examen1 leçon](/cours/theorique/preparer-ton-examen/)[Voir tout le sommaire →](/cours/theorique/)[0Sommairevue d’ensemble](https://permis-online.be/cours/tpr/)[1Le test décodé3 leçons](/cours/tpr/le-tpr-c-est-quoi/)[2Ton centre, ta région, ton jour J4 leçons](/cours/tpr/passer-le-test-a-bruxelles/)[3Les risques à identifier5 leçons](/cours/tpr/c-est-quoi-un-risque/)[4La stratégie de réussite3 leçons](/cours/tpr/strategie-des-10-clics/)[Voir tout le sommaire →](https://permis-online.be/cours/tpr/)[0Sommairevue d’ensemble](https://permis-online.be/cours/pratique/)[1Ton plan de bataille4 leçons](/cours/pratique/filiere-libre-ou-auto-ecole/)[2Les manœuvres qui tombent vraiment4 leçons](/cours/pratique/controles-prealables/)[3Les minutes de conduite qui décident de tout5 leçons](/cours/pratique/ton-examen-minute-par-minute/)[4Gagner le jour J (et après)3 leçons](/cours/pratique/stress-jour-j/)[Voir tout le sommaire →](https://permis-online.be/cours/pratique/)Introduction1La signalisation routière : les bases pour bien démarrerTu es iciGARANTIE·41/50
## Ton examen théorique, réussi. C’est garanti.

On ne te vend pas des questions : on s’engage sur ta réussite. Tu suis la méthode, tu réussis ; sinon, ton examen t’est remboursé.

4,6/5 sur Google+100 000 inscritsRéussi, ou ton examen théorique remboursé.Termine le cours, valide les examens blancs, réussis 5 simulations : soit tu réussis, soit on te rembourse ton passage.Réussite garantie
### Simulations d’examen

Tu ne t’inscris pas pour t’entraîner : tu t’inscris pour réussir. L’examen blanc de chaque chapitre, les vraies simulations du jour J, et ta réussite garantie au bout.

9,99 €/sem.***1500 questions différentes**Mises à jour selon l’examen officiel**15 examens blancs + simulations complètes**Un par chapitre, puis le format exact du jour J : 50 questions, 41/50**Corrections & explications**Comprends chaque erreur[Je réussis mon examen](https://belgique.permis.online/commande/?add-to-cart=19749113)Accès immédiat · ta réussite est garantie* Accès hebdomadaire flexible : tu l’adaptes ou l’arrêtes quand tu veux, en deux clics, depuis ton espace membre.

Meilleur choix · Tout inclus
### Premium : Tout inclus

La réussite garantie de ton examen théorique et de ton test de perception des risques, plus tout le reste : parcours pratique, moniteur. Ton permis de A à Z.

119,88 €24,99 €/mois*−79%**Tous les modules inclus**Examens blancs, simulations, perception des risques, parcours pratique**Fonctionnalités IA avancées**Révision personnalisée et intelligente**Accompagnement par un moniteur agréé**Un vrai moniteur te suit sur toute la plateforme[Je réussis tout, de A à Z](https://belgique.permis.online/commande/?add-to-cart=19702281)Jusqu’à 79 % d’économie · tout débloqué* Économie calculée face à l’achat séparé des 3 modules à 9,99 €/sem. (≈ 119,88 €/mois). Accès mensuel flexible : tu peux l’arrêter à tout moment depuis ton espace membre.

La garantie « réussi ou remboursé », concrètement(Offres Simulations et Premium) : termine les 50 leçons du cours, valide les 15 examens blancs et réussis au moins 5 simulations (41 sur 50 ou plus), en étudiant sur au moins 5 jours et avec ton accès actif le jour de ton examen théorique. Si tu échoues quand même, on te rembourse ton passage au prix officiel de ta région, sur preuve d’échec, une fois par personne.Sans engagement · accès immédiat
# La signalisation routière : les bases pour bien démarrer

**6 min** de lectureChapitre : **Introduction**Gratuit, sans inscriptionMis à jour en **septembre 2026**Pas envie de lire ? Écoute le résumé

L’essentiel en 30 secondes- **3 familles** : les signaux routiers (les « panneaux »), les feux, les marques au sol.
- Un signal au-dessus d’une bande ne vaut **que pour cette bande**.
- **Fond orange = temporaire** (chantiers, déviations).
- Le réflexe examen : **forme + couleur**. Triangle rouge = danger, rond rouge = interdiction, rond bleu = obligation.

Tu veux les détails, les images et les pièges ? C’est juste en dessous.

**La moitié de ton examen se joue ici.** La plupart des questions de l’examen théorique touchent à la signalisation, de près ou de loin. Bonne nouvelle : dans 6 minutes, tu sauras décoder n’importe quel panneau, même ceux que tu n’as jamais croisés. Le secret tient en deux mots : **forme + couleur**.

## Qu’est-ce que la signalisation routière ?

Une bonne partie des panneaux te sont déjà familiers. Mais certains signaux, plus rares sur la route, doivent aussi être connus sur le bout des doigts : ce sont souvent eux qui font la différence le jour de l’examen.

**Définition.** La signalisation routière regroupe tout ce qui, sur la route, te transmet une règle ou une information. Elle se compose de trois familles : les **signaux routiers** (les « panneaux » dans le langage courant), les **signaux lumineux de circulation** (les « feux ») et les **marques routières** (les lignes et dessins tracés au sol, que tu retrouveras au chapitre 4).![Les trois familles de la signalisation : signaux routiers, signaux lumineux et marques routières](https://permis-online.be/wp-content/uploads/2023/04/Les-signaux-routiers-lumineux-et-les-marques-routieres.png)

*Les trois familles de la signalisation belge : panneaux, feux et marquages au sol.*

**À l’examen.** Un signal routier placé au-dessus d’une bande de circulation ne s’applique **qu’à cette bande**, pas aux autres. Et retiens que les signaux à **fond orange** sont temporaires ou provisoires (chantiers, déviations).**Aide-mémoire.** Pense à un match de football : quand l’arbitre sort un carton rouge, il ne s’applique qu’à un seul joueur, pas à toute l’équipe. Un signal au-dessus d’une bande, c’est pareil : il ne concerne que cette bande. Et pour le fond orange : comme le fruit, il est de saison : il ne reste pas toute l’année.Vite : un signal placé au-dessus d’une bande de circulation vaut pour…

## Les panneaux additionnels

Un **panneau additionnel** est un panneau complémentaire, fixé **en dessous** d’un signal routier principal, qui précise une information ou ajoute une restriction. Concrètement, il :

- **complète, précise ou limite** la règle établie par le signal routier qu’il accompagne ;
- prend la forme d’une **inscription ou d’un symbole en blanc sur fond bleu** (rectangulaire), ou en **noir sur fond blanc** pour ceux qui concernent les bicyclettes et cyclomoteurs.

![Exemples de panneaux additionnels du code de la route belge](https://permis-online.be/wp-content/uploads/2023/04/Les-panneaux-additionnels-code-de-la-route.png)

*Le panneau additionnel se fixe sous le signal principal et en précise la portée.*

**À l’examen.** Le vocabulaire compte : les questions officielles parlent de **« signal routier »** pour le panneau principal, et réservent le mot **« panneau »** au panneau additionnel. Repère bien quel terme la question utilise avant de répondre.À l’examen, le mot « panneau » désigne…

![Wenceslas Dasnois](https://permis-online.be/wp-content/uploads/2026/02/wen_80x80.png)

Ma méthodeArrête d’apprendre les panneaux par cœur : décode-les. Rond bleu ? Obligation. Triangle à bord rouge ? Danger. Ce réflexe répond même aux panneaux que tu n’as jamais vus : c’est la roue de secours qui sauve des points le jour J.

[Wenceslas Dasnois](/auteur/wenceslas-dasnois/) · Fondateur de Permis Online

## Les 6 catégories de signaux

Le code de la route classe les signaux en six catégories, chacune avec sa signification et son usage :

- **Les signaux de danger** : ils annoncent un danger potentiel sur la route : virage serré, pente raide, travaux, passage d’animaux…
- **Les signaux de priorité** : ils indiquent qui passe en premier : intersections, cédez-le-passage, stop, croisements étroits…
- **Les signaux d’interdiction** : ils interdisent un comportement : limite de vitesse, dépassement interdit, sens interdit…
- **Les signaux d’obligation** : ils imposent une règle précise : direction obligatoire, piste cyclable obligatoire…
- **Les signaux relatifs à l’arrêt et au stationnement** : ils délimitent où tu peux (ou ne peux pas) t’arrêter et stationner.
- **Les signaux d’indication** : ils donnent une information utile : directions, distances, parkings, début et fin d’agglomération…

![Les six catégories de signaux du code de la route belge en images](https://permis-online.be/wp-content/uploads/2023/04/Les-6-categories-de-signaux-Code-de-la-route-Belge-.png)

*Les six catégories de signaux du code de la route belge.*

**Aide-mémoire.** Pour retrouver la signification d’un signal, retiens **sa forme et sa couleur** : triangle à bord rouge = danger, rond à bord rouge = interdiction, rond bleu = obligation, carré ou rectangle bleu = indication. Le tableau de la leçon te les remet toutes en tête d’un coup d’œil.![Tableau récapitulatif : reconnaître les catégories de signaux par leur forme et leur couleur](https://permis-online.be/wp-content/uploads/2023/04/Tableau-recapitulatif-pour-reconnaitre-les-categories-de-panneaux-du-code-de-la-route.png)

*Le récapitulatif forme + couleur : ton meilleur réflexe pour l’examen.*

Dernière : un signal rond à bord rouge, c’est…

Chacune de ces six catégories est explorée en détail dans le chapitre suivant, **Les panneaux** : tu y apprendras à reconnaître et interpréter chaque signal pour conduire en toute confiance.

Les panneaux de cette leçon*Ton mémo de révision : la forme + la signification, avant le quiz*9![Signal A31 : Travaux](https://permis-online.be/wp-content/plugins/po-permis-cours/assets/cours/signaux/a31.png?v=1786785498)**A31**Travaux![Signal B1 : Céder le passage](https://permis-online.be/wp-content/plugins/po-permis-cours/assets/cours/signaux/b1.png?v=1786785498)**B1**Céder le passage![Signal B5 : Arrêt obligatoire (stop) et céder le passage](https://permis-online.be/wp-content/plugins/po-permis-cours/assets/cours/signaux/b5.png?v=1786785498)**B5**Arrêt obligatoire (stop) et céder le passage![Signal C1 : Sens interdit à tout conducteur](https://permis-online.be/wp-content/plugins/po-permis-cours/assets/cours/signaux/c1.png?v=1786785498)**C1**Sens interdit à tout conducteur![Signal C43 : Vitesse maximale : 50 km/h](https://permis-online.be/wp-content/plugins/po-permis-cours/assets/cours/signaux/c43-50kmh.png?v=1786785498)**C43**Vitesse maximale : 50 km/h![Signal D1a : Obligation de suivre la direction de la flèche](https://permis-online.be/wp-content/plugins/po-permis-cours/assets/cours/signaux/d1a.png?v=1786785498)**D1a**Obligation de suivre la direction de la flèche![Signal E1 : Stationnement interdit](https://permis-online.be/wp-content/plugins/po-permis-cours/assets/cours/signaux/e1.png?v=1786785498)**E1**Stationnement interdit![Signal E3 : Arrêt et stationnement interdits](https://permis-online.be/wp-content/plugins/po-permis-cours/assets/cours/signaux/e3.png?v=1786785498)**E3**Arrêt et stationnement interdits![Signal F49 : Passage pour piétons](https://permis-online.be/wp-content/plugins/po-permis-cours/assets/cours/signaux/f49.png?v=1786785498)**F49**Passage pour piétonsReproductions officielles des signaux routiers belges. Chaque signal est expliqué en détail dans sa leçon du chapitre 2 du [cours théorique](/cours/theorique/#chapitre-2).`; } class Instance { constructor(el, opts) { this.el = el; this.phase = opts.phase || "complet"; this.tool = opts.tool || (this.phase === "atelier" ? "familles" : "decodeur"); this.store = this.tool === "familles" ? STORE_FAM : STORE_DEC; this.nom = this.tool === "familles" ? "Les familles" : "Le Décodeur"; this.base = (opts.base || "./decodeur").replace(/\/$/, ""); this.leconId = opts.lecon; this.pack = null; this.view = "boot"; this.held = null; this.syncEv = this.tool === "familles" ? "po-familles:sync" : "po-decodeur:sync"; this._onSync = (e) => { if (e.detail.id === this.leconId) this.onSync(e.detail.state); }; bus.addEventListener(this.syncEv, this._onSync); } frame(it) { return ` ${it.signal ? root.POSignaux.render(it.signal) : ""} ${it.signalSous ? root.POSignaux.render(it.signalSous) : ""} `; } start() { this.el.classList.add("pod"); if (this.tool === "familles") this.el.classList.add("pod-familles"); this.el.setAttribute("data-decodeur-root", "1"); if (root.POSignaux) root.POSignaux.base = root.PO_DECODEUR_BASE || ""; this.el.innerHTML = `${plate({ chapitre: "…" }, "Chargement")}On prépare ta cabine.

`; this.pack = (root.PO_DECODEUR_PACKS || {})[this.leconId]; if (!this.pack) { this.el.innerHTML = `Impossible de charger cette leçon.

`; return; } if (!this._bound) { this._bound = true; this.el.addEventListener("click", (e) => this.onClick(e)); this.el.addEventListener("dragstart", (e) => { if (e.target.closest(".pod-screen, .pod-booth")) e.preventDefault(); }); } this.etape = "intro"; this.ignoreUntil = 0; this.route(); } state() { return loadState(this.store, this.pack.id); } route() { const st = this.state(); const phase = this.phase; if (phase === "atelier") return this.beginAtelier(); if (phase === "avant") { if (st.avant && st.avant.done) return this.renderAvantDone(st); return this.beginSerie("avant"); } if (phase === "suite") { if (!(st.avant && st.avant.done)) return this.renderWaitAvant(); if (!(st.apres && st.apres.done)) return this.beginSerie("apres"); return this.renderFiche(st); } if (st.avant && st.avant.done && st.apres && st.apres.done) { return this.renderFiche(st); } if (!(st.avant && st.avant.done)) return this.beginSerie("avant"); return this.beginSerie("apres"); } onSync() { if (this.locked && this.view !== "wait-avant" && this.view !== "avant-done" && this.view !== "fiche") return; if (this.phase === "suite" && (this.view === "wait-avant" || this.view === "fiche" || this.view === "boot")) this.route(); if (this.phase === "avant" && (this.view === "avant-done" || this.view === "boot")) this.route(); } beginSerie(which) { const items = this.pack.map((it) => ({ ...it, choices: shuffle(it.choices), })); this.serie = { which, items, index: 0, results: [], times: [], started: 0, }; this.view = which; if (which === "avant") this.renderIntroAvant(); else this.renderIntroApres(); } teaserSign() { const first = (this.pack.avant && this.pack.avant) || {}; return first.signal ? root.POSignaux.render(first.signal) : ""; } booth(inner, extra = "") { return `Centre d’examen · BelgiqueCabine 12${inner} ${extra} `; } renderIntroAvant() { this.etape = "intro"; const p = this.pack; this.el.innerHTML = `  ${this.booth( `${this.teaserSign()}
## T’as déjà l’œil ?
Ou tu crois l’avoir.

${p.promesse} Trois images, trois secondes chacune, comme si l’écran du centre venait de s’allumer. Pas de piège pour l’instant : on mesure juste d’où tu pars.

`, `3 secondes · 3 images` )} `; } renderIntroApres() { this.etape = "intro"; const st = this.state(); const a = st.avant || { score: 0, total: 3 }; this.el.innerHTML = `  ${this.booth( `${this.teaserSign()}
## On remesure ton œil.

Tout à l’heure : **${a.score}/${a.total}**. Maintenant, les pièges de cette leçon : la bande, le mot « panneau », la forme, le petit en dessous.

`, `3 secondes · les pièges` )} `; } renderWaitAvant() { this.view = "wait-avant"; this.el.innerHTML = ` ${plate(this.pack, "En attente")} Deuxième passage

## D’abord les 3 flashes, en haut de la leçon.

Sans le point de départ, on ne peut pas te montrer ce que la leçon a changé. Fais-les (moins d’une minute), puis reviens ici.

`; } renderAvantDone(st) { this.view = "avant-done"; const a = st.avant; const msg = a.score <= 1 ? "Normal. Tu n’avais pas encore la méthode. Lis la leçon en pensant forme + couleur, puis redescends." : a.score === a.total ? "L’œil est déjà là. Lis quand même : les pièges de cette leçon ne sont pas dans ces 3 images." : "Pas mal. La leçon va transformer tes hésitations en réflexe. On se retrouve en bas."; this.el.innerHTML = ` ${plate(this.pack, "À toi de lire")} Départ enregistré · ${a.score}/${a.total}

## Lis la leçon. Ton 2e passage t’attend plus bas.

${msg}

- Temps moyen **${fmtSec(avg(a.times))}**
- Prochaine étape : l’atelier, puis les pièges

`; } startFlash() { this.etape = "flash"; this.showItem(); } current() { return this.serie.items[this.serie.index]; } showItem() { const it = this.current(); const n = this.serie.items.length; const i = this.serie.index; const reduce = root.matchMedia("(prefers-reduced-motion: reduce)").matches; const label = this.serie.which === "avant" ? "Avant la leçon" : "Après la leçon"; if (!it) { this.finishSerie(); return; } if (it.type === "piege") { this.etape = "question"; this.serie.started = performance.now(); this.el.innerHTML = ` ${plate(this.pack, "Les pièges")} Piège de l’examen · ${i + 1}/${n}

 ${progressDots(n, i, this.serie.results)} ${this.frame(it)} ${it.situation ? `${it.situation}

` : ""} ${it.question}

${this.choicesHtml(it)}`; return; } this.etape = "flash"; this.el.innerHTML = `  ${progressDots(n, i, this.serie.results)} ${this.booth( `3`, `Regard 3,0 s` )} ${it.situation ? `${it.situation}

` : ""} Regarde. Ne cherche pas le détail : forme et couleur d’abord.

`; if (reduce) { this.revealSign(it, 0); return; } this.countIn(it); } countIn(it) { const count = $(this.el, ""); let n = 3; const tick = () => { if (!count) return; if (n <= 0) { this.revealSign(it, FLASH_MS); return; } count.textContent = String(n); n -= 1; this._t = setTimeout(tick, 480); }; tick(); } revealSign(it, ms) { const screen = $(this.el, ""); const hint = $(this.el, ""); if (!screen) return; screen.innerHTML = `${this.frame(it)}`; const bar = $(this.el, ""); if (bar && ms) bar.classList.add("run"); if (!ms) { this.etape = "question"; this.ignoreUntil = performance.now() + 400; this.serie.started = performance.now(); this.showQuestion(it, false); return; } const clock = $(this.el, ""); const start = performance.now(); const tick = () => { const left = Math.max(0, ms - (performance.now() - start)); if (clock) clock.textContent = (left / 1000).toFixed(1).replace(".", ",") + " s"; if (left <= 0) { const timer = $(this.el, ".pod-timer"); if (timer) timer.textContent = "Temps écoulé"; this.eteindre(screen); if (hint) hint.textContent = "L’image s’est éteinte. Qu’as-tu vu ?"; this.etape = "question"; this.ignoreUntil = performance.now() + 550; this.serie.started = performance.now(); this.showQuestion(it, true); return; } this._raf = requestAnimationFrame(tick); }; this._raf = requestAnimationFrame(tick); } showQuestion(it, afterBlack) { const body = $(this.el, ".pod-body"); if (!body) return; const q = document.createElement("div"); const sit = it.situation && !$(this.el, ".pod-sit-q") ? `${it.situation}

` : ""; q.innerHTML = ` ${sit} ${it.question}

${this.choicesHtml(it)} ${afterBlack ? `` : ""}`; body.appendChild(q); } choicesHtml(it) { return it.choices .map( (c) => `` ) .join(""); } reveler() { if (this._revoirT) { clearTimeout(this._revoirT); this._revoirT = null; } const screen = $(this.el, ""); if (!screen) return; screen.classList.remove("eteint"); const voile = screen.querySelector(".pod-voile"); if (voile) voile.remove(); const revoir = this.el.querySelector('[data-act="revoir"]'); if (revoir) { const wrap = revoir.closest(".pod-actions"); if (wrap) wrap.remove(); else revoir.remove(); } } answer(btn) { if (this.locked || this.etape !== "question") return; if (performance.now() < this.ignoreUntil) return; this.locked = true; this.etape = "feedback"; this.ignoreUntil = performance.now() + 550; this.reveler(); const ok = btn.getAttribute("data-ok") === "1"; const elapsed = performance.now() - (this.serie.started || performance.now()); this.serie.results.push(ok); this.serie.times.push(elapsed); $$ (this.el, ".pod-choice").forEach((b) => { b.disabled = true; if (b.getAttribute("data-ok") === "1") b.classList.add("ok"); }); if (!ok) btn.classList.add("ko"); const it = this.current(); const box = document.createElement("div"); box.className = `pod-feedback ${ok ? "good" : "bad"}`; box.innerHTML = ` **${ok ? "Vu." : "Passé à côté."}**${it.explain}

${it.astuce}

`; $(this.el, ".pod-body").appendChild(box); } nextItem() { if (this.etape !== "feedback") return; if (performance.now() < this.ignoreUntil) return; if (!this.serie || this.serie.results.length !== this.serie.index + 1) return; this.locked = false; if (this._t) clearTimeout(this._t); if (this._revoirT) clearTimeout(this._revoirT); if (this._raf) cancelAnimationFrame(this._raf); this._t = this._revoirT = this._raf = null; this.serie.index = this.serie.results.length; if (this.serie.index < this.serie.items.length) { this.etape = "flash"; this.ignoreUntil = performance.now() + 400; this.showItem(); return; } this.finishSerie(); } finishSerie() { const s = this.serie; if (!s || s.results.length < s.items.length) return; const score = s.results.filter(Boolean).length; const payload = { score, total: s.items.length, times: s.times, done: true, results: s.results }; if (s.which === "avant") { saveState(this.store, this.pack.id, { avant: payload }); if (this.phase === "avant") return this.renderAvantDone(this.state()); return this.beginSerie("apres"); } saveState(this.store, this.pack.id, { apres: payload }); this.renderFiche(this.state()); } beginAtelier() { this.view = "atelier"; this.etape = "atelier"; this.locked = false; this.held = null; this.atelier = { left: shuffle(this.pack.atelier), placed: {}, errors: 0, }; this.renderAtelier(true); } renderAtelier(intro) { const p = this.pack; const a = this.atelier; const remaining = a.left.filter((s) => !a.placed[s.id]); const done = remaining.length === 0; const rack = remaining .map( (s) => `` ) .join(""); const trays = p.familles .map((f) => { const got = Object.values(a.placed).filter((x) => x.famille === f.id); const good = got.length ? "good" : ""; const slots = got .map((s) => `${root.POSignaux.render(s.id)}${s.code} · ${s.nom}`) .join(""); return ` ${slots || ``} ${f.label}`; }) .join(""); this.el.innerHTML = ` ${plate(p, (p.familles && p.familles.length) + " familles", this.nom)} Forme + couleur · sans réciter

## ${done ? "Les six familles sont en place." : "Range chaque signal dans sa famille."}

${ intro ? "Glisse un panneau dans sa famille, ou touche-le puis touche la case. Tu peux toujours faire défiler." : done ? "C’est la méthode de la leçon, devenue un geste." : this.held ? "Maintenant, la case." : "Encore " + remaining.length + " à ranger." }

 ${remaining.length ? `${rack}` : ""} ${trays} ${ done ? `` : `- ${Object.keys(a.placed).length}/${p.atelier.length} rangés
- ${a.errors} erreur${a.errors > 1 ? "s" : ""}

` } `; this.bindAtelierDnD(); this.syncHoldUi(); } canDrag() { return root.matchMedia("(hover: hover) and (pointer: fine)").matches; } bindAtelierDnD() { const dragOk = this.canDrag(); $$ (this.el, ".pod-sign").forEach((sign) => { sign.draggable = dragOk; if (!dragOk) return; sign.addEventListener("dragstart", (e) => { this._dragging = true; this.held = sign.getAttribute("data-id"); e.dataTransfer.setData("text/plain", this.held); e.dataTransfer.effectAllowed = "move"; this.syncHoldUi(); }); sign.addEventListener("dragend", () => { setTimeout(() => { this._dragging = false; }, 0); }); }); $$ (this.el, ".pod-tray").forEach((tray) => { tray.addEventListener("dragover", (e) => { e.preventDefault(); tray.classList.add("hot"); }); tray.addEventListener("dragleave", () => tray.classList.remove("hot")); tray.addEventListener("drop", (e) => { e.preventDefault(); tray.classList.remove("hot"); const id = e.dataTransfer.getData("text/plain") || this.held; this.place(id, tray.getAttribute("data-tray"), tray); }); }); } syncHoldUi() { this.el.classList.toggle("is-holding", !!this.held); $$ (this.el, ".pod-sign").forEach((el) => { el.classList.toggle("held", el.getAttribute("data-id") === this.held); }); $$ (this.el, ".pod-tray").forEach((el) => { el.classList.toggle("await", !!this.held && !el.classList.contains("good")); }); const lead = $(this.el, ".pod-lead"); if (!lead || !this.atelier) return; const left = this.pack.atelier.length - Object.keys(this.atelier.placed).length; lead.textContent = this.held ? "Pose-le dans sa famille. Tu peux encore faire défiler." : "Encore " + left + " à ranger."; } hold(id) { if (this._dragging) return; this.held = this.held === id ? null : id; this.syncHoldUi(); } place(id, famille, trayEl) { const item = this.pack.atelier.find((s) => s.id === id); if (!item) return; if (item.famille === famille) { const y = window.scrollY; this.atelier.placed = item; this.held = null; if (Object.keys(this.atelier.placed).length === this.pack.atelier.length) { saveState(this.store, this.pack.id, { atelier: { done: true, placed: Object.keys(this.atelier.placed).length, errors: this.atelier.errors, }, }); } this.renderAtelier(false); window.scrollTo(0, y); return; } this.atelier.errors += 1; if (trayEl) { trayEl.classList.add("bad"); setTimeout(() => trayEl.classList.remove("bad"), 420); } const sign = this.el.querySelector(`.pod-sign[data-id="${id}"]`); if (sign) { sign.classList.add("shake"); setTimeout(() => sign.classList.remove("shake"), 420); } } renderFiche(st) { this.view = "fiche"; const a = st.avant || { score: 0, total: 3, times: [] }; const p = st.apres || { score: 0, total: 5, times: [] }; const gain = p.score - a.score; const verdict = p.score === p.total ? "Leçon acquise. Tu ne récites plus : tu décodes. C’est exactement ce que l’écran du jour J demandera." : p.score > a.score ? "Ton œil a bougé. Relis juste les pièges ratés, puis enchaîne sur le quiz de la leçon." : "L’œil n’est pas encore là. Relis la leçon, puis rejoue les pièges."; this.el.innerHTML = ` ${plate(this.pack)}
### Fiche de cabine

Avant la leçon**${a.score}/${a.total}**Après · les pièges**${p.score}/${p.total}**Temps de regard**${fmtSec(avg([...(a.times || []), ...(p.times || [])]))}**Écart**${gain > 0 ? "+" + gain : gain === 0 ? "stable" : gain}**${verdict}

Reproductions officielles des signaux routiers belges.

`; } eteindre(screen) { if (!screen || this.locked) return; if (!screen.querySelector(".pod-voile")) { screen.insertAdjacentHTML( "beforeend", `Qu’as-tu vu ?*Forme + couleur*` ); } screen.classList.add("eteint"); } revoir() { if (this.locked) return; const screen = $(this.el, ""); const it = this.current(); if (!screen) return; if (this._revoirT) clearTimeout(this._revoirT); screen.classList.remove("eteint"); screen.innerHTML = `${this.frame(it)}`; const btn = this.el.querySelector('[data-act="revoir"]'); if (btn) { const wrap = btn.closest(".pod-actions"); if (wrap) wrap.remove(); else btn.remove(); } this._revoirT = setTimeout(() => { this._revoirT = null; if (!this.locked) this.eteindre(screen); }, 1000); } reset() { const st = this.state(); this.locked = false; if (this.tool === "familles" || this.phase === "atelier") { saveState(this.store, this.pack.id, { atelier: null }); this.beginAtelier(); return; } saveState(this.store, this.pack.id, { avant: null, apres: null }); this.route(); } onClick(e) { const t = e.target.closest(""); if (!t) { if (e.target.closest(".pod-screen, .pod-booth")) { e.preventDefault(); e.stopPropagation(); } const tray = e.target.closest(""); if (tray && this.held) this.place(this.held, tray.getAttribute("data-tray"), tray); return; } if (this.etape === "flash") { e.preventDefault(); return; } const act = t.getAttribute("data-act"); if (act === "go-flash") this.startFlash(); else if (act === "answer") this.answer(t); else if (act === "next") this.nextItem(); else if (act === "hold") this.hold(t.getAttribute("data-id")); else if (act === "revoir") this.revoir(); else if (act === "reset") this.reset(); else if (act === "scroll-avant") { const top = root.document.querySelector('[data-phase="avant"]'); if (top) top.scrollIntoView({ behavior: "smooth", block: "start" }); } } } function mount(el, opts) { const inst = new Instance(el, opts); inst.start(); return inst; } function boot() { $$ (document, "").forEach((el) => { if (el.getAttribute("data-decodeur-root")) return; const phase = el.getAttribute("data-phase") || "complet"; if (phase === "atelier") return; mount(el, { lecon: el.getAttribute("data-decodeur"), phase: phase, tool: "decodeur", base: root.PO_DECODEUR_BASE || "", }); }); $$ (document, "").forEach((el) => { if (el.getAttribute("data-decodeur-root")) return; mount(el, { lecon: el.getAttribute("data-familles"), phase: "atelier", tool: "familles", base: root.PO_DECODEUR_BASE || "", }); }); } root.PODecodeur = { mount, boot }; if (document.readyState === "loading") document.addEventListener("DOMContentLoaded", boot); else boot(); })(window);[**La leçon est lue… *vérifie qu’elle est acquise.*** Le quiz d’entraînement de la leçon se lance ici même : **16 questions** au format examen, corrigées une par une avec l’explication à chaque réponse. Il te faut **80 %** pour valider la leçon.    **Correction immédiate****Objectif 80 %****Progression enregistrée** JE M’ENTRAÎNE Gratuit · l’ordre des questions change à chaque essai](#)  [**EXAMEN***RECALÉ*2 FAUTES GRAVES  **La leçon est lue… *l’examen, lui, ne prévient pas.*** 50 questions, minimum **41/50**, et **2 fautes graves = échec automatique** : voilà le vrai examen. Les examens blancs du cours t’y préparent chapitre par chapitre, et la **simulation complète** te note exactement comme au centre d’examen, **5 points en moins** par faute grave comprises.    **Le format officiel du jour J****Questions lues à voix haute****Correction expliquée** JE FAIS UN EXAMEN BLANC Choisis ton offre · réussi ou remboursé](https://permis-online.be/cours/examens-blancs/#theorique)  Aujourd’hui chez les candidats**4***candidats actifs***4***niveaux de plaque*
**Réussis du premier coup.** Ton compte gratuit enregistre ta progression et débloque des quiz et défis en plus, avec les candidats de ton centre qui visent la même date que toi.

[Créer mon compte gratuit](https://permis-online.be/cours/compte-gratuit/?src=vitrine)[Voir les candidats →](https://permis-online.be/cours/candidats/)**Cette leçon t’a aidé ?** Ajoute Permis Online à tes sources préférées Google : nos contenus remonteront dans tes résultats.

[Ajouter sur Google](https://www.google.com/preferences/source?q=permis.online)Références et méthodologieArrêté royal du 1er décembre 1975 portant règlement général sur la police de la circulation routière et de l’usage de la voie publique (le code de la route belge).Annexe 4 de l’arrêté royal du 23 mars 1998 relatif au permis de conduire : la matière officielle de l’examen théorique.Leçon rédigée par [Wenceslas Dasnois](/auteur/wenceslas-dasnois/) selon nos [principes éditoriaux](/principes-editoriaux/) et notre [méthodologie de vérification](/methodologie-verification/). Tu repères une imprécision ? Notre [politique de correction](/politique-de-correction/) s’applique.

## Sources & References

- [Je réussis mon examen](https://belgique.permis.online/commande/?add-to-cart=19749113) · belgique.permis.online
- [Je réussis tout, de A à Z](https://belgique.permis.online/commande/?add-to-cart=19702281) · belgique.permis.online
- [Ajouter sur Google](https://www.google.com/preferences/source?q=permis.online) · google.com

---

*Source: [La signalisation routière : les bases pour bien démarrer](https://permis-online.be/cours/theorique/introduction/) · Published 2026-07-08 · Updated 2026-07-12*
*Author: Wenceslas Dasnois (Fondateur de Permis Online · Fondateur de l'Observatoire du Permis Belge (vérification des statistiques officielles du permis, 3 régions)) · Permis Online*
