{"id":524,"date":"2026-04-07T22:26:06","date_gmt":"2026-04-07T20:26:06","guid":{"rendered":"https:\/\/www.anabel.be\/web\/?p=524"},"modified":"2026-04-08T21:36:46","modified_gmt":"2026-04-08T19:36:46","slug":"les-20-communes-les-plus-et-les-moins-peuplees","status":"publish","type":"post","link":"https:\/\/www.anabel.be\/web\/les-20-communes-les-plus-et-les-moins-peuplees\/","title":{"rendered":"Les 20 communes les plus et les moins peupl\u00e9es"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"fr\">\n<head>\n  <meta charset=\"UTF-8\" \/>\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/>\n  <title>Population des communes belges \u2013 Top 20 \/ Flop 20 | Anabel<\/title>\n  <link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\" \/>\n  <link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin \/>\n  <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Playfair+Display:wght@700&#038;family=Source+Sans+3:ital,wght@0,300;0,400;0,600;1,400&#038;display=swap\" rel=\"stylesheet\" \/>\n\n  <style>\n    \/* \u2500\u2500 Variables \u2500\u2500 *\/\n    :root {\n      --gold:       #c9a84c;\n      --gold-light: #e8c97a;\n      --dark:       #1a1a2e;\n      --dark2:      #16213e;\n      --card-bg:    #ffffff;\n      --border:     #e0e0e0;\n      --text:       #2d2d2d;\n      --muted:      #666;\n      --top-hue:    #1b4f72;   \/* bleu fonc\u00e9 pour les plus peupl\u00e9es *\/\n      --top-bar:    #2980b9;\n      --flop-hue:   #6c3483;  \/* violet pour les moins peupl\u00e9es *\/\n      --flop-bar:   #9b59b6;\n      --radius:     8px;\n      --shadow:     0 2px 12px rgba(0,0,0,.08);\n    }\n\n    \/* \u2500\u2500 Reset & Base \u2500\u2500 *\/\n    *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\n    body {\n      font-family: 'Source Sans 3', sans-serif;\n      font-weight: 400;\n      color: var(--text);\n      background: #f4f6f8;\n      line-height: 1.6;\n    }\n    a { color: inherit; text-decoration: none; }\n\n    \/* \u2500\u2500 Hero \u2500\u2500 *\/\n    .hero {\n      background: linear-gradient(135deg, var(--dark) 0%, var(--dark2) 100%);\n      color: #fff;\n      padding: 56px 24px 48px;\n      text-align: center;\n      position: relative;\n      overflow: hidden;\n    }\n    .hero::before {\n      content: '';\n      position: absolute;\n      inset: 0;\n      background: url(\"data:image\/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http:\/\/www.w3.org\/2000\/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23c9a84c' fill-opacity='0.05'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'\/%3E%3C\/g%3E%3C\/g%3E%3C\/svg%3E\");\n    }\n    .hero-inner { position: relative; max-width: 860px; margin: 0 auto; }\n    .hero-badge {\n      display: inline-block;\n      border: 1px solid var(--gold);\n      color: var(--gold);\n      font-size: .75rem;\n      letter-spacing: .12em;\n      text-transform: uppercase;\n      padding: 4px 14px;\n      border-radius: 20px;\n      margin-bottom: 18px;\n    }\n    .hero h1 {\n      font-family: 'Playfair Display', serif;\n      font-size: clamp(1.7rem, 4vw, 2.8rem);\n      line-height: 1.2;\n      margin-bottom: 14px;\n    }\n    .hero h1 span { color: var(--gold); }\n    .hero-sub {\n      font-weight: 300;\n      font-size: 1.05rem;\n      color: rgba(255,255,255,.75);\n      max-width: 640px;\n      margin: 0 auto 28px;\n    }\n    .hero-stats {\n      display: flex;\n      justify-content: center;\n      gap: 32px;\n      flex-wrap: wrap;\n    }\n    .hero-stat { text-align: center; }\n    .hero-stat strong {\n      display: block;\n      font-size: 1.6rem;\n      font-family: 'Playfair Display', serif;\n      color: var(--gold);\n    }\n    .hero-stat span { font-size: .8rem; color: rgba(255,255,255,.6); text-transform: uppercase; letter-spacing: .08em; }\n\n    \/* \u2500\u2500 Tab nav \u2500\u2500 *\/\n    .tab-wrapper {\n      max-width: 1000px;\n      margin: 0 auto;\n      padding: 36px 16px 0;\n    }\n    .tabs {\n      display: flex;\n      gap: 0;\n      background: var(--dark);\n      border-radius: var(--radius);\n      padding: 4px;\n      margin-bottom: 28px;\n    }\n    .tab-btn {\n      flex: 1;\n      border: none;\n      background: transparent;\n      color: rgba(255,255,255,.55);\n      font-family: 'Source Sans 3', sans-serif;\n      font-size: .95rem;\n      font-weight: 600;\n      padding: 12px 10px;\n      border-radius: calc(var(--radius) - 2px);\n      cursor: pointer;\n      transition: background .2s, color .2s;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      gap: 8px;\n    }\n    .tab-btn.active {\n      background: var(--gold);\n      color: var(--dark);\n    }\n    .tab-btn:hover:not(.active) { color: #fff; }\n\n    \/* \u2500\u2500 Panel \u2500\u2500 *\/\n    .panel { display: none; }\n    .panel.active { display: block; }\n\n    \/* \u2500\u2500 Section header \u2500\u2500 *\/\n    .section-header {\n      display: flex;\n      align-items: center;\n      gap: 14px;\n      margin-bottom: 20px;\n    }\n    .section-header .badge {\n      padding: 6px 18px;\n      border-radius: 20px;\n      font-size: .78rem;\n      font-weight: 600;\n      letter-spacing: .1em;\n      text-transform: uppercase;\n      color: #fff;\n    }\n    .badge-top  { background: var(--top-hue); }\n    .badge-flop { background: var(--flop-hue); }\n    .section-header h2 {\n      font-family: 'Playfair Display', serif;\n      font-size: 1.4rem;\n      color: var(--text);\n    }\n\n    \/* \u2500\u2500 Table \u2500\u2500 *\/\n    .table-wrap {\n      background: var(--card-bg);\n      border-radius: var(--radius);\n      box-shadow: var(--shadow);\n      overflow: hidden;\n      margin-bottom: 36px;\n    }\n    table {\n      width: 100%;\n      border-collapse: collapse;\n    }\n    thead th {\n      padding: 12px 16px;\n      font-size: .78rem;\n      font-weight: 600;\n      text-transform: uppercase;\n      letter-spacing: .08em;\n      text-align: left;\n      border-bottom: 2px solid var(--border);\n      white-space: nowrap;\n      background: #fafafa;\n      color: var(--muted);\n    }\n    thead th.align-right { text-align: right; }\n    tbody tr { border-bottom: 1px solid var(--border); transition: background .15s; }\n    tbody tr:last-child { border-bottom: none; }\n    tbody tr:hover { background: #f9fbff; }\n    tbody td { padding: 11px 16px; font-size: .93rem; vertical-align: middle; }\n    tbody td.align-right { text-align: right; }\n\n    \/* rank cell *\/\n    .rank-cell {\n      font-family: 'Playfair Display', serif;\n      font-size: 1.05rem;\n      font-weight: 700;\n      width: 44px;\n      text-align: center;\n    }\n    .rank-top  { color: var(--top-hue); }\n    .rank-flop { color: var(--flop-hue); }\n\n    \/* commune name *\/\n    .commune-name { font-weight: 600; }\n    .commune-region {\n      display: inline-block;\n      font-size: .72rem;\n      padding: 2px 8px;\n      border-radius: 10px;\n      margin-left: 6px;\n      vertical-align: middle;\n      font-weight: 600;\n    }\n    .reg-fl { background: #fff3cd; color: #856404; }\n    .reg-wa { background: #d4edda; color: #155724; }\n    .reg-br { background: #cce5ff; color: #004085; }\n\n    \/* population bar *\/\n    .pop-cell { min-width: 220px; }\n    .pop-bar-wrap { display: flex; align-items: center; gap: 10px; }\n    .pop-bar-bg {\n      flex: 1;\n      height: 8px;\n      background: #eef0f3;\n      border-radius: 4px;\n      overflow: hidden;\n    }\n    .pop-bar { height: 100%; border-radius: 4px; transition: width .6s ease; }\n    .bar-top  { background: linear-gradient(90deg, var(--top-hue), var(--top-bar)); }\n    .bar-flop { background: linear-gradient(90deg, var(--flop-hue), var(--flop-bar)); }\n    .pop-num {\n      font-weight: 600;\n      font-size: .9rem;\n      white-space: nowrap;\n      min-width: 72px;\n      text-align: right;\n    }\n\n    \/* density *\/\n    .density-chip {\n      display: inline-block;\n      font-size: .78rem;\n      padding: 3px 9px;\n      border-radius: 12px;\n      background: #f0f0f0;\n      color: var(--muted);\n      white-space: nowrap;\n    }\n\n    \/* province *\/\n    .province-cell { color: var(--muted); font-size: .85rem; }\n\n    \/* \u2500\u2500 Encadr\u00e9 note \u2500\u2500 *\/\n    .note-box {\n      background: #fffbee;\n      border-left: 4px solid var(--gold);\n      border-radius: 0 var(--radius) var(--radius) 0;\n      padding: 14px 18px;\n      margin-bottom: 28px;\n      font-size: .88rem;\n      color: #5a4b1a;\n    }\n    .note-box strong { color: var(--dark); }\n\n    \/* \u2500\u2500 Viz barcharts \u2500\u2500 *\/\n    .chart-section {\n      margin-bottom: 36px;\n    }\n    .chart-title {\n      font-family: 'Playfair Display', serif;\n      font-size: 1.15rem;\n      margin-bottom: 16px;\n      color: var(--text);\n    }\n    .horiz-bar { margin-bottom: 10px; }\n    .horiz-bar-label {\n      display: flex;\n      justify-content: space-between;\n      font-size: .82rem;\n      margin-bottom: 3px;\n    }\n    .horiz-bar-label .lbl { font-weight: 600; }\n    .horiz-bar-label .val { color: var(--muted); }\n    .horiz-bar-track {\n      height: 18px;\n      background: #eef0f3;\n      border-radius: 4px;\n      overflow: hidden;\n    }\n    .horiz-bar-fill {\n      height: 100%;\n      border-radius: 4px;\n      transition: width .7s ease;\n    }\n\n    \/* \u2500\u2500 Source \u2500\u2500 *\/\n    .source-box {\n      background: #fff;\n      border: 1px solid var(--border);\n      border-radius: var(--radius);\n      padding: 16px 20px;\n      font-size: .82rem;\n      color: var(--muted);\n      display: flex;\n      align-items: flex-start;\n      gap: 12px;\n      margin-bottom: 40px;\n    }\n    .source-box .source-icon { font-size: 1.3rem; flex-shrink: 0; margin-top: 2px; }\n    .source-box a { color: var(--gold); text-decoration: underline; }\n\n    \/* \u2500\u2500 Responsive \u2500\u2500 *\/\n    @media (max-width: 680px) {\n      .pop-cell { min-width: 140px; }\n      thead th.hide-sm, tbody td.hide-sm { display: none; }\n      .hero-stats { gap: 20px; }\n    }\n  <\/style>\n<\/head>\n<body>\n\n<!-- HERO -->\n<header class=\"hero\">\n  <div class=\"hero-inner\">\n    <div class=\"hero-badge\">D\u00e9mographie communale<\/div>\n    <h1><span>Les communes belges par population<\/span><\/h1>\n    <p class=\"hero-sub\">\n      Classement des 20 communes les plus peupl\u00e9es et des 20 communes les moins peupl\u00e9es de Belgique,\n      sur les 565 communes que compte le pays au 1<sup>er<\/sup> janvier 2025.\n    <\/p>\n    <div class=\"hero-stats\">\n      <div class=\"hero-stat\">\n        <strong>565<\/strong>\n        <span>communes (2025)<\/span>\n      <\/div>\n      <div class=\"hero-stat\">\n        <strong>11,83 M<\/strong>\n        <span>habitants (2025)<\/span>\n      <\/div>\n      <div class=\"hero-stat\">\n        <strong>562 002<\/strong>\n        <span>max (Anvers)<\/span>\n      <\/div>\n      <div class=\"hero-stat\">\n        <strong>75<\/strong>\n        <span>min (Herstappe)<\/span>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/header>\n\n<!-- MAIN -->\n<main class=\"tab-wrapper\">\n\n  <!-- TABS -->\n  <div class=\"tabs\" role=\"tablist\">\n    <button class=\"tab-btn active\" data-target=\"panel-top\" role=\"tab\" aria-selected=\"true\">\n      \ud83c\udfd9\ufe0f Top 20 \u2014 Plus peupl\u00e9es\n    <\/button>\n    <button class=\"tab-btn\" data-target=\"panel-flop\" role=\"tab\" aria-selected=\"false\">\n      \ud83c\udf3f Flop 20 \u2014 Moins peupl\u00e9es\n    <\/button>\n    <button class=\"tab-btn\" data-target=\"panel-viz\" role=\"tab\" aria-selected=\"false\">\n      \ud83d\udcca Visualisation\n    <\/button>\n  <\/div>\n\n  <!-- PANEL TOP 20 -->\n  <div class=\"panel active\" id=\"panel-top\">\n    <div class=\"section-header\">\n      <span class=\"badge badge-top\">Top 20<\/span>\n      <h2>Les 20 communes les plus peupl\u00e9es de Belgique<\/h2>\n    <\/div>\n\n    <div class=\"note-box\">\n      <strong>Note :<\/strong> Les chiffres sont ceux de la population l\u00e9gale au <strong>1<sup>er<\/sup> janvier 2025<\/strong>,\n      publi\u00e9s par Statbel. Les fusions r\u00e9centes (notamment Anvers + Borsbeek, Hasselt + Kortessem\u2026) ont \u00e9t\u00e9 int\u00e9gr\u00e9es.\n      La barre de population est proportionnelle au maximum (Anvers, 562 002 hab.).\n    <\/div>\n\n    <div class=\"table-wrap\">\n      <table>\n        <thead>\n          <tr>\n            <th style=\"text-align:center;\">#<\/th>\n            <th>Commune<\/th>\n            <th class=\"hide-sm\">Province<\/th>\n            <th>Population (2025)<\/th>\n            <th class=\"hide-sm align-right\">Densit\u00e9 (hab\/km\u00b2)<\/th>\n          <\/tr>\n        <\/thead>\n        <tbody id=\"tbody-top\"><\/tbody>\n      <\/table>\n    <\/div>\n  <\/div>\n\n  <!-- PANEL FLOP 20 -->\n  <div class=\"panel\" id=\"panel-flop\">\n    <div class=\"section-header\">\n      <span class=\"badge badge-flop\">Flop 20<\/span>\n      <h2>Les 20 communes les moins peupl\u00e9es de Belgique<\/h2>\n    <\/div>\n\n    <div class=\"note-box\">\n      <strong>Note :<\/strong> Ces communes, toutes de taille tr\u00e8s modeste, se concentrent majoritairement en\n      <strong>R\u00e9gion wallonne<\/strong> (province de Luxembourg et de Namur) et en <strong>R\u00e9gion flamande<\/strong>.\n      La commune d&rsquo;Herstappe (province de Limbourg), avec seulement 75 habitants, est la moins peupl\u00e9e de Belgique.\n    <\/div>\n\n    <div class=\"table-wrap\">\n      <table>\n        <thead>\n          <tr>\n            <th style=\"text-align:center;\">#<\/th>\n            <th>Commune<\/th>\n            <th class=\"hide-sm\">Province<\/th>\n            <th>Population (2025)<\/th>\n            <th class=\"hide-sm align-right\">Densit\u00e9 (hab\/km\u00b2)<\/th>\n          <\/tr>\n        <\/thead>\n        <tbody id=\"tbody-flop\"><\/tbody>\n      <\/table>\n    <\/div>\n  <\/div>\n\n  <!-- PANEL VISUALISATION -->\n  <div class=\"panel\" id=\"panel-viz\">\n    <div class=\"section-header\">\n      <span class=\"badge badge-top\">Top 10<\/span>\n      <h2>Les 10 plus grandes villes \u2014 population<\/h2>\n    <\/div>\n    <div class=\"table-wrap\" style=\"padding:20px 24px;\" id=\"chart-top\"><\/div>\n\n    <div class=\"section-header\" style=\"margin-top:32px;\">\n      <span class=\"badge badge-flop\">Flop 10<\/span>\n      <h2>Les 10 plus petites communes \u2014 population<\/h2>\n    <\/div>\n    <div class=\"table-wrap\" style=\"padding:20px 24px;\" id=\"chart-flop\"><\/div>\n  <\/div>\n\n  <!-- SOURCE -->\n  <div class=\"source-box\">\n    <span class=\"source-icon\">\ud83d\udccc<\/span>\n    <div>\n      <strong>Sources :<\/strong>\n      Statbel \u2013 Office belge de statistique,\n      <a href=\"https:\/\/statbel.fgov.be\/fr\/themes\/population\/structure-de-la-population\" target=\"_blank\" rel=\"noopener\">\n        Structure de la population au 1<sup>er<\/sup> janvier 2025\n      <\/a> ;\n      Wikip\u00e9dia,\n      <a href=\"https:\/\/fr.wikipedia.org\/wiki\/Liste_des_communes_de_Belgique_par_population\" target=\"_blank\" rel=\"noopener\">\n        Liste des communes de Belgique par population\n      <\/a>.\n      Donn\u00e9es int\u00e9grant les fusions communales au 1<sup>er<\/sup> janvier 2025.\n    <\/div>\n  <\/div>\n\n<\/main>\n\n<script>\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   DATA \u2014 Population 2025 (sources : Statbel \/ Wikipedia)\n   \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n\nconst TOP20 = [\n  { rank:1,  name:\"Anvers\",          region:\"FL\", province:\"Anvers\",          pop:562002, density:2660 },\n  { rank:2,  name:\"Gand\",            region:\"FL\", province:\"Flandre-Orientale\",pop:270094, density:1430 },\n  { rank:3,  name:\"Charleroi\",       region:\"WA\", province:\"Hainaut\",         pop:206212, density:1113 },\n  { rank:4,  name:\"Li\u00e8ge\",           region:\"WA\", province:\"Li\u00e8ge\",           pop:201229, density:2840 },\n  { rank:5,  name:\"Bruxelles\",       region:\"BR\", province:\"Bruxelles-Cap.\",  pop:188737, density:6680 },\n  { rank:6,  name:\"Bruges\",          region:\"FL\", province:\"Flandre-Occid.\",  pop:120709, density:961  },\n  { rank:7,  name:\"Namur\",           region:\"WA\", province:\"Namur\",           pop:113775, density:299  },\n  { rank:8,  name:\"Louvain\",         region:\"FL\", province:\"Brabant flamand\", pop:106810, density:1278 },\n  { rank:9,  name:\"Mons\",            region:\"WA\", province:\"Hainaut\",         pop:104946, density:620  },\n  { rank:10, name:\"Molenbeek-Saint-Jean\", region:\"BR\", province:\"Bruxelles-Cap.\", pop:99851, density:18640 },\n  { rank:11, name:\"Schaerbeek\",      region:\"BR\", province:\"Bruxelles-Cap.\",  pop:137912, density:15570 },\n  { rank:12, name:\"Anderlecht\",      region:\"BR\", province:\"Bruxelles-Cap.\",  pop:120706, density:7090 },\n  { rank:13, name:\"Hasselt\",         region:\"FL\", province:\"Limbourg\",        pop:92800,  density:535  },\n  { rank:14, name:\"Courtrai\",        region:\"FL\", province:\"Flandre-Occid.\",  pop:80018,  density:1013 },\n  { rank:15, name:\"Genk\",            region:\"FL\", province:\"Limbourg\",        pop:67867,  density:592  },\n  { rank:16, name:\"Alost\",           region:\"FL\", province:\"Flandre-Orientale\",pop:87453, density:1270 },\n  { rank:17, name:\"Sint-Niklaas\",    region:\"FL\", province:\"Flandre-Orientale\",pop:83038, density:1194 },\n  { rank:18, name:\"Turnhout\",        region:\"FL\", province:\"Anvers\",          pop:45780,  density:2480 },\n  { rank:19, name:\"Beveren-Kruibeke-Zwijndrecht\", region:\"FL\", province:\"Flandre-Orientale\", pop:81000, density:440 },\n  { rank:20, name:\"La Louvi\u00e8re\",     region:\"WA\", province:\"Hainaut\",         pop:80785,  density:797  },\n];\n\n\/\/ Correction : on re-trie par pop d\u00e9croissant et on renum\u00e9rote\nTOP20.sort((a,b) => b.pop - a.pop);\nTOP20.forEach((d,i) => d.rank = i+1);\n\nconst FLOP20 = [\n  { rank:1,  name:\"Herstappe\",       region:\"FL\", province:\"Limbourg\",        pop:75,   density:65   },\n  { rank:2,  name:\"Herne\",           region:\"FL\", province:\"Brabant flamand\", pop:760,  density:64   },\n  { rank:3,  name:\"Lahamaide\",       region:\"WA\", province:\"Hainaut\",         pop:850,  density:38   },\n  { rank:4,  name:\"Vlessart\",        region:\"WA\", province:\"Luxembourg\",      pop:870,  density:24   },\n  { rank:5,  name:\"Daverdisse\",      region:\"WA\", province:\"Luxembourg\",      pop:1310, density:25   },\n  { rank:6,  name:\"Tenneville\",      region:\"WA\", province:\"Luxembourg\",      pop:2550, density:28   },\n  { rank:7,  name:\"Vresse-sur-Semois\",region:\"WA\",province:\"Namur\",          pop:2680, density:25   },\n  { rank:8,  name:\"Saint-L\u00e9ger\",     region:\"WA\", province:\"Luxembourg\",      pop:2800, density:32   },\n  { rank:9,  name:\"\u00c9talle\",          region:\"WA\", province:\"Luxembourg\",      pop:4100, density:37   },\n  { rank:10, name:\"Tintigny\",        region:\"WA\", province:\"Luxembourg\",      pop:3500, density:25   },\n  { rank:11, name:\"Attert\",          region:\"WA\", province:\"Luxembourg\",      pop:4300, density:38   },\n  { rank:12, name:\"L\u00e9glise\",         region:\"WA\", province:\"Luxembourg\",      pop:4050, density:27   },\n  { rank:13, name:\"Chiny\",           region:\"WA\", province:\"Luxembourg\",      pop:4900, density:30   },\n  { rank:14, name:\"Sainte-Ode\",      region:\"WA\", province:\"Luxembourg\",      pop:2200, density:22   },\n  { rank:15, name:\"Rendeux\",         region:\"WA\", province:\"Luxembourg\",      pop:2400, density:26   },\n  { rank:16, name:\"Paliseul\",        region:\"WA\", province:\"Luxembourg\",      pop:5100, density:31   },\n  { rank:17, name:\"Bertogne\",        region:\"WA\", province:\"Luxembourg\",      pop:2600, density:23   },\n  { rank:18, name:\"Fauvillers\",      region:\"WA\", province:\"Luxembourg\",      pop:2750, density:28   },\n  { rank:19, name:\"Wellin\",          region:\"WA\", province:\"Luxembourg\",      pop:2900, density:31   },\n  { rank:20, name:\"Libramont-Chevigny\", region:\"WA\", province:\"Luxembourg\",   pop:9800, density:38   },\n];\n\n\/\/ Trier par pop croissant et renumeroter\nFLOP20.sort((a,b) => a.pop - b.pop);\nFLOP20.forEach((d,i) => d.rank = i+1);\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   HELPERS\n   \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\nfunction fmt(n) { return n.toLocaleString('fr-BE'); }\n\nfunction regionBadge(r) {\n  const map = { FL:['reg-fl','Flandre'], WA:['reg-wa','Wallonie'], BR:['reg-br','Bruxelles'] };\n  const [cls,lbl] = map[r];\n  return `<span class=\"commune-region ${cls}\">${lbl}<\/span>`;\n}\n\nfunction buildRow(d, mode) {\n  const maxPop = mode==='top' ? TOP20[0].pop : FLOP20[FLOP20.length-1].pop;\n  const pct = mode==='top'\n    ? Math.round(d.pop \/ TOP20[0].pop * 100)\n    : Math.round(d.pop \/ FLOP20[FLOP20.length-1].pop * 100);\n  const barClass = mode==='top' ? 'bar-top' : 'bar-flop';\n  const rankClass = mode==='top' ? 'rank-top' : 'rank-flop';\n\n  return `<tr>\n    <td class=\"rank-cell ${rankClass}\">${d.rank}<\/td>\n    <td class=\"commune-name\">${d.name}${regionBadge(d.region)}<\/td>\n    <td class=\"province-cell hide-sm\">${d.province}<\/td>\n    <td class=\"pop-cell\">\n      <div class=\"pop-bar-wrap\">\n        <div class=\"pop-bar-bg\"><div class=\"pop-bar ${barClass}\" style=\"width:${pct}%\"><\/div><\/div>\n        <span class=\"pop-num\">${fmt(d.pop)}<\/span>\n      <\/div>\n    <\/td>\n    <td class=\"hide-sm align-right\"><span class=\"density-chip\">${fmt(d.density)} \/km\u00b2<\/span><\/td>\n  <\/tr>`;\n}\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   RENDER TABLES\n   \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\ndocument.getElementById('tbody-top').innerHTML  = TOP20.map(d=>buildRow(d,'top')).join('');\ndocument.getElementById('tbody-flop').innerHTML = FLOP20.map(d=>buildRow(d,'flop')).join('');\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   RENDER CHARTS (top\/flop 10)\n   \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\nfunction buildChart(containerId, data, mode) {\n  const container = document.getElementById(containerId);\n  const maxVal = data[0].pop; \/\/ data est d\u00e9j\u00e0 tri\u00e9e\n  const barClass = mode==='top' ? 'bar-top' : 'bar-flop';\n\n  container.innerHTML = data.map(d => {\n    const pct = Math.round(d.pop \/ maxVal * 100);\n    return `<div class=\"horiz-bar\">\n      <div class=\"horiz-bar-label\">\n        <span class=\"lbl\">${d.rank}. ${d.name}<\/span>\n        <span class=\"val\">${fmt(d.pop)} hab.<\/span>\n      <\/div>\n      <div class=\"horiz-bar-track\">\n        <div class=\"horiz-bar-fill ${barClass}\" style=\"width:${pct}%\"><\/div>\n      <\/div>\n    <\/div>`;\n  }).join('');\n}\n\nbuildChart('chart-top',  TOP20.slice(0,10),  'top');\nbuildChart('chart-flop', FLOP20.slice(0,10), 'flop');\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   TABS\n   \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\ndocument.querySelectorAll('.tab-btn').forEach(btn => {\n  btn.addEventListener('click', () => {\n    document.querySelectorAll('.tab-btn').forEach(b => { b.classList.remove('active'); b.setAttribute('aria-selected','false'); });\n    document.querySelectorAll('.panel').forEach(p => p.classList.remove('active'));\n    btn.classList.add('active');\n    btn.setAttribute('aria-selected','true');\n    document.getElementById(btn.dataset.target).classList.add('active');\n  });\n});\n<\/script>\n<\/body>\n<\/html>\n\n","protected":false},"excerpt":{"rendered":"<p>Population des communes belges \u2013 Top 20 \/ Flop 20 | Anabel D\u00e9mographie communale Les communes belges par population Classement des 20 communes les plus peupl\u00e9es et des 20 communes les moins peupl\u00e9es de Belgique, sur les 565 communes que compte le pays au 1er janvier 2025. 565 communes (2025) 11,83 M habitants (2025) 562 [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[5],"tags":[60,41,62],"class_list":["post-524","post","type-post","status-publish","format-standard","hentry","category-autres","tag-chiffres-cles","tag-communes","tag-population"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.anabel.be\/web\/wp-json\/wp\/v2\/posts\/524","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.anabel.be\/web\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.anabel.be\/web\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.anabel.be\/web\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.anabel.be\/web\/wp-json\/wp\/v2\/comments?post=524"}],"version-history":[{"count":3,"href":"https:\/\/www.anabel.be\/web\/wp-json\/wp\/v2\/posts\/524\/revisions"}],"predecessor-version":[{"id":527,"href":"https:\/\/www.anabel.be\/web\/wp-json\/wp\/v2\/posts\/524\/revisions\/527"}],"wp:attachment":[{"href":"https:\/\/www.anabel.be\/web\/wp-json\/wp\/v2\/media?parent=524"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.anabel.be\/web\/wp-json\/wp\/v2\/categories?post=524"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.anabel.be\/web\/wp-json\/wp\/v2\/tags?post=524"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}