📝 Quiche lorraine : recette traditionnelle et conseils pour réussir la pâte brisée et l’appareil.
⏱️ Temps : préparation + cuisson ~55-60 minutes pour 6 personnes.
🍽️ Plat salé emblématique de la cuisine française, simple, convivial et adaptable.
🔑 Astuces pro : cuisson à blanc, ratio œufs/liquide, repos pour un cœur crémeux.
Dans un marché de Nancy baigné par la lumière matinale, un éditeur de site passionné de voyages observe un étal où se côtoient crème fraîche, œufs et lardons fumés. Ce même spectacle se répète dans de nombreuses cuisines familiales : la simplicité des ingrédients se transforme en un plat capable d’évoquer un terroir entier. La quiche lorraine porte la mémoire d’un XVIe siècle où le mot Kuchen a traversé les frontières linguistiques pour devenir symbole d’une tarte salée, rustique et réconfortante.
La recette proposée ici conjugue authenticité et astuces modernes : une pâte brisée croustillante, une cuisson à blanc indispensable, et un appareil où la crème fraîche et le lait se marient aux œufs pour offrir cette texture à la fois ferme et fondante. Les puristes discutent du fromage, mais l’essentiel reste la maîtrise des proportions et la qualité des ingrédients. Ce récit culinaire suit un fil : du marché lorrain à la table conviviale, chaque geste invite au partage et à la transmission.
Quiche lorraine : histoire, origine et authenticité
La naissance de la quiche lorraine remonte au XVIe siècle, dans un duché où les influences germaniques ont façonné la langue culinaire. À l’origine, la migaine — mélange d’œufs et de crème fraîche — était versée sur une pâte à pain, avant que la poitrine fumée n’enrichisse la garniture. Au XIXe siècle, la recette s’est diffusée et s’est imposée comme un classique de la cuisine française, avec Nancy et Metz rivalisant encore aujourd’hui pour la meilleure version.
📜 Origine : XVIe siècle, nom dérivé de Kuchen (allemand) 🕰️
🥓 Éléments d’origine : migaine (œufs + crème), lardons ajoutés plus tard 🔁
🧀 Controverse : fromage ajouté après les années 1950, rejeté par certains puristes ❗
Le fromage est devenu courant après les années 1950, mais les défenseurs de la recette d’origine rappellent que la quiche lorraine était une ode à la migaine. L’ajout de gruyère ou de comté change l’équilibre des textures et intensifie la saveur, ce qui plaît à beaucoup mais déclenche des débats chez les puristes.
⚖️ Tradition vs modernité : choix gustatif et culturel
👵 Transmission familiale : chaque foyer possède sa variante secrète
🌍 Diffusion : la quiche s’est exportée et adaptée à travers le monde
📌 Point
✅ Conséquence
Ajout de fromage
Plus savoureux pour certains, moins authentique pour d’autres 🧀
Lardons fumés
Apportent le caractère fumé ; qualité essentielle 🥓
Recette de quiche lorraine : pâte brisée, garniture et cuisson
La recette ci-dessous vise l’équilibre entre une pâte brisée croustillante et un appareil crémeux. Les proportions conviennent à un moule de 28 cm pour 6 personnes. La clé réside dans le repos de la pâte, la cuisson à blanc et le juste ratio entre œufs et liquide pour obtenir une texture parfaite.
🥧 Pâte : 250 g farine, 125 g beurre froid, 1 œuf, sel, eau froide ❄️
🧂 Assaisonnement : noix de muscade, poivre, sel modéré
🍽️ Ingrédient
Quantité (6 pers)
Pâte brisée (farine)
250 g 🥖
Lardons
200 g 🥓
Œufs
3 🥚
Crème fraîche
20 cl 🥛
Lait
20 cl 🥛
Fromage (optionnel)
100 g gruyère râpé 🧀
Étapes essentielles : préparer rapidement la pâte, la laisser reposer, cuire à blanc 10 + 5 minutes, dorer légèrement. Faire revenir les lardons sans matière grasse, égoutter, puis assembler l’appareil en battant les œufs avec la crème et le lait. Verser, enfourner 25–30 minutes à 180°C et laisser tiédir avant de servir.
Calculateur — Quiche Lorraine
Base de la recette : pour 6 personnes.
Indiquez le nombre de portions souhaitées pour recalculer automatiquement les quantités.
personnes
Ingrédients recalculés
Ingrédient
Quantité totale
Par personne
Modifiez le nombre de portions pour recalculer — valeurs mises à jour automatiquement.
/*
Script JS du calculateur Quiche Lorraine
– Commente chaque étape pour lisibilité.
– Internationalisation : toutes les chaînes en français dans l’objet `STRINGS`.
– Pas de dépendances lourdes.
*/
(function () {
// —– Configuration & textes (facilement éditables) —–
const STRINGS = {
title: ‘Calculateur — Quiche Lorraine’,
baseText: ‘Base de la recette : pour’,
personsLabel: ‘personnes’,
includeCheese: ‘Inclure le fromage (optionnel)’,
copied: ‘Quantités copiées dans le presse-papiers.’,
downloaded: ‘Fichier JSON téléchargé.’,
reset: ‘Réinitialisé aux valeurs de base.’,
noApi: ‘Aucune API externe utilisée.’,
};
// Données de base (fournies)
const BASE_SERVINGS = 6;
// Ingredients: qty = valeur pour BASE_SERVINGS
// unit: g (grammes), cl (centilitres), unit (pièce)
// type: ‘mass’ (g), ‘volume’ (cl), ‘count’ (unités comme œufs)
// optional: s’il s’agit d’un ingrédient optionnel (par ex. fromage)
const BASE_INGREDIENTS = [
{ name: ‘Farine’, qty: 250, unit: ‘g’, type: ‘mass’, optional: false },
{ name: ‘Beurre’, qty: 125, unit: ‘g’, type: ‘mass’, optional: false },
{ name: ‘Œuf (pâte)’, qty: 1, unit: ‘unit’, type: ‘count’, optional: false },
{ name: ‘Lardons’, qty: 200, unit: ‘g’, type: ‘mass’, optional: false },
{ name: ‘Œufs (garniture)’, qty: 3, unit: ‘unit’, type: ‘count’, optional: false },
{ name: ‘Crème fraîche’, qty: 20, unit: ‘cl’, type: ‘volume’, optional: false },
{ name: ‘Lait’, qty: 20, unit: ‘cl’, type: ‘volume’, optional: false },
{ name: ‘Fromage (optionnel)’, qty: 100, unit: ‘g’, type: ‘mass’, optional: true },
];
// —– Utilitaires de formatage —–
// Convertir valeurs métriques pour affichage (g ↔ kg, cl ↔ ml/L)
function formatQuantity(value, unit) {
// value est un nombre (peut être décimal)
if (unit === ‘g’) {
if (Math.abs(value) >= 1000) {
return (value / 1000).toFixed(2).replace(/.00$/, ”) + ‘ kg’;
}
return (Number.isInteger(value) ? value : roundTo(value, 1)) + ‘ g’;
}
if (unit === ‘cl’) {
// afficher en cl ou L si volumineux
if (Math.abs(value) >= 100) {
// 100 cl = 1 L
return (value / 100).toFixed(2).replace(/.00$/, ”) + ‘ L’;
}
return (Number.isInteger(value) ? value : roundTo(value, 1)) + ‘ cl’;
}
if (unit === ‘unit’) {
// unités (œufs) : afficher entier ou décimal selon valeur
return (Number.isInteger(value) ? value : roundTo(value, 2)) + ‘ unité(s)’;
}
// fallback
return (Number.isInteger(value) ? value : roundTo(value, 2)) + ‘ ‘ + unit;
}
function roundTo(num, decimals) {
const p = Math.pow(10, decimals || 0);
return Math.round(num * p) / p;
}
// Règle d’arrondi “intelligent” : on arrondit les œufs à l’entier le plus proche (0.5 → 1)
function roundEggsSmart(val) {
// si valeur très proche d’un entier, retourner entier
const r = Math.round(val);
if (Math.abs(val – r) puis au supérieur si >= .5
return Math.round(val);
}
// —– DOM éléments —–
const root = document.getElementById(‘quiche-calculator’);
const inputServings = root.querySelector(‘#qc-servings’);
const rangeServings = root.querySelector(‘#qc-servings-range’);
const btnDec = root.querySelector(‘#qc-decrease’);
const btnInc = root.querySelector(‘#qc-increase’);
const rowsContainer = root.querySelector(‘#qc-rows’);
const status = root.querySelector(‘#qc-status’);
const includeCheese = root.querySelector(‘#qc-include-cheese’);
const copyBtn = root.querySelector(‘#qc-copy’);
const downloadBtn = root.querySelector(‘#qc-download’);
const resetBtn = root.querySelector(‘#qc-reset’);
// —– Initialisation —–
// Mettre la valeur de base
inputServings.value = BASE_SERVINGS;
rangeServings.value = BASE_SERVINGS;
root.querySelector(‘#qc-base-servings’).textContent = BASE_SERVINGS;
// Fonction principale : recalculer et afficher
function render() {
const desired = Number(inputServings.value) || BASE_SERVINGS;
const factor = desired / BASE_SERVINGS;
const roundingOption = root.querySelector(‘input[name=”qc-round”]:checked’).value;
const includeOptional = includeCheese.checked;
// Mettre à jour le range si changé par nombre
rangeServings.value = desired;
// Construire les lignes
rowsContainer.innerHTML = ”; // clear
// Accessible description
status.textContent = `Calcul pour ${desired} ${STRINGS.personsLabel}.`;
// Pour chaque ingrédient, calculer quantité totale et par personne
BASE_INGREDIENTS.forEach(ing => {
if (ing.optional && !includeOptional) {
// Si optionnel et décoché, ignorer (afficher ligne grisée)
const tr = document.createElement(‘tr’);
tr.innerHTML = `
${ing.name} (optionnel)
—
—
`;
rowsContainer.appendChild(tr);
return;
}
let total = ing.qty * factor;
let perPerson = total / desired;
// Si c’est un compte d’œufs (type ‘count’), appliquer arrondi selon option
if (ing.type === ‘count’) {
if (roundingOption === ‘ceil’) {
total = Math.ceil(total);
} else if (roundingOption === ‘none’) {
// garder décimales (p.ex. 1.5 œuf)
total = roundTo(total, 2);
} else {
// auto
total = roundEggsSmart(total);
}
// perPerson conserve decimals
perPerson = roundTo(total / desired, 2);
} else {
// pour masses/volumes, arrondir à 1 chiffre décimal si nécessaire
total = roundTo(total, 1);
perPerson = roundTo(ing.qty / BASE_SERVINGS, 3); // valeur par personne stable
}
// Formattage convivial
const displayTotal = formatQuantity(total, ing.unit);
const displayPerPerson = formatQuantity(perPerson, ing.unit);
// Créer ligne
const tr = document.createElement(‘tr’);
tr.className = ‘align-top’;
tr.innerHTML = `
${ing.name}
${displayTotal}
${displayPerPerson}
`;
rowsContainer.appendChild(tr);
});
// Mettre attribut ARIA pour indiquer mise à jour
rowsContainer.setAttribute(‘aria-live’, ‘polite’);
}
// —– Événements UI —–
inputServings.addEventListener(‘input’, () => {
// limiter bornes
let v = Number(inputServings.value) || 1;
if (v 50) v = 50;
inputServings.value = v;
render();
});
rangeServings.addEventListener(‘input’, () => {
inputServings.value = rangeServings.value;
render();
});
btnDec.addEventListener(‘click’, () => {
inputServings.value = Math.max(1, Number(inputServings.value) – 1);
render();
});
btnInc.addEventListener(‘click’, () => {
inputServings.value = Math.min(50, Number(inputServings.value) + 1);
render();
});
// Changement options arrondi / inclusion fromage
root.querySelectorAll(‘input[name=”qc-round”]’).forEach(r => r.addEventListener(‘change’, render));
includeCheese.addEventListener(‘change’, render);
// Copier au presse-papiers : texte convivial
copyBtn.addEventListener(‘click’, async () => {
const desired = Number(inputServings.value) || BASE_SERVINGS;
const lines = [`Quiche Lorraine — pour ${desired} ${STRINGS.personsLabel}:`];
const includeOptional = includeCheese.checked;
const roundingOption = root.querySelector(‘input[name=”qc-round”]:checked’).value;
const factor = desired / BASE_SERVINGS;
BASE_INGREDIENTS.forEach(ing => {
if (ing.optional && !includeOptional) return;
let total = ing.qty * factor;
if (ing.type === ‘count’) {
if (roundingOption === ‘ceil’) total = Math.ceil(total);
else if (roundingOption === ‘none’) total = roundTo(total, 2);
else total = roundEggsSmart(total);
} else {
total = roundTo(total, 1);
}
lines.push(`- ${ing.name}: ${formatQuantity(total, ing.unit)}`);
});
const text = lines.join(‘n’);
try {
await navigator.clipboard.writeText(text);
status.textContent = STRINGS.copied;
} catch (e) {
// fallback : sélectionner le texte dans un