Idées déco pour un dîner élégant : inspirez-vous pour une soirée inoubliable

découvrez des idées déco raffinées pour transformer votre dîner en une soirée élégante et mémorable. inspirez-vous de nos astuces et conseils pour créer une ambiance chic et conviviale, qui émerveillera vos invités et rendra votre événement inoubliable.

Un dîner élégant se prépare bien au-delà des plats soigneusement élaborés : la décoration joue un rôle fondamental dans la création d’une atmosphère mémorable. En 2025, les tendances déco usent de créativité et de raffinement pour transformer chaque table en un spectacle visuel. Du tablescaping, véritable art de sublimer la table comme une œuvre d’art, aux choix subtils de couleurs et textures, chaque détail compte pour éblouir vos invités. Que vous optiez pour un thème bohème, vintage ou champêtre, une ambiance cohérente et harmonieuse invite à la convivialité et à l’émerveillement.

Le mariage entre des accessoires soigneusement choisis – issus d’enseignes comme Ferm Living, Maisons du Monde, ou La Redoute Intérieurs – et un éclairage tamisé vient souligner l’élégance de la scène. La vaisselle fine, dénichée chez Zara Home ou IKEA, complétée par des accessoires exclusifs de BoConcept ou Am.pm, transcende le classique. Sans oublier, bien sûr, l’usage de moulins à poivre d’exception pour ce petit plus sensuel qui ravira les sens et enrichira l’expérience culinaire.

Inspirez-vous de ces idées et osez mélanger styles, textures, et couleurs. De la sélection d’un thème puissant au choix de chaque détail, tout devient un jeu d’équilibre et de goût. Vous ne préparez pas seulement une soirée, mais un véritable moment d’exception pour vos convives qui garderont longtemps un souvenir vibrant de votre sens du raffinement.

Comment décorer une table pour un dîner élégant : les secrets du tablescaping inspirant

Le tablescaping est plus qu’une tendance : c’est un langage esthétique pour raconter une histoire unique à travers la décoration de table. Imaginez une composition où chaque élément contribue à un tableau harmonieux, capturant le regard dès l’arrivée de vos invités. La clé commence par le choix d’un thème fédérateur, un fil directeur qui guide l’ensemble.

  • 🌿 Thème bohème : favorisez le lin froissé, les bouquets de fleurs séchées et le macramé pour une ambiance douce et naturelle.
  • 🕯️ Romance vintage : privilégiez la porcelaine ancienne, les chandeliers en laiton et les fleurs aux teintes pastel pour un charme intemporel.
  • 🍃 Ambiance champêtre : misez sur le bois brut, la toile de jute, et intégrez fleurs sauvages et paniers en osier.

Ces univers se construisent grâce à un subtil jeu de couleurs, un savant mélange de textures – nappes en satin ou lin, vaisselle artisanale – et un éclairage chaleureux qui invite à l’échange. La sélection méticuleuse d’éléments de Ferm Living, Am.pm, ou encore La Redoute Intérieurs, vous permettra de composer des tables uniques.

découvrez des idées déco raffinées pour transformer votre dîner en une soirée élégante et mémorable. inspirez-vous des astuces créatives et des tendances pour éblouir vos invités et créer une ambiance unique.
Thème 🎨Matériaux & Textures 🌾Palette de Couleurs 🎨Accessoires clés 🕯️
BohèmeLin froissé, macramé, fleurs séchéesBeige, blanc cassé, rose pâlePhotophores, napperons en dentelle
Vintage RomancePorcelaine ancienne, laiton, veloursRose poudré, bleu ciel, or douxChandeliers, bouquets luxuriants
ChampêtreBois brut, toile de jute, osierVert sauge, beige, marron clairBougies, guirlandes lumineuses

Pour aller plus loin dans le détail du tablescaping et transformer vos événements, découvrez l’expertise de Hōc Diē qui propose des idées innovantes et des collections raffinées pour toutes occasions.

/* Container sizing and scroll for overflow on small viewports */ #deco-compare-container { max-height: 2000px; overflow-x: auto; padding: 1rem; background: #fcf9f4; border: 1px solid #ddd; border-radius: .5rem; font-family: ‘Segoe UI’, Tahoma, Geneva, Verdana, sans-serif; } table.deco-compare-table { border-collapse: separate; border-spacing: 0; width: 100%; min-width: 600px; } thead th { background: #2c3e50; color: white; padding: .75rem 1rem; text-align: center; cursor: pointer; user-select: none; position: relative; } content:  » ▲ »; font-size: 0.8em; } content:  » ▼ »; font-size: 0.8em; } tbody tr:nth-child(odd) { background: #f9f7f2; } tbody td { padding: .5rem 1rem; vertical-align: middle; border-bottom: 1px solid #ddd; } tbody td.url-cell a { color: #0066cc; text-decoration: none; font-weight: 600; } tbody td.url-cell a:hover, tbody td.url-cell a:focus { text-decoration: underline; outline-offset: 2px; } /* Filter input styling */ #deco-filter { margin-bottom: 1rem; max-width: 360px; width: 100%; padding: .5rem .75rem; font-size: 1rem; border: 1px solid #aaa; border-radius: .375rem; } #deco-filter:focus { outline: 2px solid #2c3e50; outline-offset: 2px; } /* Responsive column highlight on hover/focus */ tbody td:focus, tbody tr:hover td { background: #e6f0fa; }
Ce tableau permet de comparer différentes boutiques de décoration selon leur point fort, styles proposés et lien d’accès.
/** * Tableau comparateur interactif pour « Idées déco pour un dîner élégant » * * Fonctionnalités : * – Tri des colonnes par clic (accessible) * – Filtrage dynamique sur tout le contenu du tableau * – Liens cliquables accessibles aux boutiques * – Styles épurés avec Bootstrap CDN * * Internationalisation facile via l’objet i18n ci-dessous. */(() => { // Internationalisable textes const i18n = { filterPlaceholder: « Filtrer par mot-clé… », ariaSortNone: « pas trié », ariaSortAsc: « trié par ordre croissant », ariaSortDesc: « trié par ordre décroissant », linkText: « Visiter », noMatch: « Aucun résultat correspondant. » };// Données à afficher const DATA = { columns: i18n.columns, rows: [ [« Ferm Living », « Design scandinave moderne », « Minimaliste, Naturel », « https://www.fermliving.com »], [« Maisons du Monde », « Variété et originalité », « Boho, Vintage, Champêtre », « https://www.maisonsdumonde.com »], [« Am.pm », « Élégance contemporaine », « Moderne, Luxueux », « https://www.ampm.fr »], [« La Redoute Intérieurs », « Accessibles et tendance », « Chic, Industriel », « https://www.laredoute.fr/interieurs »], [« Zara Home », « Tendance actuelle », « Contemporain, Naturel », « https://www.zarahome.com »] ] };// Références DOM const container = document.getElementById(« deco-compare-container »); const table = container.querySelector(« table.deco-compare-table »); const theadRow = table.querySelector(« thead tr »); const tbody = table.querySelector(« tbody »); const filterInput = container.querySelector(« #deco-filter »);// État tri let sortState = { columnIndex: null, direction: null // ‘asc’, ‘desc’, or null };// Construction dynamique des entêtes avec gestion du tri function buildHeaders() { DATA.columns.forEach((col, i) => { const th = document.createElement(« th »); th.scope = « col »; th.tabIndex = 0; th.textContent = col; th.setAttribute(« aria-sort », i18n.ariaSortNone); if(i === DATA.columns.length – 1){ th.classList.add(« url-header »); } // Activation du tri au clic th.addEventListener(« click », () => sortByColumn(i)); // Activation du tri au clavier (Enter / Space) th.addEventListener(« keydown », e => { if(e.key === « Enter » || e.key ===  » « ) { e.preventDefault(); sortByColumn(i); } }); theadRow.appendChild(th); }); }// Fonction de comparaison générique qui gère URL comme texte sur la dernière colonne function compareValues(a, b, isURL = false) { if (isURL) { // Comparer en ignorant protocole pour naturalité (https://domain.com -> domain.com) const cleanA = a.replace(/^https?:///, «  »).toLowerCase(); const cleanB = b.replace(/^https?:///, «  »).toLowerCase(); return cleanA.localeCompare(cleanB, ‘fr’, { sensitivity: ‘base’ }); } return a.toLowerCase().localeCompare(b.toLowerCase(), ‘fr’, { sensitivity: ‘base’ }); }// Tri par colonne function sortByColumn(colIndex) { const isURLColumn = (colIndex === DATA.columns.length – 1); // Déterminer nouvelle direction if (sortState.columnIndex === colIndex) { if (sortState.direction === « asc ») { sortState.direction = « desc »; } else if (sortState.direction === « desc ») { sortState.columnIndex = null; sortState.direction = null; } else { sortState.direction = « asc »; } } else { sortState.columnIndex = colIndex; sortState.direction = « asc »; } // Actualiser aria-sort sur tous les th const ths = theadRow.querySelectorAll(« th »); ths.forEach((th, idx) => { if(idx === sortState.columnIndex) { th.setAttribute(« aria-sort », sortState.direction === « asc » ? « ascending » : « descending »); } else { th.setAttribute(« aria-sort », i18n.ariaSortNone); } });// Trier les lignes if(sortState.columnIndex !== null) { DATA.rows.sort((r1, r2) => { return sortState.direction === « asc » [colIndex] ? compareValues(r1, r2, isURLColumn)[colIndex] [colIndex] : compareValues(r2, r1, isURLColumn);[colIndex] }); } else { // Reset à l’ordre naturel des données DATA.rows = [ [« Ferm Living », « Design scandinave moderne », « Minimaliste, Naturel », « https://www.fermliving.com »], [« Maisons du Monde », « Variété et originalité », « Boho, Vintage, Champêtre », « https://www.maisonsdumonde.com »], [« Am.pm », « Élégance contemporaine », « Moderne, Luxueux », « https://www.ampm.fr »], [« La Redoute Intérieurs », « Accessibles et tendance », « Chic, Industriel », « https://www.laredoute.fr/interieurs »], [« Zara Home », « Tendance actuelle », « Contemporain, Naturel », « https://www.zarahome.com »] ]; } renderRows(filteredRows()); }// Création des lignes triées et filtrées function renderRows(rows) { tbody.innerHTML = «  »; if (rows.length === 0) { const tr = document.createElement(« tr »); const td = document.createElement(« td »); td.colSpan = DATA.columns.length; td.textContent = i18n.noMatch; td.style.textAlign = « center »; td.style.fontStyle = « italic »; tr.appendChild(td); tbody.appendChild(tr); return; } rows.forEach(row => { const tr = document.createElement(« tr »); row.forEach((cell, i) => { const td = document.createElement(« td »); if(i === DATA.columns.length – 1) { // Cellule URL, insérer un lien accessible td.className = « url-cell »; const a = document.createElement(« a »); a.href = cell; a.textContent = i18n.linkText; a.target = « _blank »; a.rel = « noopener noreferrer »; td.appendChild(a); } else { td.textContent = cell; } tr.appendChild(td); }); tbody.appendChild(tr); }); }// Filtrage des données selon le texte entré function filteredRows() { const filterText = filterInput.value.trim().toLowerCase(); if(filterText === «  ») return DATA.rows; return DATA.rows.filter(row => row.some(cell => cell.toLowerCase().includes(filterText)) ); }// Gestion de l’événement de filtrage en temps réel function onFilterInput() { renderRows(filteredRows()); }// Initialise le tableau function init() { // Texte placeholder traduit filterInput.placeholder = i18n.filterPlaceholder;buildHeaders(); renderRows(DATA.rows);filterInput.addEventListener(« input », onFilterInput); }// Lancement init();})();/* Note : Ce widget ne requiert aucune API externe, données 100% intégrées. Style via Bootstrap 5 CDN à https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css Pas de dépendance JS externe. Performance optimisée et code commenté et accessible (ARIA). Langue : français. */

Jouer avec les couleurs pour une décoration de table élégante et harmonieuse

La couleur est l’âme de votre décoration, elle donne le ton et impulse une émotion immédiate. En 2025, la tendance mêle sophistication et audace en associant des nuances douces à des contrastes puissants. Par exemple :

  • Soirée romantique : rose poudré, lavande, blanc cassé
  • 🌟 Ambiance chic : noir profond, or brillant
  • 🌿 Naturel champêtre : vert sauge, beige, marron doux
  • 🎨 Contrastes audacieux : bleu marine avec jaune moutarde, vert olive avec cuivre

L’harmonie des teintes se doit d’être réfléchie, en s’inspirant de palettes disponibles chez La Bonne Recette ou Nordic Nest. Prenez soin de décliner le choix des couleurs jusqu’aux serviettes, nappes et accessoires pour un rendu absolument maîtrisé.

Ces conseils s’associent parfaitement aux options d’éclairage du BHV Marais ou Leroy Merlin, où des luminaires d’appoint ou des bougies créent une ambiance feutrée indispensable pour une soirée réussie.

/* Conteneur principal */ #colorPalette { max-width: 700px; margin: 1.5rem auto; font-family: « Segoe UI », Tahoma, Geneva, Verdana, sans-serif; user-select: none; } #colorPalette h2 { text-align: center; margin-bottom: 1rem; font-weight: 700; color: #3a3a3a; } /* Grille des cartes couleurs */ .palette-grid { display: grid; grid-template-columns: repeat(auto-fit,minmax(140px,1fr)); gap: 1.2rem; } /* Chaque carte */ .color-card { border-radius: 8px; box-shadow: 0 3px 6px rgb(0 0 0 / 0.1); cursor: pointer; transition: transform 0.18s ease, box-shadow 0.2s ease; display: flex; flex-direction: column; align-items: center; } .color-card:hover, .color-card:focus-visible { transform: translateY(-4px); box-shadow: 0 7px 14px rgb(0 0 0 / 0.18); outline: none; } .color-block { width: 100%; height: 100px; border-radius: 8px 8px 0 0; position: relative; } .color-block.multiple { display: flex; } .color-subblock { flex: 1; } /* Texte */ .color-label { font-weight: 600; font-size: 1.1rem; margin-top: 0.7rem; color: #222222; } .color-usage { font-size: 0.9rem; color: #555555; margin-bottom: 1rem; text-align: center; padding: 0 0.3rem; } /* Zone d’info sélection */ #selectedColorInfo { margin-top: 2rem; border-top: 1px solid #ddd; padding-top: 1rem; font-size: 1rem; color: #444; min-height: 70px; text-align: center; } /* Description accessible */ .sr-only { position: absolute !important; width: 1px !important; height: 1px !important; padding: 0 !important; overflow: hidden !important; clip: rect(0,0,0,0) !important; white-space: nowrap !important; border: 0 !important; }

Palette de couleurs tendance 2025

Sélectionnez une palette de couleurs pour découvrir son usage recommandé

/* Infographie interactive : Palette de couleurs tendance 2025 ————————– Données issues d’un ensemble JSON statique fourni dans la mission.Description des données : { « title »: « Palette de couleurs tendance 2025 », « items »: [ {« label »: « Rose poudré », « color »: « #f4c6d7 », « usage »: « Romantique, doux »}, {« label »: « Noir & Or », « color »: « #000000 / #d4af37 », « usage »: « Soirée chic et glamour »}, {« label »: « Vert Sauge », « color »: « #9caf88 », « usage »: « Ambiance naturelle »}, {« label »: « Jaune Moutarde », « color »: « #d2a53a », « usage »: « Contraste audacieux »} ] } */// Internationalisation : Toutes les chaînes ici facilement modifiables const i18n = { paletteTitle: « Palette de couleurs tendance 2025 », ariaRegionLabel: « Infographie palette de couleurs tendance 2025 », ariaInstructions: « Sélectionnez une palette de couleurs pour découvrir son usage recommandé », usagePrefix: « Usage recommandé : », selectedColorPrefix: « Vous avez sélectionné la palette : », clickToSelect: « Cliquez pour afficher l’usage. », moreColorsLabel: « Palette multicolore », };// Données de la palette const paletteData = { title: i18n.paletteTitle, items: [ { label: « Rose poudré », color: « #f4c6d7 », usage: « Romantique, doux » }, { label: « Noir & Or », color: « #000000 / #d4af37 », usage: « Soirée chic et glamour » }, { label: « Vert Sauge », color: « #9caf88 », usage: « Ambiance naturelle » }, { label: « Jaune Moutarde », color: « #d2a53a », usage: « Contraste audacieux » } ] };// Visé prioritaire : conteneur + zone à renseigner const paletteContainer = document.querySelector(‘#colorPalette .palette-grid’); const infoZone = document.getElementById(‘selectedColorInfo’); const paletteTitleEl = document.getElementById(‘paletteTitle’);paletteTitleEl.textContent = paletteData.title;/** * Crée un élément couleur simple (une couleur unique) * @param {string} label – nom de la couleur * @param {string} color – code couleur HEX (ou similaire) * @param {string} usage – description de l’usage/ambiance * @returns {HTMLElement} */ function createColorCard(label, color, usage) { const card = document.createElement(‘button’); card.className = ‘color-card’; card.type = ‘button’; card.setAttribute(‘role’, ‘listitem’); card.setAttribute(‘aria-label’, `${label}, ${i18n.usagePrefix} ${usage}. ${i18n.clickToSelect}`); card.tabIndex = 0;// Block couleur const block = document.createElement(‘div’); block.className = ‘color-block’; block.style.backgroundColor = color;// Texte label const labelEl = document.createElement(‘p’); labelEl.className = ‘color-label’; labelEl.textContent = label;// Texte usage const usageEl = document.createElement(‘p’); usageEl.className = ‘color-usage’; usageEl.textContent = usage;card.appendChild(block); card.appendChild(labelEl); card.appendChild(usageEl);// Click ou touche clavier (enter/space) card.addEventListener(‘click’, () => { card.focus(); }); card.addEventListener(‘keydown’, e => { if (e.key === ‘Enter’ || e.key === ‘ ‘) { e.preventDefault(); card.click(); } });return card; }/** * Crée un élément couleur multiple (deux couleurs ou plus séparées par « / ») * @param {string} label * @param {string} colorString * @param {string} usage * @returns {HTMLElement} */ function createMultipleColorsCard(label, colorString, usage) { const card = document.createElement(‘button’); card.className = ‘color-card’; card.type = ‘button’; card.setAttribute(‘role’, ‘listitem’); card.setAttribute(‘aria-label’, `${label}, ${i18n.usagePrefix} ${usage}. ${i18n.clickToSelect}`); card.tabIndex = 0;const colors = colorString.split(‘/’).map(c => c.trim());const colorBlock = document.createElement(‘div’); colorBlock.className = ‘color-block multiple’;colors.forEach(c => { const subBlock = document.createElement(‘div’); subBlock.className = ‘color-subblock’; subBlock.style.backgroundColor = c; colorBlock.appendChild(subBlock); });const labelEl = document.createElement(‘p’); labelEl.className = ‘color-label’; labelEl.textContent = label;const usageEl = document.createElement(‘p’); usageEl.className = ‘color-usage’; usageEl.textContent = usage;card.appendChild(colorBlock); card.appendChild(labelEl); card.appendChild(usageEl);card.addEventListener(‘click’, () => { showSelectedColor(label, usage, colors); card.focus(); }); card.addEventListener(‘keydown’, e => { if (e.key === ‘Enter’ || e.key === ‘ ‘) { e.preventDefault(); card.click(); } });return card; }/** * Affiche dans la zone d’info la sélection utilisateur * @param {string} label * @param {string} usage * @param {string[]} colors */ function showSelectedColor(label, usage, colors) { // Nettoyer contenu et créer le rendu accessible infoZone.innerHTML =  »;// Titre const titleEl = document.createElement(‘p’); titleEl.style.fontWeight = ‘700’; titleEl.style.marginBottom = ‘0.5rem’; titleEl.textContent = `${i18n.selectedColorPrefix} ${label}`;// Couleurs affichées côte à côte const colorsContainer = document.createElement(‘div’); colorsContainer.style.display = ‘flex’; colorsContainer.style.justifyContent = ‘center’; colorsContainer.style.gap = ‘0.7rem’; colorsContainer.style.marginBottom = ‘0.5rem’;colors.forEach(c => { const cBlock = document.createElement(‘div’); cBlock.style.width = ’40px’; cBlock.style.height = ’40px’; cBlock.style.borderRadius = ‘6px’; cBlock.style.backgroundColor = c; cBlock.style.border = ‘1px solid #ccc’; colorsContainer.appendChild(cBlock); });// Texte usage const usageEl = document.createElement(‘p’); usageEl.textContent = `${i18n.usagePrefix} ${usage}`;infoZone.appendChild(titleEl); infoZone.appendChild(colorsContainer); infoZone.appendChild(usageEl); infoZone.focus(); }// Initialisation : Création des cartes palette paletteData.items.forEach(item => { // Si plusieurs couleurs séparées par « / », créer un bloc multiple if (item.color.includes(‘/’)) { paletteContainer.appendChild(createMultipleColorsCard(item.label, item.color, item.usage)); } else { paletteContainer.appendChild(createColorCard(item.label, item.color, item.usage)); } });

Créer un centre de table élégant : balance entre audace et discrétion

Le centre de table se doit d’attirer les regards tout en laissant place à la conversation. Sa composition est un exercice d’équilibre entre originalité et sobriété.

  • 🕯️ Bougies et lanternes : les bougies flottantes ou lanternes suspendues génèrent une lumière douce, propice à l’intimité.
  • 💐 Fleurs séchées : très en vogue, elles s’adaptent à tous les styles et confèrent une touche moderne et durable.
  • 📚 Objets personnels : ajoutez un élément qui raconte une histoire, comme un livre ancien ou une petite sculpture.

Pour magnifier les effets, pensez à intégrer un moulin à poivre de prestige sur votre table, avec une sélection proposée à découvrir sur Moulin à Poivre. La présence de cet accessoire allie utilité et raffinement et ne passera pas inaperçue auprès des amateurs de gastronomie.

Élément central 🎯Effet esthétique 🎨Entretien 🧹
Bougies flottantes / LanternesLumière douce et chaudeFacile, nécessite un contrôle régulier
Fleurs séchéesLook moderne et naturelDurable, peu d’entretien
Objets personnelsPersonnalisation uniqueAucune

L’éclairage et les petits détails : les atouts d’une ambiance réussie

Les éclairages tamisés et accessoires minutieusement choisis sont les alliés d’une soirée inoubliable. Créez plusieurs points lumineux doux avec des guirlandes LED, des photophores, ou bien des bougies en cire naturelle, à intégrer dans un univers élaboré avec des articles de Zara Home ou BoConcept.

  • 🌟 Marque-places personnalisés : ils apportent une touche d’élégance et facilitent la convivialité.
  • 🎁 Cadeaux pour invités : petites plantes ou bougies parfumées à ramener, pour prolonger le souvenir de la soirée.
  • 📸 Espace photobooth : un coin photo soigné avec accessoires, idéal pour capturer les instants précieux, comme conseillé sur Partylite.

La lumière dorée et chaude, disponible chez BHV Marais ou Leroy Merlin, viendra parfaire cette mise en scène, créant un cadre où chaque invité se sent privilégié.

Les petits détails, souvent discrètement intégrés, sont la signature d’une soirée réussie et habilement orchestrée.

découvrez des idées déco raffinées pour transformer votre dîner en une soirée élégante et mémorable. inspirez-vous de nos conseils pour créer une ambiance chaleureuse et sophistiquée qui émerveillera vos invités.

FAQ – Idées déco pour un dîner élégant

  1. Quel est l’élément clé pour réussir la décoration d’une table élégante ?
    Le tablescaping offre un équilibre entre thème, textures et éclairage, créant une mise en scène captivante et harmonieuse.
  2. Comment choisir les couleurs pour un dîner chic ?
    Adopter une palette cohérente autour de 2 à 3 couleurs clés, en jouant avec les contrastes subtils comme le noir et l’or ou les pastels doux, garantit une élégance raffinée.
  3. Quels accessoires privilégier pour sublimer la table ?
    Bougies, marque-places personnalisés, fleurs séchées, et un moulin à poivre de luxe sont autant de détails qui enrichissent l’expérience.
  4. Comment adapter la décoration au lieu ?
    Il convient d’analyser les contraintes d’espace et les sources de lumière existantes pour choisir des éléments adaptés sans surcharger le décor.
  5. Comment intégrer un espace photo dans sa soirée ?
    Créez un photobooth avec une toile de fond assortie au thème, quelques accessoires, et utilisez un smartphone sur trépied ou une borne photo pour capturer les instants.

Testez vos connaissances en décoration de table élégante

/** * Quiz interactif – décoration de table élégante * * Données et textes rassemblés pour faciliter l’internationalisation. * Chaque chaîne peut être modifiée pour une autre langue. */// Données du quiz (tableau de questions) // A modifier/étendre facilement par structure identique const quizData = { title: « Testez vos connaissances en décoration de table élégante », questions: [ { question: « Quelle est la tendance déco pour créer une table élégante en 2025 ? », answer: « Tablescaping » }, { question: « Quel matériau est recommandé pour une table bohème ? », answer: « Lin froissé » }, { question: « Quel accessoire ajoute une touche de raffinement gustatif ? », answer: « Moulin à poivre de luxe » } ], texts: { submit: « Valider », restart: « Recommencer », correct: « Bravo ! Vous avez répondu correctement à « , incorrect: « Oops… Vous avez répondu correctement à « , outOf:  » sur « , scoreSummary:  » questions. », questionPrefix: « Question « , ariaSelectedChoice: « Choix sélectionné » } };// Sélecteurs const quizContainer = document.getElementById(« quiz-container »); const quizForm = document.getElementById(« quiz-form »); const submitBtn = document.getElementById(« submit-btn »); const restartBtn = document.getElementById(« restart-btn »); const feedbackEl = document.getElementById(« quiz-feedback »); const quizTitleEl = document.getElementById(« quiz-title »);quizTitleEl.textContent = quizData.title;// Fonction pour créer les questions dans le DOM function buildQuiz() { quizForm.innerHTML = «  »; quizData.questions.forEach((item, qIndex) => { const fieldset = document.createElement(« fieldset »); fieldset.className = « mb-4 »; fieldset.setAttribute(« aria-describedby », `q${qIndex}-desc`);// Question text with numbering, wrapped in legend for accessibility const legend = document.createElement(« legend »); legend.className = « fw-semibold mb-2 »; legend.id = `q${qIndex}-desc`; legend.textContent = `${quizData.texts.questionPrefix}${qIndex + 1} : ${item.question}`; fieldset.appendChild(legend);// Create radio buttons for each choice item.choices.forEach((choice, cIndex) => { const choiceId = `q${qIndex}_choice${cIndex}`;const div = document.createElement(« div »); div.className = « form-check »;const input = document.createElement(« input »); input.className = « form-check-input »; input.type = « radio »; input.name = `question${qIndex}`; input.id = choiceId; input.value = choice; input.required = true; input.setAttribute(« aria-label », `${quizData.texts.ariaSelectedChoice}: ${choice}`);const label = document.createElement(« label »); label.className = « form-check-label »; label.htmlFor = choiceId; label.textContent = choice;div.appendChild(input); div.appendChild(label); fieldset.appendChild(div); });quizForm.appendChild(fieldset); }); // Reset feedback and button states feedbackEl.classList.add(« visually-hidden »); submitBtn.disabled = false; restartBtn.classList.add(« d-none »); }// Fonction pour calculer et afficher le score après soumission function checkAnswers() { let score = 0; let total = quizData.questions.length;const formData = new FormData(quizForm);// Vérifier que chaque question a une réponse choisie for(let i=0; i { const userAnswer = formData.get(`question${i}`); if (userAnswer === item.answer) { score++; } });return score; }// Fonction pour afficher le feedback et désactiver le quiz function displayResult(score) { if(score === null) return; // Si non validéconst total = quizData.questions.length; const success = score === total; feedbackEl.classList.remove(« visually-hidden »); feedbackEl.classList.toggle(« text-success », success); feedbackEl.classList.toggle(« text-danger », !success);if(success) { feedbackEl.textContent = `${quizData.texts.correct}${score}${quizData.texts.outOf}${total}${quizData.texts.scoreSummary}`; } else { feedbackEl.textContent = `${quizData.texts.incorrect}${score}${quizData.texts.outOf}${total}${quizData.texts.scoreSummary}`; }// Désactiver les radios// Modifier boutons submitBtn.disabled = true; restartBtn.classList.remove(« d-none »); restartBtn.focus(); }// Gestionnaires d’événements submitBtn.addEventListener(« click », () => { const score = checkAnswers(); displayResult(score); });restartBtn.addEventListener(« click », () => { buildQuiz(); submitBtn.focus(); });// Initialisation buildQuiz();/* Pas d’appel API externe nécessaire ici – tout est statique. Les données sont intégrées côté front pour 100% gratuité & rapidité.Performance & accessibilité: – Utilisation des balises sémantiques (fieldset, legend) – Feedback audible et visible via aria-live – Pas de dépendance lourde, seulement Bootstrap pour styles légers */

Recommended Articles

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Moulin à Poivre
Privacy Overview

This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.