« Apprenez à créer votre blog de A à Z... dans un monde de douceur et de sucrerie ! 🔮🍬 »
Les Bases
Design & Visuels
Fonctions Magiques
👀 Comment voir le résultat de votre blog en direct ?
Pour tester votre site et voir vos modifications sur votre écran, vous n'avez pas besoin d'être connectées à Internet. Voici la méthode simple.
🖥️ Deux façons de lancer votre site sur votre écran :
La méthode classique (Le double-clic) :
Ouvrez le dossier de votre blog sur votre ordinateur. Faites simplement un double-clic sur le fichier index.html. Votre navigateur internet (Chrome, Safari, Edge) va s'ouvrir tout seul et afficher votre page d'Accueil ! Vous n'avez plus qu'à cliquer sur les boutons du menu pour naviguer sur vos autres pages.
La méthode Live (L'extension VS Code magique) :
Si vous utilisez VS Code, cliquez sur le carré d'icônes à gauche (Extensions), cherchez "Live Server" et cliquez sur Install. Ensuite, faites un clic droit sur votre code et choisissez "Open with Live Server". Votre site s'ouvre sur l'écran et se rafraîchit automatiquement dès que vous modifiez un mot !
🔄 Astuce : Si vous utilisez la méthode classique, n'oubliez pas d'appuyer sur la touche F5 (ou de cliquer sur la flèche qui tourne du navigateur) pour actualiser la page et voir vos nouveaux changements !
📖 Le Dictionnaire du Code (Lexique Anglo-Français)
Faites défiler la boîte ci-dessous pour comprendre les mots anglais du code et savoir quoi modifier !
🎨 Partie CSS (Les styles et décors) :
background-color ➔ Couleur de fond. Changez le code après (ex: #ffffff) pour changer la couleur du fond.
background-image: url('...') ➔ Image de fond. Mettez le nom de votre image entre les guillemets.
font-family ➔ Style d'écriture (la police de caractères).
font-size ➔ Taille du texte. Augmentez ou diminuez les pixels (ex: 18px).
color ➔ Couleur du texte. Gère uniquement la couleur de l'écriture.
width et height ➔ Largeur (Width) et Hauteur (Height) des boîtes ou des photos.
border-radius ➔ Bords arrondis. Plus le chiffre est grand, plus les coins sont ronds.
margin et padding ➔ Les espaces. Margin = espace extérieur, Padding = espace intérieur.
🧱 Partie HTML (Les balises de contenu) :
<header> ➔ L'en-tête. C'est la zone tout en haut pour la grande bannière.
<nav> ou .navbar ➔ Barre de navigation (le menu avec les liens).
<main> et <aside> ➔ Contenu principal (Articles) et Colonne de côté (Profil et Amis).
<a href="..."> ➔ Un lien cliquable. L'adresse se met dans le href.
target="_blank" ➔ Ouvrir dans un nouvel onglet pour ne pas perdre votre blog.
💻 Avant de commencer...
Avant de commencer, vous avez besoin de VS Code ou NotePad, mais je vous recommande fortement VS Code pour sa facilité d'utilisation et les couleurs pour différencier le code !
🚀 Pourquoi VS Code (100% Gratuit) va vous changer la vie :
🎨 La Coloration Magique :
Contrairement au Bloc-notes où tout est noir, VS Code colore vos balises en bleu, vos liens en orange et vos textes en rouge. C'est super facile de s'y retrouver !
✍️ La Fermeture de Balise Automatique :
En code, chaque élément a un début et une fin. Par exemple, si vous écrivez la balise de paragraphe <p>, VS Code tape automatiquement la balise de fermeture </p> à côté pour vous. Plus d'oubli de fermeture !
💾 La Sauvegarde Automatique (Auto-Save) :
Plus besoin de faire "Fichier ➔ Enregistrer" toutes les deux minutes ! Allez simplement dans le menu File (Fichier) tout en haut et cochez l'option Auto Save (Sauvegarde automatique). Vos changements s'enregistrent tout seuls !
🛡️ Le Raccourci de Secours (Ctrl + Z) :
Vous avez effacé un truc par erreur ou fait une bêtise ? Pas de panique ! Appuyez simultanément sur les touches Ctrl + Z (ou Cmd + Z sur Mac) pour annuler votre erreur et faire revenir votre code en arrière comme par magie.
🇫🇷 Traduire le logiciel en Français :
Par défaut, le logiciel s'installe en anglais. Pour le mettre en français, cliquez sur le carré d'icônes à gauche (Extensions), tapez "French" dans la barre de recherche, cliquez sur Install sur le premier résultat et redémarrez. Le logiciel est entièrement en français !
Étape 1 : Le Commencement (Le Squelette Fondateur)
Avant d'ajouter du style ou du texte, chaque page de votre blog doit obligatoirement commencer par copier cette structure de base vide.
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Sweet Paradise</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<!-- Tout le contenu visible de votre page se colle ici -->
</body>
</html>
Étape 2 : Le Fichier de Décoration Unique (`style.css`)
Créez un fichier nommé exactement style.css. Ce modèle centralise l'identité visuelle de votre site. Vous pouvez modifier les codes couleurs indiqués pour personnaliser l'interface.
💡 Conseil Pro : Dans la zone .card { ... } du code ci-dessous, la règle max-width: 800px; margin: 0 auto; est incluse. Cela force tous vos articles à garder exactement cette même largeur élégante et bien centrée au milieu de votre fond d'écran !
💡 Astuce Couleur : Pour obtenir ce même fond ivoire ultra-doux sur vos articles, remplacez la ligne background: rgba(255, 255, 255, 0.95); par background-color: #faf6ec; dans la zone .card { ... } de votre fichier CSS !
Créez un fichier nommé exactement index.html. Ce code affiche le texte de présentation épuré et centré de votre paradis estival.
<header>
<h1>✨ [VOTRE TITRE DE PAGE 'D'ACCUEIL] ✨</h1>
</header>
<nav class="navbar">
<a href="index.html" class="nav-index">Accueil</a>
<a href="blog.html" class="nav-blog">Mon Blog</a>
<a href="livredor.html" class="nav-livredor">Livre d'or</a>
<a href="albums.html" class="nav-albums">Albums</a>
<a href="contact.html" class="nav-contact">Contact</a>
</nav>
<div style="max-width: 850px; width: 95%; margin: 0 auto;">
<main class="card" style="text-align: center;">
<h2>Bienvenue sur mon blog !</h2>
<p>Installez-vous confortablement pour découvrir mon univers ! Cet espace est mon blog personnel pour partager mes plus belles histoires, mes créations et mes passions avec vous tous.</p>
</main>
</div>
<footer></footer>
Étape 4 : Le Blog avec Profil, Scrollbar d'Amis et Pagination (`blog.html`)
Créez un fichier nommé exactement blog.html. Comme il s'agit d'une page vierge, vous avez d'abord besoin du squelette de départ. Remontez à l'Étape 1, copiez son code et collez-le au tout début à la ligne 1. Venez ensuite copier le code ci-dessous et insérez-le à la ligne 11, juste à l'intérieur de vos balises <body>. Il contient vos articles avec les soleils ☀️ à gauche, ainsi que le profil, l'avatar et la liste d'amis déroulante à droite.
<header>
<h1>☀️ TITRE DU BLOG 🍹</h1>
</header>
<nav class="navbar">
<a href="index.html" class="nav-index">Accueil</a>
<a href="blog.html" class="nav-blog">Blog & Amis</a>
<a href="livredor.html" class="nav-livredor">Livre d'or</a>
<a href="albums.html" class="nav-albums">Albums</a>
<a href="contact.html" class="nav-contact">Contact</a>
</nav>
<div style="max-width: 1300px; width: 95%; margin: 0 auto; display: grid; grid-template-columns: 2.2fr 1fr; gap: 30px;">
<main>
<article class="card">
<h2><span class="symbole-soleil">☀️</span>Notre premier après-midi à la plage</h2>
<p>Le soleil tapait fort aujourd'hui ! On a sorti les chapeaux de paille, la crème solaire et on a passé la journée à rigoler près de l'eau. Les vagues étaient parfaites.</p>
</article>
<div class="pagination">
<button class="page-btn">❮ Précédent</button>
<button class="page-btn">Suivant ❯</button>
</div>
</main>
<aside>
<div class="card profil-box">
<img src="avatar.jpg" class="profil-avatar" alt="Moi">
<h3 style="margin: 10px 0 5px 0;">Créatrices de Paradis</h3>
<p style="font-size:0.85rem; margin:0;">Bienvenue dans notre coin de création !</p>
</div>
<div class="card">
<h3>💖 Amis & Favoris</h3>
<div class="zone-amis-scroll">
<div style="margin-bottom:10px;">
<input type="checkbox"> ☀️ <a href="https://example.com" target="_blank" style="color:#ff7675; text-decoration:none; font-weight:bold;">Le Blog de Julie</a>
</div>
<div style="margin-bottom:10px;">
<input type="checkbox"> 🌊 <a href="https://example.com" target="_blank" style="color:#ff7675; text-decoration:none; font-weight:bold;">L'Atelier de Chloé</a>
</div>
</div>
</div>
<div class="card">
<h3>🧩 Vos Widgets</h3>
<p style="font-size:0.9rem; color:#666;">Collez vos widgets ou balises bonus ici !</p>
</div>
</aside>
</div>
<footer></footer>
Étape 5 : La Galerie d'Albums avec Carrousel et Changement de Grille (`albums.html`)
Créez un fichier nommé exactement albums.html. Comme il s'agit d'une page vierge, vous avez d'abord besoin du squelette de départ. Remontez à l'Étape 1, copiez son code et collez-le au tout début à la ligne 1. Venez ensuite copier le code ci-dessous et insérez-le à la ligne 11, juste à l'intérieur de vos balises <body>. Il contient votre vitrine défilante et vos boutons pour changer la taille des images.
Étape 6 : Le Livre d'Or avec Modération Secrète (`livredor.html`) 📖
Créez un fichier nommé exactement livredor.html. Ce code intègre un bouton secret tout en bas pour que seule l'auteure du site puisse activer le mode modération et supprimer des messages !
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Sweet Paradise - Livre d'or</title>
<link rel="stylesheet" href="style.css">
<style>
.form-cadre { border: 2px solid #fab1a0; padding: 20px; border-radius: 12px; background: #fff; margin-bottom: 25px; }
.liste-messages { margin-top: 30px; text-align: left; max-height: 300px; overflow-y: auto; padding-right: 10px; }
.bulle-message { background: #ffe3d1; border-left: 5px solid #ff7675; padding: 15px; border-radius: 8px; margin-bottom: 15px; box-shadow: 0 2px 8px rgba(0,0,0,0.02); }
.bulle-message strong { color: #d63031; display: block; margin-bottom: 5px; }
.bulle-message span { font-size: 0.8rem; color: #777; float: right; }
</style>
</head>
<body id="livredor-page">
<header><h1> TITRE LIVRE DOR </h1></header>
<nav class="navbar">
<a href="index.html" class="nav-index">Accueil</a>
<a href="blog.html" class="nav-blog">Blog & Amis</a>
<a href="livredor.html" class="nav-livredor">Livre d'or</a>
<a href="albums.html" class="nav-albums">Albums</a>
<a href="contact.html" class="nav-contact">Contact</a>
<div style="max-width: 700px; width: 95%; margin: 0 auto;">
<main class="card" style="text-align: center;">
<h2 style="color: #d63031; margin-top: 0;"><span class="symbole-soleil"> </span>Le Livre d'Or</h2>
<p>Laissez-nous un petit souvenir de votre passage dans notre paradis !</p>
<div class="form-cadre">
<form id="formLivre">
<input type="text" id="pseudo" placeholder="Votre prénom / pseudo" style="width:100%; padding:12px; margin-bottom:15px; border:2px solid #ffeaa7; border-radius:8px; box-sizing:border-box;" required>
<textarea rows="4" id="messageTxt" placeholder="Écrivez votre mot doux ici..." style="width:100%; padding:12px; margin-bottom:15px; border:2px solid #ffeaa7; border-radius:8px; box-sizing:border-box;" required></textarea>
<div style="margin-bottom: 15px; display: flex; gap: 10px; justify-content: center;">
<button type="button" style="background-color:#ffeaa7; border:1px solid #fab1a0; padding:8px 15px; border-radius:6px; cursor:pointer; font-weight:bold;" onclick="alert('Option insérer une image');">🖼️ Image</button>
<button type="button" style="background-color:#ffeaa7; border:1px solid #fab1a0; padding:8px 15px; border-radius:6px; cursor:pointer; font-weight:bold;" onclick="alert('Menu Émojis clignotants');">✨ Émojis</button>
</div>
<button type="submit" style="background-color:#ff7675; color:white; border:none; padding:14px; width:100%; border-radius:8px; font-weight:bold; cursor:pointer; font-size:1rem;">Poster sur le livre d'or 💖</button>
</form>
</div>
<div class="liste-messages" id="zoneMessages"></div>
<!-- BOUTON SECRET TOUT EN BAS POUR L'AUTEUR -->
<button type="button" onclick="activerModeAuteur()" style="background:none; border:none; color:#bbb; font-size:0.75rem; margin-top:30px; cursor:pointer;">⚙️ Espace Administration</button>
</main>
</div>
<footer></footer>
<script>
const form = document.getElementById('formLivre');
const zone = document.getElementById('zoneMessages');
let modeAuteurActif = false; // Par défaut, personne ne peut supprimer
let messagesSauvegardes = JSON.parse(localStorage.getItem('messagesParadise')) || [];
afficherMessages();
form.addEventListener('submit', function(e) {
e.preventDefault();
const pseudoInput = document.getElementById('pseudo').value;
const messageInput = document.getElementById('messageTxt').value;
const dateActuelle = new Date().toLocaleDateString('fr-FR');
const nouveauMsg = { pseudo: pseudoInput, texte: messageInput, date: dateActuelle };
messagesSauvegardes.unshift(nouveauMsg);
localStorage.setItem('messagesParadise', JSON.stringify(messagesSauvegardes));
afficherMessages();
form.reset();
});
// LE BOUTON SECRET VÉRIFIE LE MOT DE PASSE DE L'AUTEUR
function activerModeAuteur() {
const mdp = prompt("Entrez le mot de passe Auteur pour gérer les messages :");
if (mdp === "glace") { // Tu peux changer "glace" par le mot de passe de ton choix !
modeAuteurActif = true;
alert("Mode Auteur activé ! Vous pouvez maintenant supprimer les messages.");
afficherMessages();
} else {
alert("Mot de passe incorrect.");
}
}
function afficherMessages() {
zone.innerHTML = '';
messagesSauvegardes.forEach((msg, index) => {
const bulle = document.createElement('div');
bulle.className = 'bulle-message';
// Si le mode auteur est activé, on fabrique le bouton supprimer
let boutonSuppr = '';
if (modeAuteurActif) {
boutonSuppr = `<br><button onclick="supprimerMessage(${index})" style="background:none; border:none; color:#d63031; font-size:0.8rem; cursor:pointer; padding:0; margin-top:10px; font-weight:bold;">❌ Supprimer ce message</button>`;
}
bulle.innerHTML = `<span>Le ${msg.date}</span><strong>✍️ ${msg.pseudo} a écrit :</strong> ${msg.texte}${boutonSuppr}`;
zone.appendChild(bulle);
});
}
function supprimerMessage(index) {
if (confirm("Voulez-vous vraiment supprimer ce message ?")) {
messagesSauvegardes.splice(index, 1);
localStorage.setItem('messagesParadise', JSON.stringify(messagesSauvegardes));
afficherMessages();
}
}
</script>
</body>
</html>
Étape 7 : Le Formulaire de Contact personnalisé (`contact.html`)
Le module de fermeture propre pour vous écrire des messages ou projets en privé.
Étape 8 : Mettre Votre Blog ou Site en ligne sur le Net avec Netlify ! 🚀
Voici la méthode la plus rapide et 100% gratuite au monde pour ouvrir votre site à toute la Terre, sans écrire une seule ligne de code.
🌍 Le Guide de mise en ligne ultra-simple :
1. Préparer le dossier :
Rassemblez vos 5 fichiers HTML, votre fichier style.css et toutes vos images dans un seul et même dossier.
2. Créer un compte GRATUIT (Mode Free) :
Allez sur netlify.com, créez votre compte en choisissant le plan "Free" (Gratuit). Aucune carte bancaire n'est demandée !
3. Le Glisser-Déposer magique :
Une fois connectées, allez sur ://netlify.com et glissez votre dossier dans le carré au milieu de l'écran.
📊 Combien d'images peut-on stocker par mois ?
Le mode Gratuit vous donne droit à 100 Go de trafic par mois. Cela représente plus de 200 000 images affichées par mois ! Une place immense pour toutes vos créations.
Étape 9 : Mettre votre Blog en ligne gratuitement 🚀
Pour que tout le monde puisse visiter votre site sur Internet, vous devez l'héberger. Voici les deux meilleures plateformes gratuites et ultra-rapides au choix :
⚡ Méthode 1 : Netlify (Glisser-Déposer Rapide)
Netlify est une plateforme très populaire qui offre 100 Go de trafic par mois (environ 30 000 visites). Vous déposez votre dossier et votre blog est en ligne avec un lien sécurisé.
👉 Comment faire : Créez un compte gratuit sur Netlify.com, allez dans l'onglet Sites, puis glissez et déposez simplement le dossier complet de votre blog dans la zone de téléchargement. Votre site s'allume en 3 secondes !
🚀 Méthode 2 : Vercel (L'Alternative Ultra-Rapide)
Vercel offre également 100 Go de trafic gratuit, mais gère encore mieux les gros albums de photos panoramiques et propose des serveurs d'une vitesse incroyable.
👉 Comment faire : Créez un compte "Hobby" gratuit sur Vercel.com, cliquez sur le bouton Add New Project, puis glissez votre dossier de blog à l'écran. Vous obtenez instantanément votre adresse web !
💬 Un bug, une question ou besoin d'aide ?
Si vous bloquez sur une étape d'hébergement ou si vous voulez partager vos liens en direct, rejoignez-nous sur notre forum d'entraide officiel ! C'est l'endroit parfait pour peaufiner vos sites ensemble.
Étape 10 : La Boîte à Widgets magiques de l'été ! 🧸✨
Voici les vrais sites modernes pour ajouter des effets (objets qui tombent, curseurs fun, calendriers) et surtout où coller les codes sans rien casser !
📍 Règle d'or : Où colle-t-on les codes ?
• Les effets sur l'écran (Curseur, pluie d'émojis) : Le code doit être copié-collé tout en bas de vos fichiers HTML (ex: blog.html), juste avant la balise de fermeture </body>.
• Les gadgets de la colonne droite (Calendrier) : Cherchez la ligne <h3>🧩 Vos Widgets</h3> dans votre fichier HTML et collez le code reçu juste en dessous !
🌊 1. Faire tomber des feuilles de palmier ou des soleils (Effet de neige)
Pour faire pleuvoir des émojis (☀️, 🌴, 🍦) sur votre écran, le site le plus simple et moderne est CodePen.io. Tapez simplement "CSS falling emojis" ou "JS snow effect emoji" dans leur barre de recherche pour récupérer un mini-code Javascript de 5 lignes gratuit et prêt à copier !
🖱️ 2. Modifier la souris pour y mettre un curseur d'été
Pour remplacer la flèche de la souris de vos amies par une petite image fun (comme un petit soleil), allez sur le catalogue gratuit RealWorld Cursor Library ou Custom Cursor. Téléchargez un curseur au format .cur ou une image .png (maximum 32x32 pixels) et ajoutez cette ligne dans votre style.css :
body { cursor: url('votre-petit-soleil.png'), auto; }
📅 3. Ajouter un calendrier de vacances
Allez sur le site gratuit Webmeest ou BookWidgets. Créez votre petit calendrier ou votre horloge, personnalisez la couleur en rouge corail pour aller avec votre thème, copiez le code fourni (qui commence par <iframe...>) et collez-le sous votre titre de widget !
🍦 Cette fois-ci, pas de fantôme du passé ! Tous ces sites sont en ligne et prêts à booster!
🍦 Gadget: Faire pleuvoir des Crèmes Glacées ! 🍦
Ce code bonus est un script indépendant. Vous n'avez pas besoin de créer un nouveau fichier ! Ouvrez le fichier de la page où vous voulez voir la magie opérer (comme index.html ou blog.html). Descendez tout en bas de votre code, cherchez la toute dernière balise de fermeture </body> et collez-y le code magique ci-dessous juste avant elle. Vos petits sundaes, gelatos et cupcakes se mettront à tomber instantanément sur votre écran !
<script>
// CONFIGURATION DE LA PLUIE DE GLACES
const emojix = ['🍦', '🍧', '🍨', '🧁', '🍦']; // Vos parfums favoris !
const nombreDeGlaces = 15; // Nombre de glaces sur l'écran en même temps
for (let i = 0; i < nombreDeGlaces; i++) {
creerUneGlace();
}
function creerUneGlace() {
const glace = document.createElement('div');
glace.innerText = emojix[Math.floor(Math.random() * emojix.length)];
glace.style.position = 'fixed';
glace.style.top = '-50px';
// Éparpille les glaces au hasard sur toute la largeur de l'écran
glace.style.left = Math.random() * window.innerWidth + 'px';
// Donne une taille aléatoire aux glaces (entre 16px et 35px)
glace.style.fontSize = (Math.random() * 20 + 16) + 'px';
glace.style.zIndex = '9999';
glace.style.pointerEvents = 'none'; // Empêche de bloquer les clics sur le site
glace.style.userSelect = 'none';
document.body.appendChild(glace);
// Vitesse de chute au hasard pour chaque glace
const vitesse = Math.random() * 3 + 2;
let positionY = -50;
function tomber() {
positionY += vitesse;
glace.style.top = positionY + 'px';
// Si la glace touche le bas de l'écran, elle remonte magiquement tout en haut
if (positionY > window.innerHeight) {
positionY = -50;
glace.style.left = Math.random() * window.innerWidth + 'px';
}
requestAnimationFrame(tomber);
}
tomber();
}
</script>
Étape 11 : Personnaliser et positionner vos barres de défilement (`Scrollbars`) 🎛️
Ouvrez votre fichier de styles nommé exactement style.css. Descendez tout en bas du fichier et collez-y le code de base ci-dessous pour programmer l'apparence de vos barres. Découvrez ensuite comment appliquer cette zone déroulante sur vos éléments et apprenez à la positionner précisément dans votre mise en page.
✨ Démonstration d'une Scrollbar Cocktail d'été
Contenu déroulant de test :
Faites défiler ce bloc pour observer la scrollbar personnalisée couleur Pêche. Vous pouvez y glisser du texte long, une série d'images alignées ou des listes de liens hypertextes.
Ce module s'adapte automatiquement à la hauteur maximale impartie en bloquant le débordement de page.
Fin du test de défilement.
/* STRUCTURE GENERALE POUR RENDRE UN ELEMENT DEROULANT */
.ma-zone-deroulante {
max-height: 250px; /* Bloque la hauteur maximale (Ajustez les px selon vos besoins) */
overflow-y: auto; /* Active le défilement vertical si le texte/image dépasse */
overflow-x: hidden; /* Masque le défilement horizontal inutile */
padding-right: 10px; /* Espace de sécurité pour que le texte ne colle pas à la barre */
}
/* DECORATION DE LA BARRE (Pour les navigateurs Chrome, Safari, Edge) */
.ma-zone-deroulante::-webkit-scrollbar {
width: 8px; /* Épaisseur de la barre verticale */
}
.ma-zone-deroulante::-webkit-scrollbar-track {
background: #f7f1e3; /* Couleur de la glissière de fond (ici Vanille) */
border-radius: 4px;
}
.ma-zone-deroulante::-webkit-scrollbar-thumb {
background: #ffb142; /* Couleur de la barrette mobile (ici Pêche) */
border-radius: 4px;
}
.ma-zone-deroulante::-webkit-scrollbar-thumb:hover {
background: #ccff00; /* Couleur au survol de la souris (ici Lime) */
}
⚙️ Guide de positionnement de votre zone déroulante
Pour appliquer ce défilement, vous devez ajouter la classe class="ma-zone-deroulante" sur le bloc HTML de votre choix (comme une balise <div> ou <aside>). Selon l'emplacement désiré, voici l'organisation structurelle à suivre dans votre fichier HTML :
🔝 En haut de la page : Placez votre bloc déroulant directement au début de la balise <main>, juste au-dessus de vos articles principaux. Idéal pour un bandeau d'annonces ou une ligne d'images de présentation.
🔙 En bas de la page : Insérez votre bloc tout à la fin de votre conteneur principal, juste avant la balise de fermeture </main> ou juste au-dessus du <footer>. Parfait pour un historique ou des mentions légales compactes.
⬅️ Dans la colonne de gauche / ➡️ Droite : Si votre site utilise une disposition en grilles (comme la page de blog), vous pouvez déplacer ou ajouter une colonne. Pour l'installer à gauche, placez la balise <aside> contenant votre scrollbar avant la balise <main> dans votre code HTML. Pour la laisser à droite, placez la balise <aside>après la balise <main>.
💡 En résumé : Le CSS gère l'apparence de la scrollbar, mais c'est l'ordre de vos balises dans le fichier HTML qui détermine sa position physique sur l'écran !
Étape 12 : Les Effets Spéciaux & Modules Avancés 🚀✨
Ouvrez le fichier HTML de la page de votre choix (comme index.html ou blog.html) pour y ajouter vos gadgets. Utilisez les boutons d'aperçu pour tester chaque effet en direct avant de copier son code !
🎵 1. Le Bouton Musique MP3 Estival
Ce module permet d'ajouter une musique de fond d'ambiance que les visiteurs peuvent lancer ou couper d'un simple clic sur un bouton stylisé.
<!-- À COLLER DANS VOTRE HTML (OÙ VOUS LE SOUHAITEZ) -->
<button class="btn-music" onclick="toggleMusic()">▶️ Lancer l'ambiance 🌊</button>
<audio id="monAudio" src="ma-musique.mp3" loop></audio>
<!-- CODE JAVASCRIPT À METTRE TOUT EN BAS AVANT </body> -->
<script>
function toggleMusic() {
const audio = document.getElementById('monAudio');
if (audio.paused) { audio.play(); } else { audio.pause(); }
}
</script>
📣 2. Le Bandeau de Texte Défilant
Idéal pour annoncer une nouveauté ou souhaiter la bienvenue avec un texte dynamique qui traverse l'écran de droite à gauche.
<!-- À COLLER DANS VOTRE HTML (EN HAUT DE PAGE PAR EXEMPLE) -->
<div style="background: #ffb142; padding: 10px; color: white; font-weight: bold;">
<marquee scrollamount="5">☀️ Écrivez votre message d'alerte ici ! 🌴</marquee>
</div>
📊 3. Compteur de Visites & Connectés
Affichez le nombre total de personnes venues visiter le site et le nombre d'utilisateurs connectés en même temps.
🟢 En ligne :3 amies
📈 Visites totales :1 428
📌 Note technique importante : Un site HTML gratuit ne possède pas de mémoire générale pour compter les humains du monde entier. Pour avoir un vrai chiffre qui augmente à chaque visiteur, il faut coller un mini-widget gratuit en 2 clics depuis des sites spécialisés comme Compteurdevisite.com ou FreeCounterStat. Ils vous fournissent un code <a href="..."><img...></a> à coller directement dans votre colonne de widgets !
⚓ 4. Le Menu Vertical Flottant (Fixé sur le côté)
Ce code permet de bloquer un petit menu d'accès rapide sur le côté de l'écran. Même si le visiteur descend tout en bas de la page (scrolle), le menu reste fixé au même endroit de son écran !
🎨 Étape A : La programmation du style (CSS)
Ce premier morceau est du code de style CSS. N'ouvrez pas votre page internet ! Ouvrez plutôt votre fichier de design nommé exactement style.css. Descendez tout en bas de ce fichier, créez une nouvelle ligne vide, et collez-y le bloc de code ci-dessous :
/* À AJOUTER DANS VOTRE FICHIER STYLE.CSS */
.menu-flottant-cote {
position: fixed; /* S'ancre sur l'écran et ne bouge plus au scroll */
top: 50%; /* Se place au milieu de la hauteur */
right: 20px; /* Se colle à 20px du bord droit (Mettez left pour le mettre à gauche !) */
transform: translateY(-50%);
background: white;
padding: 15px;
border-radius: 12px;
display: flex;
flex-direction: column; /* Aligne les boutons de haut en bas en colonne vertical */
gap: 10px;
box-shadow: 0 4px 15px rgba(0,0,0,0.1);
z-index: 9999; /* Reste toujours par-dessus tout le reste du site */
}
🧱 Comment déplacer ou inverser vos modules (Le Guide Ultime)
Pour déplacer un élément (mettre le profil en bas, les amis en haut, ou changer une colonne), il existe deux méthodes professionnelles selon ce que vous souhaitez faire :
1. La méthode HTML (Changer l'ordre vertical) :
Ouvrez votre fichier HTML. Chaque module est enfermé dans un bloc <div class="card">...</div>. C'est l'ordre de vos lignes de haut en bas qui décide de l'empilement à l'écran, exactement comme des boules sur un cornet de glace !
🍦 L'exemple du Cornet de Glace :
• Par défaut, vos lignes de code se suivent comme ceci :
1. 🍦 Boule Vanille ➔ (Le bloc Profil s'affiche en haut)
2. 🍓 Boule Fraise ➔ (Le bloc Amis s'affiche au milieu)
3. 🍫 Boule Chocolat ➔ (Le bloc Widgets s'affiche en bas)
➔ Si vous préférez manger le Chocolat en premier :
Sélectionnez tout le bloc de code de la boule Chocolat (de sa balise <div> à sa fermeture </div>), faites Couper, et allez la Coller tout en haut, juste au-dessus de la Vanille !
2. La méthode CSS (Inverser la gauche et la droite) :
Si vous voulez déplacer des colonnes entières (par exemple, faire passer les articles à droite et les widgets à gauche), vous n'avez pas besoin de toucher au code HTML ! Ouvrez votre fichier style.css, cherchez la zone de la grille .container { ... } et ajoutez simplement cette règle magique :
.container {
display: grid;
grid-template-columns: 2.2fr 1fr;
gap: 30px; direction: rtl; /* 🔄 AJOUTEZ CETTE LIGNE ! */
}
💡 Comment ça marche ?direction: rtl; signifie "Right to Left" (de droite à gauche). L'ordinateur va automatiquement prendre la colonne de droite et la jeter à gauche de l'écran, comme par magie, sans casser vos blocs !
Étape 13 : Ajouter des Écritures Spéciales (Polices de texte) ✍️✨
Voici la méthode professionnelle pour changer le style d'écriture de votre blog grâce au catalogue gratuit Google Fonts.
🎨 Comment changer votre style d'écriture en 3 étapes :
1. Choisir son écriture :
Allez sur le site officiel gratuit ://google.com et choisissez celle qui vous plaît !
2. Lier l'écriture à vos fichiers HTML :
Copiez les lignes de code fournies et collez-les tout en haut de vos fichiers HTML.
3. Activer l'écriture dans votre style.css :
Ouvrez votre fichier style.css et appliquez le nom donné par Google à la ligne font-family.
💻 Exemple complet pour installer l'écriture "Pacifico" :1. Dans la zone <head> de vos fichiers HTML, collez ces 3 lignes : <link rel="preconnect" href="https://googleapis.com"> <link rel="preconnect" href="https://gstatic.com" crossorigin> <link href="https://googleapis.com/css2?family=Pacifico&display=swap" rel="stylesheet">
2. Dans votre fichier style.css, appliquez l'écriture :
body { font-family: 'Pacifico', cursive;
}
Étape 14 : Créer un Forum Standard Simplifié (`forum.html`) 💬
Créez un tout nouveau fichier vierge sur votre ordinateur et nommez-le exactement forum.html. Copiez ensuite l'intégralité du code ci-dessous et collez-le directement à l'intérieur de ce nouveau fichier. Il contient l'assemblage complet de votre forum avec sa bannière, son arrière-plan personnalisé et ses catégories thématiques d'exemple.
🏛️ BIENVENUE SUR NOTRE FORUM D'ENTRAIDE (EXEMPLE)
📢 Zone d'Apprentissage
💬 Questions HTML & CSS Le coin pour poser vos questions, corriger vos balises et partager vos codes de test.
🎨 Graphisme & Design Partagez vos bannières Sweet Candy, vos avatars et demandez des avis sur vos designs !
☕ Communaute
💬 Le Coin Bla-bla Pour papoter de tout et de rien, se détendre entre amies et s'encourager.
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Notre Forum Communautaire</title>
<style>
body { font-family: Arial, sans-serif; margin: 0; padding: 0; background-color: #f4f7f6; color: #333; }
.forum-container { max-width: 1000px; width: 95%; margin: 30px auto; }
.forum-header { background-color: #ffb142; color: white; padding: 40px 20px; text-align: center; border-radius: 8px; font-size: 1.5rem; font-weight: bold; }
.forum-category { background: white; border: 2px solid #ff7675; border-radius: 8px; margin-top: 25px; overflow: hidden; box-shadow: 0 4px 12px rgba(0,0,0,0.05); }
.category-title { background-color: #ff7675; color: white; padding: 12px 15px; font-weight: bold; font-size: 1.1rem; }
.forum-row { display: flex; justify-content: space-between; align-items: center; padding: 15px; border-bottom: 1px solid #eee; transition: 0.2s; }
.forum-row:hover { background-color: #fff9db; }
.row-info a { color: #d63031; text-decoration: none; font-weight: bold; font-size: 1.05rem; }
.row-info p { margin: 5px 0 0 0; font-size: 0.88rem; color: #666; }
.row-stats { font-size: 0.85rem; color: #777; text-align: right; line-height: 1.4; }
</style>
</head>
<body>
<div class="forum-container">
<header class="forum-header"> Exemple Forum de base </header>
<div class="forum-category">
<div class="category-title"> Zone d'Apprentissage</div>
<div class="forum-row">
<div class="row-info">
<a href="#">💬 Questions HTML & CSS</a>
<p>Le coin pour poser vos questions, corriger vos balises et partager vos codes de test.</p>
</div>
<div class="row-stats"><strong>15</strong> Sujets<br><strong>64</strong> Messages</div>
</div>
<div class="forum-row">
<div class="row-info">
<a href="#">🎨 Graphisme & Design</a>
<p>Partagez vos bannières Sweet Candy, vos avatars et demandez des avis sur vos designs !</p>
</div>
<div class="row-stats"><strong>8</strong> Sujets<br><strong>32</strong> Messages</div>
</div>
</div>
<div class="forum-category">
<div class="category-title"> Communauté</div>
<div class="forum-row">
<div class="row-info">
<a href="#">💬 Le Coin Bla-bla</a>
<p>Pour papoter de tout et de rien, se détendre entre amies et s'encourager.</p>
</div>
<div class="row-stats"><strong>24</strong> Sujets<br><strong>112</strong> Messages</div>
</div>
<div class="forum-row">
<div class="row-info">
<a href="#"> Gourmandises & Recettes</a>
<p>Partagez vos meilleures recettes, idées de desserts et astuces cuisine !</p>
</div>
<div class="row-stats"><strong>8</strong> Sujets<br><strong>32</strong> Messages</div>
</div>
<div class="forum-row">
<div class="row-info">
<a href="#">✂️ Brico & Créations</a>
<p>Vos projets manuels, trucs de bricolage et ateliers faits maison.</p>
</div>
<div class="row-stats"><strong>5</strong> Sujets<br><strong>14</strong> Messages</div>
</div>
<div class="forum-row">
<div class="row-info">
<a href="#">🎲 Bric-à-Brac</a>
<p>Jeux, blagues, hors-sujet et tout le reste des petits délires !</p>
</div>
<div class="row-stats"><strong>9</strong> Sujets<br><strong>21</strong> Messages</div>
</div>
</div>
</div>
</body>
</html>
Étape 15 : Le Module "Quoi de neuf ?" (Statuts en direct) ⚡
📌 Note de cours — Objectif de l'exercice :
Nous allons implémenter un flux d'activité dynamique. Ce module interactif permet aux utilisatrices de soumettre instantanément une mise à jour textuelle (humeur, statut, notification de débogage) qui viendra s'insérer au sommet de la pile d'affichage en temps réel.
📂 Emplacement cible dans votre projet :
Ce composant d'ingénierie logicielle s'intègre exclusivement au sein de votre page de discussion. Veuillez ouvrir votre fichier de travail nommé précisément forum.html.
⚡ Quoi de neuf dans la communauté ?
• Julie : Je viens de corriger mes balises de tableaux ! 💻 (Il y a 5 min)
• Sarah : Je teste mon tout premier image . (Il y a 20 min)
<!-- ==========================================================================
PARTIE A : L'ARCHITECTURE VISUELLE (HTML)
==========================================================================
Instructions : Insérez ce bloc dans forum.html, juste au-dessus du conteneur de vos catégories. -->
<div class="box-statuts">
<h3>⚡ Quoi de neuf dans l'équipe ?</h3>
<form id="formStatut" onsubmit="ajouterStatutRapide(event)">
<input type="text" id="statutTxt" placeholder="Votre humeur les filles... (ex: Bug résolu ! )" required>
<button type="submit">Partager </button>
</form>
<div id="fluxStatuts" class="flux-style">
<p id="statutVide" style="margin:0; color:#888;">Aucun statut pour le moment. Soyez la première !</p>
</div>
</div>
<!-- ==========================================================================
PARTIE B : LA MISE EN PAGE ESTHÉTIQUE (CSS)
==========================================================================
Instructions : Insérez ces règles de style dans le fichier global style.css tout en bas. -->
<style>
.box-statuts { background: white; border: 2px solid #ff7675; padding: 20px; border-radius: 8px; margin-bottom: 25px; text-align: left; }
.box-statuts h3 { color: #d63031; margin-top: 0; font-size: 1.1rem; }
.box-statuts input { width: 70%; padding: 8px; border: 2px solid #ffeaa7; border-radius: 6px; font-size: 0.9rem; }
.box-statuts button { background: #ff7675; color: white; border: none; padding: 8px 15px; border-radius: 6px; cursor: pointer; font-weight: bold; font-size: 0.9rem; margin-left: 5px; }
.flux-style { margin-top: 15px; font-size: 0.95rem; line-height: 1.6; border-left: 3px solid #ccff00; padding-left: 10px; }
.item-statut { margin-bottom: 5px; border-bottom: 1px dashed #eee; padding-bottom: 5px; }
</style>
<!-- ==========================================================================
PARTIE C : LA COMPOSANTE LOGIQUE (JAVASCRIPT)
==========================================================================
Instructions : À positionner tout en bas de forum.html, immédiatement avant la balise fermante </body>. -->
<script>
function ajouterStatutRapide(evenement) {
evenement.preventDefault(); // Annule le rechargement natif de la page lors de la soumission
const inputTxt = document.getElementById('statutTxt');
const flux = document.getElementById('fluxStatuts');
const msgVide = document.getElementById('statutVide');
if (!inputTxt || !flux) return;
// Si le conteneur affiche le message d'absence de contenu, nous l'extrayons du DOM
if (msgVide) { msgVide.remove(); }
// Génération dynamique du nouvel élément de liste
const nouvelleLigne = document.createElement('div');
nouvelleLigne.className = 'item-statut';
nouvelleLigne.innerHTML = '• <strong>Visiteur :</strong> ' + inputTxt.value + ' <span style="font-size:0.8rem; color:#888;">(À l\'instant)</span>';
// Insertion du nouvel élément en tête du flux logique (insertBefore)
flux.insertBefore(nouvelleLigne, flux.firstChild);
inputTxt.value = ''; // Réinitialisation du champ de saisie
}
</script>
Étape 16 : Les Boutons de Commande du Forum (`Buttons`) 🎛️⚡
📌 Note de cours — Directives d'intégration CSS :
Les propriétés graphiques ci-dessous définissent la mécanique visuelle tridimensionnelle des interfaces de commande (effets de relief pseudo-3D au clic).
📂 Fichier cible et méthode de positionnement :
Ce bloc de code est du CSS pur. Pour l'installer, n'ouvrez pas vos pages HTML. Ouvrez exclusivement votre feuille de style principale nommée exactement style.css. Faites défiler le document jusqu'au bas de la page, créez un espace propre, et collez-y l'intégralité du code de la boîte noire.
🍦 Aperçu de vos boutons en relief 3D (Cliquez dessus !) :
/* 🎨 STYLE CSS DES BOUTONS EN RELIEF 3D (À METTRE DANS VOTRE STYLE) */
.btn-forum-standard {
background-color: #ffb142; /* Couleur Pêche par défaut */
color: white;
border: none;
padding: 10px 20px;
font-weight: bold;
border-radius: 6px;
cursor: pointer;
/* L'effet de relief 3D du bas (Ombre solide de 4px) */
box-shadow: 0 4px 0 #cc8e35;
transition: all 0.05s ease;
}
/* L'EFFET AU SURVOL (La souris passe dessus) */
.btn-forum-standard:hover {
background-color: #ccff00; /* Devient couleur Lime au survol */
color: #2d3436;
box-shadow: 0 4px 0 #99cc00;
}
/* L'EFFET AU CLIC (Le bouton s'enfonce physiquement sous le doigt !) */
.btn-forum-standard:active {
transform: translateY(4px); /* Descend de 4 pixels */
box-shadow: none; /* L'ombre du dessous s'écrase complètement */
}
Étape 17 : Personnaliser les Arrière-plans des Modules (`Backgrounds`) 🎨🖼️
📌 Note de cours — Gestion des textures et designs :
Les propriétés d'arrière-plan (dégradés, superpositions de couleurs et images en mosaïque) permettent d'isoler visuellement vos sections de lecture tout en renforçant l'identité graphique du site.
📂 Fichier cible et méthode de positionnement :
Ces instructions appartiennent à votre charte de style graphique (code CSS). Vous devez ouvrir votre fichier de design nommé précisément style.css. Naviguez tout en bas de ce document et collez-y l'intégralité du code disponible dans la boîte noire ci-dessous.
🍦 Exemple visuel d'une boîte habillée
🎨 Effet calque : Ce bloc utilise une couleur de fond translucide (couleur Pêche douce) superposée par-dessus une texture pour garder le texte lisible. C'est le secret des designs professionnels !
/* 🎨 OPTIONS À AJOUTER DANS LE SÉLECTEUR DE VOTRE CHOIX (ex: .card ou .forum-category) */
/* OPTION A : Couleur unie simple */
.mon-module {
background-color: #ffeaa7; /* Remplacez par le code couleur de votre choix */
}
/* OPTION B : Dégradé de couleurs moderne */
.mon-module {
background: linear-gradient(135deg, #ffb142, #ffeaa7); /* S'étend en diagonale */
}
/* OPTION C : Image de fond texturée (Motif, étoiles, etc.) */
.mon-module {
background-image: url('votre-image-de-fond.png');
background-size: auto; /* 'auto' répétè le motif, 'cover' étire l'image en grand */
background-position: center; /* Centre l'image dans le module */
background-repeat: repeat; /* Répète le motif comme du papier peint */
}
/* OPTION BONUS : Fond de couleur semi-transparent (Idéal pour lire par-dessus une image) */
.mon-module {
background-color: rgba(255, 255, 255, 0.85); /* Blanc opaque à 85%. Le texte reste hyper net ! */
}
⚙️ Comment appliquer ces fonds sur vos modules ?
Pour habiller un endroit précis de votre site (un article, une catégorie de forum, la colonne profil), cherchez le mot correspondant dans votre fichier style.css et insérez la ligne de votre choix entre les accolades { ... } :
📦 Modifier les boîtes blanches (Articles / Profil) : Ajoutez votre ligne de fond à l'intérieur du bloc .card { ... }. Cela s'appliquera instantanément sur toutes les cartes du site.
🏛️ Modifier les sections du forum standard : Ajoutez votre règle à l'intérieur du bloc .forum-category { ... } ou .forum-row { ... } pour personnaliser le fond des salons de discussion.
✨ Astuce lisibilité : Si vous mettez une image de fond très sombre ou très colorée dans un module, pensez à changer la couleur de son texte en écrivant color: white; pour que l'écriture reste parfaitement visible !
Étape 18 : Ajouter un Module d'Abonnement unique (`Newsletter`) ✉️
📌 Note de cours — Objectif de l'exercice :
Nous allons concevoir un formulaire de capture d'adresses électroniques. Ce module permet de recueillir les coordonnées de vos visiteuses grâce à des balises d'entrée (<input>) et de soumission (<form>), associées à un retour d'expérience visuel instantané.
📂 Fichier cible et consignes d'intégration :
Ce code est de l'architecture HTML. Pour l'implémenter, ouvrez le fichier de la page où vous souhaitez voir le formulaire (par exemple votre page d'accueil index.html ou votre colonne latérale dans blog.html). Collez l'intégralité du code de la boîte noire directement à l'endroit désiré dans le corps de votre document.
💌 Rejoignez notre Communauté !
Abonnez-vous pour recevoir nos alertes de tutoriels, nos codes bonus et nos nouveautés informatiques.
⚙️ Où et comment installer votre bloc d'Abonnement ?
Pour choisir l'emplacement exact de votre module de Newsletter sur l'écran, ouvrez votre fichier HTML (comme blog.html) et déplacez tout le bloc de code selon vos préférences :
🔝 Tout en haut (Au-dessus des articles) : Ouvrez votre fichier HTML, allez dans la zone centrale et collez l'intégralité du bloc d'abonnement tout au début de la balise <main>, juste au-dessus de votre tout premier article.
🔙 Tout en bas (Au-dessus du footer) : Allez tout à la fin de votre conteneur principal, et collez le bloc juste avant la balise de fermeture de votre contenu </main> ou juste au-dessus de la bannière du bas <footer>.
🧱 Dans la colonne de côté (À gauche ou à droite) : C'est l'emplacement classique le plus élégant ! Ouvrez votre fichier HTML, descendez dans la colonne latérale <aside>. Cherchez la ligne du titre <h3>🧩 Vos Widgets</h3> et collez simplement le bloc d'abonnement juste en dessous.
💡 Note magique de l'Académie : Ce formulaire enregistre les e-mails localement pour la démonstration technique. Pour envoyer de vrais e-mails automatiques à vos fans sans devoir coder un serveur complexe, il vous suffira de lier votre formulaire à un service pro comme Substack ou MailerLite. Vous pouvez aussi utiliser un outil gratuit comme Blogtrottr, qui se connecte au flux RSS de votre site pour alerter automatiquement vos abonnés par e-mail dès qu'un nouvel article sort !
Étape 19 : Les Boutons de Réseaux Sociaux Clignotants 📱✨
📌 Note de cours — Anatomie d'un composant hybride :
Pour réaliser ce module, nous combinons l'architecture de structure (HTML) et la mécanique d'interaction (CSS) via la pseudo-classe :hover. Cela permet de déclencher une métamorphose visuelle (changement de couleur et effet d'échelle) au survol du curseur.
📂 Répartition des blocs dans vos fichiers :
Attention, ce module exige une manipulation dans deux fichiers distincts. La Partie A (HTML) doit être collée dans le fichier de votre page (comme la colonne latérale de votre blog.html). La Partie B (CSS) doit impérativement être ajoutée tout en bas de votre feuille de design globale nommée style.css.
Passez votre souris sur les icônes pour les voir briller :
<!-- ==========================================================================
PARTIE A : L'ARCHITECTURE VISUELLE (A COLLER DANS VOTRE PAGE HTML)
==========================================================================
Instructions : Insérez ce bloc dans la colonne latérale <aside> de votre fichier (ex: blog.html) -->
<div class="block-reseaux">
<h3>✨ Rejoignez-nous !</h3>
<div class="liste-icones">
<a href="VOTRE_INSTAGRAM" target="_blank" class="icone-social">📸</a>
<a href="VOTRE_PINTEREST" target="_blank" class="icone-social">📌</a>
<a href="VOTRE_TIKTOK" target="_blank" class="icone-social">🎵</a>
</div>
</div>
<!-- ==========================================================================
PARTIE B : LES RÈGLES D'INTERACTION (A COLLER DANS VOTRE STYLE.CSS)
==========================================================================
Instructions : Ajoutez ces règles à la toute fin de votre fichier style.css pour animer les icônes -->
.block-reseaux { text-align: center; }
.liste-icones { display: flex; gap: 15px; justify-content: center; margin-top: 10px; }
.icone-social {
display: inline-block; width: 50px; height: 50px; line-height: 50px;
border-radius: 50%; background-color: #ffb142; /* Votre couleur Pêche par défaut */
color: white; font-size: 1.3rem; text-decoration: none;
transition: all 0.3s ease; box-shadow: 0 4px 10px rgba(0,0,0,0.05);
}
/* L'effet au survol : s'agrandit et s'illumine en Lime */
.icone-social:hover {
background-color: #ccff00; color: #2d3436;
transform: scale(1.15); /* Effet zoom clignotant */
box-shadow: 0 6px 15px rgba(204, 255, 0, 0.4);
}
Étape 20 : Le Bouton de Retour en Haut Volant (`Back to Top`) 🔝✈️
📌 Note de cours — Gestion de la navigation ancrée :
Ce module utilise le positionnement fixe (position: fixed) pour détacher un élément du flux standard et le bloquer sur l'écran. Il sollicite l'interface de programmation du navigateur (l'API window.scrollTo) pour ordonner un défilement fluide via la propriété behavior: 'smooth'.
📂 Dispatching chirurgical de vos codes :
Ce composant utilise trois technologies différentes. La Partie A (HTML) et la Partie C (JavaScript) doivent être insérées dans votre fichier de page (ex: tout en bas de index.html ou blog.html, juste avant la balise </body>). La Partie B (CSS) doit quant à elle être ajoutée tout en bas de votre document de styles global style.css.
La petite flèche est ancrée en bas à droite de l'écran simulé ➔
<!-- ==========================================================================
PARTIE A : LA STRUCTURE VISUELLE (HTML)
==========================================================================
Instructions : À coller tout en bas de votre fichier (ex: index.html ou blog.html), juste avant la balise </body> -->
<button class="bouton-remonter" onclick="remonterEnHaut()">▲</button>
<!-- ==========================================================================
PARTIE B : LA CHARTE GRAPHIQUE (CSS)
==========================================================================
Instructions : À insérer tout en bas de votre fichier style.css pour fixer la flèche en bas à droite -->
.bouton-remonter {
position: fixed;
bottom: 30px; right: 30px; /* Se positionne de façon volante en bas à droite */
width: 45px; height: 45px;
background-color: #00ced1; /* Couleur Aqua */
color: white; border: none; border-radius: 50%;
font-size: 1.2rem; font-weight: bold; cursor: pointer;
box-shadow: 0 4px 12px rgba(0,0,0,0.15);
z-index: 9999; /* Reste toujours au-dessus des images et textes */
transition: 0.2s;
}
.bouton-remonter:hover {
background-color: #ccff00; color: #2d3436; /* Devient Lime au survol */
transform: scale(1.1);
}
<!-- ==========================================================================
PARTIE C : LA LOGIQUE DE DÉPLACEMENT (JAVASCRIPT)
==========================================================================
Instructions : À positionner tout en bas de votre fichier HTML, juste avant votre balise de fermeture </body> -->
<script>
function remonterEnHaut() {
window.scrollTo({
top: 0,
behavior: 'smooth' /* Active la glissade fluide et douce vers le haut */
});
}
</script>
📌 Note de cours — Choix de votre interface de navigation :
Pour maximiser l'accessibilité de votre site, nous divisons cet exercice en deux options d'intégration indépendantes. Choisissez l'Option A si vous disposez d'illustrations graphiques hébergées, ou optez pour l'Option B si vous préférez une solution instantanée sans aucune image système.
📂 Emplacement cible dans votre code :
Peu importe l'option choisie, le code doit être collé tout en bas de votre fichier de page (ex: index.html ou blog.html), immédiatement avant la balise de fermeture </body>. L'affichage se bloquera automatiquement sur le bord droit de l'écran.
Rendu Option A (Avec vos Images)
Rendu Option B (Avec vos Symboles)
🖼️ Option A : Utiliser vos propres images de flèches
Copiez le code ci-dessous et insérez-le tout en bas de votre fichier HTML. Il vous suffira de remplacer les adresses d'exemples par les liens URL de vos propres graphismes :
⚡ Option B : Solution rapide avec symboles (Sans aucune image)
Si vous ne possédez pas de fichiers graphiques, utilisez cette alternative autonome. Elle génère de jolis boutons circulaires colorés directement gérés par le navigateur :
Étape 21 : Verrouiller votre site & Activer l'Anti-Clic droit 🔒🛡️
📌 Note de cours — Introduction à la cybersécurité client :
Nous allons explorer les mécanismes d'interception d'événements et de persistance des données. L'anti-clic droit écoute l'événement système contextmenu pour bloquer l'accès aux ressources. Le verrouillage exploite la mémoire de session (sessionStorage) pour valider l'authentification de vos utilisatrices sans encombrer leur navigation.
📂 Fichiers cibles et consignes de déploiement :
Ces deux modules sont des scripts JavaScript autonomes. La Protection 1 (Anti-Clic) s'installe tout en bas de vos fichiers juste avant la balise </body>. La Protection 2 (Le Magnifique Rideau de Verrouillage) s'installe tout en haut, juste après l'ouverture de votre balise <body> pour cacher le blog derrière un bel arrière-plan personnalisable.
🛡️ 1. Activer l'Anti-Clic Droit (Protéger vos images)
Ce script désactive le menu contextuel de la souris sur l'ensemble de votre document pour empêcher les visiteurs d'extraire vos illustrations ou vos textes d'apprentissage.
<!-- À COLLER TOUT EN BAS DE VOS PAGES HTML (JUSTE AVANT </body>) -->
<script>
document.addEventListener('contextmenu', function(evenement) {
evenement.preventDefault(); // Intercepte et annule l'ouverture du menu contextuel natif
alert("🔒 Attention : Les images et textes de ce site sont protégés !");
});
</script>
🔐 2. Créer un accès privé avec Rideau Opaque et Mémoire
Ce système déploie un rideau occultant total au chargement de la page. Le blog reste invisible tant que le mot de passe n'est pas correct. Vous pouvez personnaliser l'arrière-plan avec une couleur ou l'URL d'une image de votre choix !
<!-- À COLLER TOUT EN HAUT, JUSTE APRÈE LA BALISE <body> DE VOS PAGES -->
<!-- 🎨 DESIGN PERSONNALISABLE : Changez "background-color" par "background-image: url('lien_image.jpg'); background-size: cover;" pour un fond illustré -->
<div id="rideauVerrouillageCandy" style="position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: #faf6ec; z-index: 999999; display: flex; flex-direction: column; align-items: center; justify-content: center; font-family: sans-serif; text-align: center; color: #2d3436; padding: 20px; box-sizing: border-box;">
<div style="background: rgba(255, 255, 255, 0.98); backdrop-filter: blur(5px); padding: 40px; border-radius: 20px; border: 3px solid #00ced1; max-width: 420px; width: 100%; box-shadow: 0 10px 30px rgba(0,0,0,0.06);">
<span style="font-size: 3.5rem; display: block; margin-bottom: 15px;">🔒</span>
<h3 style="margin-top: 0; color: #00ced1; font-size: 1.6rem;">Espace Privé VIP</h3>
<p style="font-size: 0.95rem; color: #666; margin-bottom: 25px; line-height: 1.6;">
Ce site est privé. Veuillez entrer la clé secrète de la communauté pour lever le rideau et accéder au blog :
</p>
<input type="password" id="cleSaisieVIP" placeholder="Mot de passe secret..." style="width: 100%; padding: 12px; border: 2px solid #faf6ec; background: #faf6ec; border-radius: 10px; outline: none; font-size: 1.1rem; font-weight: bold; margin-bottom: 20px; box-sizing: border-box; text-align: center;">
<button onclick="validerConnexionVIP()" style="background: #00ced1; color: white; border: none; padding: 14px; border-radius: 10px; font-weight: bold; font-size: 1.05rem; cursor: pointer; width: 100%; box-shadow: 0 5px 15px rgba(0,206,209,0.25);">🔓 Déverrouiller l'accès</button>
</div>
</div>
<script>
const motDePasseOfficiel = "000000"; // Mot de passe d'accès standard pour vos amies
function verifierSecuriteDemarrage() {
const rideau = document.getElementById("rideauVerrouillageCandy");
if (!rideau) return;
// Le système vérifie si le visiteur a déjà validé son mot de passe pour cette session
if (sessionStorage.getItem("blogCandyVerrouille") === "valide") {
rideau.style.display = "none"; // Disparaît instantanément s'il a déjà son badge !
} else {
rideau.style.display = "flex"; // Reste fermé pour protéger le contenu du site
}
}
function validerConnexionVIP() {
const saisie = document.getElementById("cleSaisieVIP").value.trim();
const rideau = document.getElementById("rideauVerrouillageCandy");
if (saisie === motDePasseOfficiel) {
// Enregistre le jeton d'accès dans le sessionStorage (mémoire de l'onglet actif)
sessionStorage.setItem("blogCandyVerrouille", "valide");
alert("✨ Accès accordé ! Bienvenue.");
if (rideau) rideau.style.display = "none";
} else {
alert("❌ Clé incorrecte. Veuillez réessayer.");
}
}
verifierSecuriteDemarrage();
</script>
💡 Mode d'emploi : Comment créer un blog secret entre copines ?
Le secret du confort : Pour éviter que vos copines ne perdent patience en devant retaper le mot de passe secret à chaque fois qu'elles changent d'article ou tournent une page, ce code utilise le sessionStorage (la mémoire de l'onglet actif).
🌸 Comment ça se passe pour vos amies ?
Lorsqu'elles arrivent sur votre blog, le grand rideau d'accueil se déploie et cache tout votre contenu. Elles tapent le mot de passe secret une seule fois. Le navigateur internet s'en souvient immédiatement : elles peuvent alors lire tous vos articles et naviguer sur le site en toute liberté sans jamais être bloquées à nouveau. Le cadenas magique se refermera automatiquement dès qu'elles fermeront leur onglet ou leur navigateur !
Étape 22 : Créer l'Éditeur d'Articles (Avancé ou Pro) 📝🎨
📌 Note de cours — Où va ce code de rédaction ?
Attention règle d'or : Cet éditeur d'articles ne doit PAS être collé sur votre page d'accueil (index.html) ni sur votre blog public ! Si vous le mettez là, vos visiteurs verront vos boutons d'administration.
📂 Fichier cible et consignes de sécurité :
Pour créer votre espace de rédaction secret, ouvrez votre éditeur et créez un tout nouveau fichier verbe nommé exactement ecrire.html (votre panneau d'administration privé). Copiez le code de la boîte noire ci-dessous, et collez-le tout en bas de ce nouveau fichier, juste avant la toute dernière balise de fermeture </body>.
🚀 Choix 1 : L'Éditeur Avancé Maison
Un éditeur complet fait maison pour vos membres : choix de la page, champ de titre, options En ligne ou En attente (Brouillon), bouton d'Aperçu, réglage des polices, des couleurs et édition HTML.
📌 Envoi vers :🔒 Statut :
✍️ Titre de l'article :
Sélectionnez votre texte pour tester toutes vos options avancées préférées !
<!-- ==========================================================================
PROFIL DE CONFIGURATION — CHOIX 1 : L'ÉDITEUR AVANCÉ MAISON (HTML)
========================================================================== -->
<div class="box-avancee">
<div style="background: #ffe3d1; padding: 10px; display: flex; gap: 10px;">
<select id="selectPageDestination">
<option value="accueil">🏡 Accueil</option>
<option value="blog">📝 Blog</option>
</select>
<select id="selectStatut">
<option value="enligne">🟢 En ligne</option>
<option value="enattente">⏳ En attente (Brouillon)</option>
</select>
</div>
<input type="text" id="titreArticle" placeholder="Titre de votre article..." style="width:100%; margin-top:10px; padding:8px;">
<div class="barre-outils" style="margin-top:10px;">
<button onclick="document.execCommand('bold')">B</button>
<button onclick="document.execCommand('italic')">I</button>
<button onclick="document.execCommand('underline')">U</button>
<button onclick="if(confirm('Vider ?')) { document.getElementById('zoneEcriture').innerHTML=''; document.getElementById('titreArticle').value=''; }">🗑️ Vider</button>
<button onclick="basculerModeHtml()"></> HTML</button>
</div>
<div id="zoneEcriture" contenteditable="true" style="border:1px solid #ccc; min-height:150px; padding:10px; background:white; margin-top:10px; outline:none;"></div>
<div style="margin-top: 10px; text-align: right;">
<button onclick="ouvrirApercuFenetreModal()" style="background:#ffb142; color:white; padding:8px 16px; border:none; border-radius:4px; font-weight:bold; cursor:pointer;">👁️ Aperçu</button>
<button onclick="enregistrerLeScriptArticle()" style="background:#ff7675; color:white; padding:8px 20px; border:none; border-radius:4px; font-weight:bold; cursor:pointer;">💾 Sauvegarder</button>
</div>
</div>
<!-- MOTEUR DE TRAITEMENT DES FLUX ET COMPRESSION LOCALE (JAVASCRIPT) -->
<script>
function enregistrerLeScriptArticle() {
const cible = document.getElementById("selectPageDestination").value;
const statut = document.getElementById("selectStatut").value;
const titre = document.getElementById("titreArticle").value;
const texte = document.getElementById("zoneEcriture").innerHTML;
if(!titre) { alert("❌ Veuillez entrer un titre !"); return; }
const optionsDate = { day: 'numeric', month: 'long', year: 'numeric' };
const dateAujourdhui = new Date().toLocaleDateString('fr-FR', optionsDate);
const articleFormate = `
<div class="entete-article" style="border-bottom:2px solid #eee; padding-bottom:5px; margin-bottom:10px;">
<h3 style="color:#ffb142; margin:0;">${titre} ${statut === 'enattente' ? '<span style="color:orange;font-size:0.8rem;">[En attente]</span>' : ''}</h3>
<small style="color:#999;">📅 Publié le ${dateAujourdhui}</small>
</div>
<div class="corps-article">${texte}</div>
`;
let baseDonnees = JSON.parse(localStorage.getItem("articlesSauvegardes")) || [];
baseDonnees.unshift({ destination: cible, statut: statut, contenu: articleFormate });
localStorage.setItem("articlesSauvegardes", JSON.stringify(baseDonnees));
if(statut === "enattente") {
alert("⏳ Enregistré En attente (Brouillon) ! L'article est mis de côté de façon invisible.");
} else {
alert("🟢 Enregistré En ligne ! Votre article est visible on the blog.");
}
}
</script>
👑 Choix 2 : L'ÉDITEUR PRO PREMIUM (TinyMCE Externe)
L'infrastructure logicielle TinyMCE complète avec son chargement asynchrone, sa bibliothèque d'émojis native et ses polices vectorielles intégrées.
<!-- ==========================================================================
PROFIL DE CONFIGURATION — CHOIX 2 : L'ÉDITEUR TIERS INTEGRÉ (TINYMCE)
========================================================================== -->
<!-- Chargement du noyau logique via le serveur de secours de l'Academie -->
<script src="https://jsdelivr.net" referrerpolicy="origin"></script>
<textarea id="monTextePro"></textarea>
<!-- Initialisation de la console d'écriture pro -->
<script>
tinymce.init({
selector: '#monTextePro',
plugins: 'link image code emoticons lists',
toolbar: 'undo redo | fontfamily fontsize | bold italic underline forecolor | alignleft aligncenter alignright | bullist numlist | link image emoticons | code removeformat',
font_family_formats: 'Arial=arial; Courier New=courier; Georgia=georgia; Impact=impact; Verdana=verdana',
menubar: false,
statusbar: false,
height: 250
});
</script>
Étape 23 : Créer le Tableau de Bord de Gestion des Articles 🗂️🔍
📌 Note de cours — Gestion dynamique des listes (Algorithmique) :
Ce panneau introduit les concepts de filtrage conditionnel et de mutation d'état. Le script extrait votre tableau d'articles du stockage local (localStorage), analyse chaque chaîne de caractères via la méthode includes(), puis reconstruit dynamiquement l'interface d'administration.
🔒 📂 Fichier cible & Sécurité absolue en ligne (Netlify) :
Nouvelle page à créer ! Ouvrez votre éditeur de code, créez un tout nouveau fichier vierge sur votre ordinateur et nommez-le exactement ecrire.html (votre panneau d'administration privé).
⚠️ Note de l'Académie concernant l'hébergement : Soyez totalement rassurées ! Même lorsque votre site sera publié officiellement sur internet (par exemple sur Netlify), ce panneau restera 100 % invisible et privé. Comme vous ne mettrez aucun bouton public vers ecrire.html sur votre accueil, personne ne connaîtra cette adresse. De plus, le code utilise la mémoire interne (localStorage) : si un intrus tape l'adresse par hasard, sa console sera complètement vide, car il ne peut pas voir les articles stockés sur votre propre ordinateur !
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Console d'Administration - Gestion</title>
<link rel="stylesheet" href="style.css">
</head>
<body id="admin-page" style="background:#faf6ec; padding:20px; font-family:sans-serif;">
<!-- LE CODE DU PANNEAU DE TRI GESTION -->
<div style="background:white; padding:25px; border-radius:12px; max-width:1000px; margin:20px auto; border:2px solid #ffeaa7; color:#2d3436; box-shadow:0 4px 15px rgba(0,0,0,0.03);">
<h3 style="margin-top:0; color:#ffb142; font-size:1.4rem;">🗃️ Tableau de Bord — Gestion de vos Articles</h3>
<!-- 1. Barre de recherche -->
<div style="margin-bottom:20px;">
<input type="text" id="barreRecherche" oninput="filtrerLesArticles()" placeholder="🔍 Rechercher un titre d'article..." style="width:100%; padding:10px; border:2px solid #ffeaa7; border-radius:6px; outline:none; font-size:1rem; box-sizing:border-box;">
</div>
<!-- 2. Les boutons de Tri -->
<div style="display:flex; gap:10px; margin-bottom:20px;">
<button onclick="changerFiltre('tous')" style="cursor:pointer; padding:8px 16px; background:#fff; border:2px solid #eee; border-radius:6px; font-weight:bold;">📁 Tous les articles</button>
<button onclick="changerFiltre('enligne')" style="cursor:pointer; padding:8px 16px; background:#fff; border:2px solid green; color:green; border-radius:6px; font-weight:bold;">🟢 En ligne</button>
<button onclick="changerFiltre('enattente')" style="cursor:pointer; padding:8px 16px; background:#fff; border:2px solid orange; color:orange; border-radius:6px; font-weight:bold;">⏳ En attente (Brouillons)</button>
</div>
<div id="zoneAdminArticles" style="display:flex; flex-direction:column; gap:12px;"></div>
</div>
<script>
let triActif = "tous";
function filtrerLesArticles() {
const barre = document.getElementById("barreRecherche");
const liste = document.getElementById("zoneAdminArticles");
if (!barre || !liste) return;
const mot = barre.value.toLowerCase();
liste.innerHTML = "";
let articles = JSON.parse(localStorage.getItem("articlesSauvegardes")) || [];
articles.forEach(function(art, index) {
const divTemp = document.createElement("div");
divTemp.innerHTML = art.contents || art.contenu;
const titre = divTemp.querySelector("h3") ? divTemp.querySelector("h3").innerText.toLowerCase() : "";
if ((triActif === "tous" || art.statut === triActif) && titre.includes(mot)) {
const bloc = document.createElement("div");
bloc.style.cssText = "background:#faf6ec; padding:15px; border-radius:8px; display:flex; justify-content:space-between; align-items:center; border-left:6px solid " + (art.statut === 'enligne' ? 'green' : 'orange') + "; border-top:1px solid #eee; border-right:1px solid #eee; border-bottom:1px solid #eee;";
let boutonTexte = art.statut === 'enligne' ? '📁 Mettre Hors ligne' : '🚀 Publier';
let badgeStatut = art.statut === 'enligne' ? '🟢 En ligne' : '⏳ En attente';
bloc.innerHTML = '<div><strong style="font-size:1.05rem;">' + titre.toUpperCase() + '</strong><br><small style="color:#666; font-weight:bold;">📬 CLASSEMENT : ' + art.destination.toUpperCase() + ' | STATUT : ' + badgeStatut + '</small></div><button onclick="basculerStatut(' + index + ')" style="cursor:pointer; background:#ffb142; border:none; color:white; padding:8px 16px; border-radius:6px; font-weight:bold; box-shadow:0 3px 0 #cc8e35;">' + boutonTexte + '</button>';
liste.appendChild(bloc);
}
});
}
function changerFiltre(statut) {
triActif = statut;
filtrerLesArticles();
}
function basculerStatut(index) {
let base = JSON.parse(localStorage.getItem("articlesSauvegardes")) || [];
if(base[index]) {
base[index].statut = base[index].statut === "enligne" ? "enattente" : "enligne";
localStorage.setItem("articlesSauvegardes", JSON.stringify(base));
alert("🔄 Statut de l'article mis à jour avec succès !");
filtrerLesArticles();
}
}
// Lancement automatique du filtrage initial lors du premier affichage de la console
document.addEventListener("DOMContentLoaded", function() {
filtrerLesArticles();
});
</script>
</body>
</html>
Étape 24 : Comptes Membres & Réservation de Pseudonymes 🛡️✨
📌 Note de cours — Algorithme de vérification d'identité :
Nous mettons en place un système de contrôle d'accès par jetons de sécurité. Le script enregistre les identités dans un dictionnaire global au sein du localStorage. Lors de la soumission d'un formulaire, une boîte de dialogue (prompt) intercepte la saisie pour valider l'authenticité de l'auteure et rejeter toute tentative d'usurpation d'identité.
📂 Dispatching des fonctions dans vos fichiers :
Ce code est scindé en deux composants logiques. Le script numéro 1 (Réservation) doit être placé sur votre espace de gestion privé (ecrire.html). Le script numéro 2 (Contrôle anti-intrus) doit être inséré dans le fichier de votre espace de discussion public (par exemple, tout en bas de votre fichier livredor.html, juste avant la balise </body>).
🔒 Espace d'Enregistrement Sécurisé
📝 1. Réserver un Pseudo
Créez votre identité unique et verrouillez-la avec un code PIN secret.
💬 2. Tester l'usurpation
Essayez de poster un message dans le livre d'or avec un nom réservé !
💬 Flux des messages de la communauté Candy :
Aucun message posté pour le moment.
<!-- SCRIPT DE RÉSERVATION ET DE VÉRIFICATION DES PSEUDOS -->
<script>
// 1. FONCTION DE CRÉATION DE COMPTE (À METTRE SUR LA PAGE PROFIL OU ADMIN)
function reserverMonPseudonyme() {
const pseudoSaisi = document.getElementById("inputPseudoReg").value.trim();
const pinSaisi = document.getElementById("inputPinReg").value.trim();
if (pseudoSaisi === "" || pinSaisi.length !== 4) {
alert("❌ Veuillez entrer un pseudo et un code PIN valide à 4 chiffres !");
return;
}
let registreComptes = JSON.parse(localStorage.getItem("comptesMembres")) || {};
// Vérifie si le pseudo est déjà pris par une autre amie
if (registreComptes[pseudoSaisi.toLowerCase()]) {
alert("🔒 Désolé, ce pseudonyme est déjà réservé par une autre membre !");
return;
}
// Enregistre le pseudo (en minuscule pour éviter les triches de majuscules) et son PIN
registreComptes[pseudoSaisi.toLowerCase()] = pinSaisi;
localStorage.setItem("comptesMembres", JSON.stringify(registreComptes));
alert("👑 Félicitations ! Le pseudo '" + pseudoSaisi + "' est désormais verrouillé avec votre code secret.");
}
// 2. FONCTION DE CONTRÔLE DE SÉCURITÉ (À INTÉGRER AU BOUTON D'ENVOI DU LIVRE D'OR / COMMENTAIRES)
function validerEtEnvoyerMessageDuGroupe() {
const pseudoAuteur = document.getElementById("inputPseudoPost").value.trim();
const messageContenu = document.getElementById("inputMessagePost").value.trim();
if (pseudoAuteur === "" || messageContenu === "") { alert("❌ Remplissez les champs !"); return; }
let registreComptes = JSON.parse(localStorage.getItem("comptesMembres")) || {};
let codePinCorrect = registreComptes[pseudoAuteur.toLowerCase()];
let badgeMembre = "";
// LA SÉCURITÉ ANTI-INTRUS : Si le pseudo existe dans la base de données
if (codePinCorrect) {
const saisieVerification = prompt("🔐 Ce pseudonyme est réservé. Veuillez entrer votre code PIN secret pour valider votre identité :");
if (saisieVerification === codePinCorrect) {
// Le code est bon ! On lui colle le badge ✓ unique
badgeMembre = " <span style='color:#00ced1; font-weight:bold; font-size:0.85rem;'>✓ Membre Vérifiée</span>";
alert("✨ Identité confirmée ! Bonjour " + pseudoAuteur + ".");
} else {
// Mauvais code ! On stoppe l'envoi pour protéger l'identité
alert("⛔ Code PIN incorrect ! Vous ne pouvez pas usurper l'identité de " + pseudoAuteur + ".");
return;
}
}
// Le code continue ici pour enregistrer le message avec ou sans son badge...
alert("🚀 Message envoyé avec succès !" + (badgeMembre !== "" ? " (Identité certifiée)" : " (Visiteur anonyme)"));
}
</script>
Étape 25 : Activer les Notifications en Direct (Alertes Globale) 🔔✨
📌 Note de cours — Architecture des notifications asynchrones :
Nous programmons un système d'alerte événementiel. Le script injecte un composant volant au sommet du document (position: fixed). Grâce à la fonction temporelle setTimeout(), la notification applique une bascule d'affichage automatique pour se dissimuler après un délai précis de 5 secondes.
📂 Fichiers cibles et point d'insertion chirurgical :
Ce module est conçu pour s'afficher sur toutes les sections de votre projet. Ouvrez les fichiers de vos pages (comme index.html, blog.html ou forum.html). Copiez l'intégralité du code de la boîte noire et collez-le tout en haut, immédiatement après la balise d'ouverture générale <body> de chaque document.
<!-- LE CODE DE LA BULLE DE NOTIFICATION (À METTRE TOUT EN HAUT DU BODY) -->
<div id="boiteAlerteBulle" style="display:none; position:fixed; top:20px; right:20px; background:#fff9db; border:3px solid #ffb142; padding:15px; border-radius:12px; box-shadow:0 5px 15px rgba(0,0,0,0.1); z-index:9999; font-family:sans-serif; align-items:center; gap:10px; animation:glisserAlerte 0.5s ease-out;">
<span style="font-size:1.5rem;">🔔</span>
<div>
<strong style="color:#d63031;" id="texteTitreAlerte">[TITRE DE L'ALERTE]</strong><br>
<span style="color:#2d3436; font-size:0.9rem;" id="texteCorpsAlerte">[Message de notification à personnaliser].</span>
</div>
</div>
<style>
@keyframes glisserAlerte {
from { transform: translateY(-50px); opacity: 0; }
to { transform: translateY(0); opacity: 1; }
}
</style>
<script>
// SCRIPT INTERACTIF : ENVOIE UNE ALERTE À TOUT LE SITE
function lancerNotificationGroupe(titre, message) {
const bulle = document.getElementById("boiteAlerteBulle");
if(!bulle) return;
document.getElementById("texteTitreAlerte").innerText = titre;
document.getElementById("texteCorpsAlerte").innerText = message;
bulle.style.display = "flex";
// Ferme automatiquement la petite bulle après 5 secondes
setTimeout(() => {
bulle.style.display = "none";
}, 5000);
}
</script>
🔔
[TITRE DE L'ALERTE EXEMPLE] [Exemple de notification : Un nouvel article est en ligne sur Sweet Candy !]
Étape 26 : Personnaliser l'Onglet du Navigateur (Favicon & Titre Défilant) 🌐✨
📌 Note de cours — Dynamique et métadonnées de l'onglet :
Nous modifions les métadonnées de la barre de navigation. Le script JavaScript extrait le texte du titre, applique une permutation circulaire via substring(), et met à jour la propriété document.title en boucle avec setTimeout().
🛠️ Outils gratuits pour fabriquer votre icône (Favicon) :
Pour transformer une image ou un émoji en icône, utilisez ces laboratoires en ligne :
• Générateur d'émojis et convertisseur :Favicon.io • Banques d'icônes gratuites :Flaticon ou Icon-Icons
📂 Point d'insertion dans votre projet :
Peu importe l'option d'hébergement choisie ci-dessous, le code de votre boîte noire doit être inséré tout en haut de vos fichiers (ex: index.html ou blog.html), impérativement entre les balises de configuration <head> et </head>.
Rendu Option A (Méthode Locale Recommandée)
L'icône est stockée à la racine de votre dossier. Chargement instantané et 100% autonome, idéal pour Netlify !
Rendu Option B (Hébergeur Externe .ICO)
L'icône utilise une extension .ico stockée sur une plateforme spécialisée comme Postimages ou Aht.li.
📦 Option A : Stockage en Local (Sans dépendre d'Internet)
Consigne : Prenez votre fichier d'icône carrée au format PNG, renommez-le exactement favicon.png et glissez-le simplement dans votre dossier de code, juste à côté de vos pages HTML. Copiez ensuite ce bloc et mettez-le dans votre zone <head> :
<!-- SÉCURITÉ DE L'ICÔNE EN LOCAL (PNG TRANSPARENT) -->
<link rel="icon" type="image/png" href="favicon.png" />
<!-- MOTEUR DU TEXTE DÉFILANT DANS L'ONGLET -->
<script>
let texteTitreOnglet = " [VOTRE TEXTE DE TITRE ICI] - Bienvenue sur mon site ! ";
const vitesseDefilement = 300;
function animerTitreOnglet() {
texteTitreOnglet = texteTitreOnglet.substring(1, texteTitreOnglet.length) + texteTitreOnglet.substring(0, 1);
document.title = texteTitreOnglet;
setTimeout(animerTitreOnglet, vitesseDefilement);
}
animerTitreOnglet();
</script>
🌐 Option B : Hébergement Externe (Fichier technique .ICO)
Consigne : Si vous utilisez un fichier d'extension .ico, envoyez-le sur une plateforme qui accepte ce format (comme Aht.li ou Postimages.org en choisissant le "Lien direct"). Copiez ensuite ce bloc et collez-le dans votre zone <head> :
<!-- INTERCONNEXION DE L'ICÔNE VIA SERVEUR DISTANT (.ICO ACCEPTE) -->
<link rel="icon" type="image/x-icon" href="VOTRE_URL_DIRECT_D_ICONE_HEBERGE.ico" />
<!-- MOTEUR DU TEXTE DÉFILANT DANS L'ONGLET -->
<script>
let texteTitreOnglet = " [VOTRE TEXTE DE TITRE ICI] - Bienvenue sur mon site ! ";
const vitesseDefilement = 300;
function animerTitreOnglet() {
texteTitreOnglet = texteTitreOnglet.substring(1, texteTitreOnglet.length) + texteTitreOnglet.substring(0, 1);
document.title = texteTitreOnglet;
setTimeout(animerTitreOnglet, vitesseDefilement);
}
animerTitreOnglet();
</script>
Étape 27 : Activer le Système de Badges et Niveaux de Participation 🏆✨
📌 Note de cours — Logique de gamification et compteurs :
Nous programmons un moteur de calcul de grades. Le script interroge la taille de votre tableau d'historique (la propriété .length de votre base locale). Selon le volume d'activité détecté, une condition en chaîne attribue dynamiquement une classe d'habillage CSS couleur et un titre honorifique basé sur l'assiduité.
📂 Fichier cible et point d'insertion dans votre projet :
Ce système est conçu pour enrichir vos affichages d'utilisatrices. Ouvrez vos fichiers de discussion ou de profil (comme blog.html, livredor.html ou votre console ecrire.html). Copiez le code de la boîte noire ci-dessous et collez-le tout en bas de votre fichier HTML, immédiatement avant votre balise fermante générale </body>.
🏅 Simulateur d'Activité et de Participation
👤 Profil d'exemple : Utilisatrice
Niveau de participation : 🌱 Nouvelle Recrue
📊 Total de publications enregistrées : 0
📜 Échelle générale de participation :
🌱 De 0 à 2 publications ➡️ Nouvelle Recrue (Participation initiale)
⚡ De 3 à 6 publications ➡️ Membre Active (Participation régulière)
👑 À partir de 7 publications ➡️ Contributrice Élite (Haute participation !)
<!-- SCRIPT AUTOMATIQUE DE CALCUL DES BADGES ET GRADES -->
<script>
function obtenirLeBadgeMembre(pseudo) {
// Extrait les commentaires enregistrés sur la mémoire locale du site
let commentaires = JSON.parse(localStorage.getItem("messagesLivreDor")) || [];
// Filtre et compte combien de messages appartiennent à ce pseudo précis
let nombreParticipations = commentaires.filter(msg => msg.auteur && msg.auteur.toLowerCase() === pseudo.toLowerCase()).length;
let grade = "🌱 Nouvelle Recrue";
let couleur = "#ff7675";
// Algorithme de tri par paliers de participation
if (nombreParticipations >= 3 && nombreParticipations <= 6) {
grade = "⚡ Membre Active";
couleur = "#ffb142";
} else if (nombreParticipations >= 7) {
grade = "👑 Contributrice Élite";
couleur = "#00ced1";
}
return " <span style='background:" + couleur + "; color:white; font-weight:bold; padding:2px 8px; border-radius:10px; font-size:0.8rem; margin-left:5px;'>" + grade + "</span>";
}
function afficherPseudoAvecBadgeVIP(pseudoAuteur) {
let codeBadgeHtml = obtenirLeBadgeMembre(pseudoAuteur);
return "<strong style='color:#2d3436;'>" + pseudoAuteur + "</strong>" + codeBadgeHtml;
}
</script>
💡 Comment installer et faire marcher vos Badges ?
Étape 1 : Où coller le script ?
Copiez le code de la boîte noire ci-dessus. Ouvrez le fichier de votre espace public (comme livredor.html). Descendez tout en bas de votre code et collez ce bloc juste avant la toute dernière balise de fermeture </body>.
Étape 2 : Comment l'activer sur vos messages ?
Dans le code JavaScript qui gère l'affichage de vos commentaires du livre d'or, cherchez l'endroit où s'affiche le nom de l'auteur. Remplacez l'affichage simple par notre fonction magique :
// Par le code avec calcul de badge automatique en direct :
boite.innerHTML = afficherPseudoAvecBadgeVIP(message.auteur) + " : " + message.texte;
🎯 Le résultat visuel sur votre site :
Dès qu'une amie postera un commentaire, l'ordinateur va compter ses messages en secret dans sa mémoire. Il affichera son nom suivi de sa petite bulle de couleur selon sa fidélité :
• Julie🌱 Nouvelle Recrue (0 à 2 messages)
• Sarah⚡ Membre Active (3 à 6 messages)
• Mélissa👑 Contributrice Élite (7 messages ou plus !)
📌 Note de cours — Le concept de profil dynamique :
Nous créons un générateur de fiches d'identité visuelles. Ce système extrait les variables saisies par l'utilisatrice pour modifier instantanément l'habillage graphique de son espace (mutation des propriétés style.backgroundColor et style.backgroundImage en JavaScript) et enregistre ses choix dans la mémoire locale.
📂 Fichier cible et méthode de rangement :
Où coller ce module ? Ce code est de l'architecture HTML et JavaScript. Pour créer cet espace, ouvrez votre éditeur et créez un fichier indépendant nommé exactement profil.html (votre page de compte). Copiez l'intégralité du code et collez-le tout en bas de votre fichier, juste avant la balise de fermeture générale </body>.
🛠️ Modifier mon Profil
🎨 Personnaliser mon Design :
Utilisatrice ✓ VIP
⚡ Membre Active
📊 5 messages postés
✨ À propos de moi :
[Rédigez votre biographie, vos passions ou vos notes d'entraide ici...]
<!-- CODE HTML DE L'ESPACE PROFIL EDITABLE -->
<div class="formulaire-edition-profil">
<input type="text" id="avatarUrl" placeholder="URL Avatar (.png, .jpg)">
<textarea id="maBiographie" placeholder="[Écrivez une courte description sur vous ici...]"></textarea>
<input type="text" id="blogUrl" placeholder="Lien de votre site ou réseau social">
<input type="text" id="signatureUrl" placeholder="URL Bandeau Signature (400x80)">
<!-- Boutons de design personnalisable -->
<input type="color" id="couleurFond">
<input type="text" id="imageFond" placeholder="URL Image de fond (Optionnelle)">
<select id="styleBordure">
<option value="2px solid #ff7675">Corail Fine</option>
<option value="4px double #00ced1">Double Turquoise</option>
</select>
<button onclick="sauvegarderMonProfilVIP()">💾 Enregistrer mon Profil</button>
</div>
<!-- RENDU VISUEL DE LA FICHE PROFIL DE LA MEMBRE -->
<div id="ficheProfilMembreCard" style="transition: all 0.3s ease; background-size: cover; background-position: center;">
<img id="avatarAffichage" src="" style="width:70px; height:70px; border-radius:50%;">
<h4 id="pseudoAffichage"></h4>
<p id="bioAffichage"></p>
<a id="blogLien" href="#" target="_blank">Visiter mon univers</a>
<img id="signatureAffichage" src="" style="width:100%; max-height:80px;">
</div>
<script>
// 1. SAUVEGARDE EN MÉMOIRE DE TOUTES LES INFOS ET DU DESIGN
function sauvegarderMonProfilVIP() {
const pseudoConnecte = "NomDeLaMembre"; // À lier dynamiquement avec le pseudo connecté
const profilDonnees = {
avatar: document.getElementById("avatarUrl").value.trim(),
bio: document.getElementById("maBiographie").value.trim(),
blog: document.getElementById("blogUrl").value.trim(),
signature: document.getElementById("signatureUrl").value.trim(),
fondCouleur: document.getElementById("couleurFond").value,
fondImage: document.getElementById("imageFond").value.trim(),
bordure: document.getElementById("styleBordure").value
};
// Enregistre l'ensemble de la fiche personnalisée sous la clé unique de la membre
localStorage.setItem("profilVIP_" + pseudoConnecte.toLowerCase(), JSON.stringify(profilDonnees));
alert("✨ Fiche Profil et Design mis à jour avec succès !");
chargerEtAfficherProfilVIP(pseudoConnecte);
}
// 2. LECTURE AUTOMATIQUE ET APPLICATION DU DESIGN SUR MESURE
function chargerEtAfficherProfilVIP(pseudo) {
const donnéesStockées = localStorage.getItem("profilVIP_" + pseudo.toLowerCase());
if (donnéesStockées) {
const p = JSON.parse(donnéesStockées);
const card = document.getElementById("ficheProfilMembreCard");
if (!card) return;
// Application des textes, images et signatures
document.getElementById("avatarAffichage").src = p.avatar || "avatar-defaut.png";
document.getElementById("bioAffichage").innerText = p.bio || "Aucune description.";
document.getElementById("blogLien").href = p.blog || "#";
document.getElementById("signatureAffichage").src = p.signature || "";
// Application du design sur-mesure choisi par la membre
card.style.backgroundColor = p.fondCouleur;
card.style.border = p.bordure;
if (p.fondImage !== "") {
card.style.backgroundImage = "url('" + p.fondImage + "')";
} else {
card.style.backgroundImage = "none";
}
}
}
</script>
⚙️ Guide du Designer : Personnaliser vos Bordures et Dimensions
🎨 1. Créez vos propres Bordures personnalisées :
Dans le code HTML, repérez les balises <option value="..."> de votre sélecteur de bordures. Vous pouvez inventer vos propres styles en modifiant la valeur selon cette formule magique :
[Épaisseur en px] [Style] [Code Couleur #]
📐 2. Ajuster la Largeur (Width) et la Hauteur (Height) :
Pour modifier la taille physique de la fiche de vos membres, cherchez la balise du rendu visuel <div id="ficheProfilMembreCard" style="..."> dans votre code HTML et ajoutez ou modifiez ces propriétés CSS à l'intérieur de l'attribut style :
• width: 350px; ➡️ Règle la largeur fixe de la carte à 350 pixels [images_api:image_search].
• min-height: 400px; ➡️ Force une hauteur minimale de 400 pixels pour que la fiche garde une belle forme allongée même si la biographie est courte [images_api:image_search].
Étape 29 : Créer un Système de Messages Privés Sécurisés (MP) 💌🔒
📌 Note de cours — Le fonctionnement de la boîte aux lettres :
Nous programmons un système de courrier en décalé. Pas besoin d'être connectées en même temps pour s'écrire ! Le script enregistre les enveloppes de texte dans la mémoire locale (localStorage). Lorsque vous ouvrez votre session, une fonction de tri automatique (.filter()) fouille la mémoire et extrait uniquement les lettres qui portent votre nom pour masquer tout le reste du courrier.
📂 Fichier cible et intégration de la messagerie :
Où placer ce module ? Ce code est de l'architecture HTML et JavaScript. Pour créer cet espace, ouvrez votre éditeur et créez un fichier indépendant nommé exactement messages.html (votre page de courrier privée). Copiez l'intégralité du code et collez-le tout en bas de votre fichier, juste avant la balise de fermeture générale </body>.
💌 Centre de Messagerie Privée Communautaire
✍️ 1. Envoyer un mot secret
🔑 2. Ouvrir ma Boîte aux Lettres
Entrez votre pseudo pour relever votre courrier.
Votre boîte aux lettres est fermée.
<!-- SCRIPT DE MESSAGERIE PRIVÉE (MP) -->
<script>
function envoyerUnMessagePrive() {
const expéditeur = document.getElementById("inputMpExp").value.trim();
const destinataire = document.getElementById("inputMpDest").value.trim();
const messageContenu = document.getElementById("inputMpTexte").value.trim();
if (expéditeur === "" || destinataire === "" || messageContenu === "") {
alert("❌ Veuillez remplir tous les champs avant d'envoyer !");
return;
}
let tousLesMessages = JSON.parse(localStorage.getItem("messageriePriveeVIP")) || [];
const nouveauMP = {
de: expéditeur,
pour: destinataire.toLowerCase(),
texte: messageContenu,
date: new Date().toLocaleTimeString('fr-FR', {hour: '2-digit', minute:'2-digit'})
};
tousLesMessages.push(nouveauMP);
localStorage.setItem("messageriePriveeVIP", JSON.stringify(tousLesMessages));
alert("💌 Votre message privé a été glissé dans l'enveloppe avec succès !");
document.getElementById("inputMpTexte").value = "";
}
function lireMaBoiteAuxLettres() {
const pseudoAuteur = document.getElementById("inputMpLecturePseudo").value.trim();
if (pseudoAuteur === "") { alert("❌ Entrez votre pseudo !"); return; }
let registreComptes = JSON.parse(localStorage.getItem("comptesMembres")) || {};
let codePinCorrect = registreComptes[pseudoAuteur.toLowerCase()];
if (codePinCorrect) {
const check = prompt("🔐 Ce pseudo est privé. Entrez votre code PIN secret :");
if (check !== codePinCorrect) { alert("⛔ Code PIN incorrect !"); return; }
}
let tousLesMessages = JSON.parse(localStorage.getItem("messageriePriveeVIP")) || [];
let mesLettres = tousLesMessages.filter(mp => mp.pour === pseudoAuteur.toLowerCase());
const zoneAffichage = document.getElementById("zoneReceptionMessages");
if (!zoneAffichage) return;
zoneAffichage.innerHTML = "";
if (mesLettres.length === 0) {
zoneAffichage.innerHTML = "<p style='color:#888; text-align:center;'>📭 Votre boîte aux lettres est vide.</p>";
return;
}
mesLettres.forEach(mp => {
const enveloppe = document.createElement("div");
enveloppe.style.cssText = "background:#faf6ec; padding:8px; border-radius:6px; margin-bottom:5px; border-left:3px solid #ff7675;";
enveloppe.innerHTML = '💌 <strong>De : ' + mp.de + '</strong> <small style="color:#999;">(' + mp.date + ')</small> : <br><span style="color:#2d3436;">' + mp.texte + '</span>';
zoneAffichage.appendChild(enveloppe);
});
}
</script>
💡 Comment tester ce système de secret avec vos amies ?
Étape A — Écrire un mot secret : Ouvrez le volet jaune d'Aperçu. Dans le Formulaire 1, tapez un pseudo au choix (ex: Chloé), mettez votre nom d'expéditeur et écrivez une confidence dans le cadre. Cliquez sur le bouton rose.
Étape B — Relever le courrier protégé : Allez maintenant dans le Formulaire 2 à droite. Pour lire le message, tapez le nom exact de la destinataire (Chloé) et cliquez sur le bouton bleu. Une boîte surgira pour vous demander la confirmation d'identité (Aide de test : tapez le code PIN 5555). La boîte aux lettres s'ouvrira pour afficher uniquement ses messages secrets !
Étape 30 : Intégrer la Messagerie et votre Avatar dans le Menu 📬👤
📌 Note de cours — L'assemblage final de votre site :
Félicitations, vous êtes au bout de votre apprentissage ! Ce module rassemble l'architecture structurelle (HTML) et le positionnement flottant (CSS). En utilisant la commande position: fixed, votre barre de navigation se détache du site pour flotter à l'écran.
📐 Boussole CSS : Choisissez l'emplacement physique de votre Menu !
Pour configurer l'emplacement de votre menu sur votre blog, modifiez simplement les propriétés de direction à l'intérieur de vos règles CSS :
• Menu horizontal tout en HAUT : Utilisez top: 0; left: 0; width: 100%; display: flex; flex-direction: row; • Menu horizontal tout en BAS : Utilisez bottom: 0; left: 0; width: 100%; display: flex; flex-direction: row; • Menu vertical bloqué à GAUCHE : Utilisez top: 0; left: 0; height: 100%; display: flex; flex-direction: column; • Menu vertical bloqué à DROITE : Utilisez top: 0; right: 0; height: 100%; display: flex; flex-direction: column;
👉 Cliquez sur l'avatar rond tout à droite du menu rouge pour charger votre fiche profil !
AccueilBlog & AmisQuestions📬 Messagerie
Cliquez sur l'avatar rond dans le menu rouge ci-dessus pour charger la fiche profil personnalisée d'exemple...
💡 Guide de Fin de Cours : Comment assembler votre grand Menu ?
Étape A — Ouvrir vos pages : Copiez le code de la boîte noire. Cet élément constitue la colonne vertébrale de votre navigation. Vous devez ouvrir chacun de vos fichiers HTML (index.html, blog.html, livredor.html, forum.html).
Étape B — Insertion chirurgicale : Allez tout en haut de chaque document. Repérez votre balise de démarrage <body> et collez-y le bloc complet juste en dessous pour que la barre de navigation s'affiche en premier à l'écran.
🎨 Étape C — Customisation de l'orientation : Par défaut, le menu s'adapte horizontalement en haut. Si vous préférez le bloquer de façon verticale sur le côté gauche ou droit de votre écran, cherchez la ligne class="barre-menu-nav" ou ouvrez votre panneau CSS, et appliquez les configurations de boussole décrites dans la note de cours supérieure !
Étape 31 : Créer une Pagination Dynamique avec Symboles 📄🔄
📌 Note de cours — Pourquoi paginer les articles d'un blog ?
Lorsque votre blog commence à accumuler des dizaines d'astuces, les afficher toutes sur la même page ralentit le chargement et fatigue vos visiteuses. La pagination consiste à découper votre liste en plusieurs pages virtuelles. En utilisant des symboles fléchés (◀ et ▶), vous offrez une navigation fluide et élégante digne des plus grands sites professionnels.
📂 Structure du code et intégration :
Ce système nécessite d'ajouter un identifiant de page (ex: class="article-page-1") sur vos blocs d'articles. Le script JavaScript se chargera ensuite de masquer automatiquement les anciennes pages pour n'afficher que celle sélectionnée par l'utilisatrice. Copiez le code ci-dessous et insérez-le tout en bas de votre fichier blog.html ou index.html.
<!-- 📰 BLOCS D'ARTICLES EXEMPLES AVEC LEUR NUMÉRO DE PAGE -->
<div class="liste-articles-demo" style="font-family: sans-serif; margin-bottom: 20px;">
<div class="candy-article-item page-1" style="background: rgba(255,255,255,0.05); padding: 15px; border-radius: 8px; margin-bottom: 10px; border-left: 4px solid #ff7675;">
<h4 style="margin: 0; color: #ff7675;">🍬 Astuce #1 : Réussir le glaçage royal pastel</h4>
<p style="font-size: 0.85rem; color: #ccc; margin: 5px 0 0 0;">Découvrez les secrets pour obtenir une texture brillante et lisse sur vos biscuits...</p>
</div>
<div class="candy-article-item page-2" style="background: rgba(255,255,255,0.05); padding: 15px; border-radius: 8px; margin-bottom: 10px; border-left: 4px solid #00ced1; display: none;">
<h4 style="margin: 0; color: #00ced1;">🧁 Astuce #2 : Le secret des cupcakes ultra-moelleux</h4>
<p style="font-size: 0.85rem; color: #ccc; margin: 5px 0 0 0;">L'ingrédient magique à ajouter à votre pâte pour qu'ils restent tendres pendant 3 jours...</p>
</div>
<div class="candy-article-item page-3" style="background: rgba(255,255,255,0.05); padding: 15px; border-radius: 8px; margin-bottom: 10px; border-left: 4px solid #ccff00; display: none;">
<h4 style="margin: 0; color: #ccff00;">🍿 Astuce #3 : Popcorn caramélisé comme au cinéma</h4>
<p style="font-size: 0.85rem; color: #ccc; margin: 5px 0 0 0;">La méthode infaillible pour enrober chaque grain de maïs sans jamais les brûler !</p>
</div>
</div>
<!-- 🧭 LES BOUTONS DE PAGINATION INTERACTIFS AVEC SYMBOLES -->
<div class="barre-pagination-candy" style="display: flex; justify-content: center; align-items: center; gap: 10px; font-family: sans-serif; margin-top: 20px; user-select: none;">
<button onclick="changerPageCandy(-1)" style="background: #ff7675; color: white; border: none; padding: 8px 12px; border-radius: 6px; cursor: pointer; font-weight: bold;">◀ Précédent</button>
<span id="indicateurPageCandy" style="color: white; font-weight: bold; font-size: 1rem; padding: 0 10px;">Page 1 sur 3</span>
<button onclick="changerPageCandy(1)" style="background: #ff7675; color: white; border: none; padding: 8px 12px; border-radius: 6px; cursor: pointer; font-weight: bold;">Suivant ▶</button>
</div>
<script>
// ⚙️ VARIABLES DU MOTEUR DE PAGINATION
let pageActuelleCandy = 1;
const totalPagesCandy = 3;
function changerPageCandy(direction) {
// Calcul de la nouvelle page cible
let nouvellePage = pageActuelleCandy + direction;
// Bloquer la navigation si on dépasse les limites
if (nouvellePage < 1 || nouvellePage > totalPagesCandy) return;
// Mettre à jour l'index de la page actuelle
pageActuelleCandy = nouvellePage;
// 🔄 Masquer tous les articles et afficher uniquement les bons
for (let i = 1; i <= totalPagesCandy; i++) {
const elementsPage = document.querySelectorAll('.candy-article-item.page-' + i);
elementsPage.forEach(item => {
if (i === pageActuelleCandy) {
item.style.display = 'block'; // On affiche la page active
} else {
item.style.display = 'none'; // On cache les autres pages
}
});
}
// Mettre à jour le texte du compteur visuel
document.getElementById('indicateurPageCandy').innerText = "Page " + pageActuelleCandy + " sur " + totalPagesCandy;
}
</script>
⚙️ Comment fonctionne le système de pagination ?
Pour trier vos gâteaux et vos astuces, l'ordinateur utilise un petit compteur caché dans sa mémoire. Lorsque vos copines cliquent sur les flèches, le script fait une soustraction ou une addition pour changer de page, puis masque automatiquement les textes des autres pages pour ne pas encombrer l'écran.
📖 Guide Pratique pour vos amies :
📂 Étape 1 : Le point de collage
Copiez tout le code informatique situé dans le grand rectangle noir ci-dessus. Ouvrez votre fichier de page (comme blog.html) et collez le bloc tout en bas de votre document, juste avant la balise générale de fermeture </body>.
🏷️ Étape 2 : Classer vos articles
C'est le secret de la réussite ! Pour chaque article que vous écrivez sur votre site, ajoutez simplement le numéro de sa page dans sa classe HTML, par exemple : class="candy-article-item page-1" ou class="candy-article-item page-2". Le moteur s'occupe du reste automatiquement !
👑 L'astuce (Changer le nombre de pages) :
Dans le code de la boîte noire, il y a une ligne qui dit totalPagesCandy = 3;. C'est le nombre total de pages de votre blog. Si vous écrivez beaucoup d'astuces et que vous voulez ajouter une 4e ou une 5e page, remplacez simplement le chiffre 3 par le nombre de pages de votre choix. Les flèches s'adapteront instantanément à la taille de votre site !
🌸 Étape 3 : Personnaliser les boutons avec vos Emojis préférés !
Vous n'êtes pas obligées de garder les flèches ordinaires ! Vous pouvez remplacer les symboles ◀ et ▶ par les emojis de votre choix directement entre les balises des boutons dans la boîte noire. Par exemple, vous pouvez mettre des lunes et des étoiles (🌙 / ⭐), des trèfles (🍀), des fleurs (🌸) ou des cœurs (❤️) pour créer un style unique qui vous ressemble !
📖 L'Astuce Secrète : Recycler ce code pour un Livre d'Or surchargé ! Ce système de boutons et de compteurs est magique ! Si votre livre d'or contient trop de petits mots d'amies, vous pouvez utiliser exactement le même code. Il vous suffit de remplacer les cartes d'articles par vos messages de livre d'or, et de leur donner les classes page-1, page-2, etc. Vos messages seront instantanément découpés en petits paquets faciles à feuilleter !
⚠️ Attention au piège des conflits (Pour l'Autrice) : Si vous mettez la pagination des articles ET du livre d'or sur la même page, ils vont se mélanger. Pour éviter cela, changez simplement le petit nom Candy par le nom Or dans le code du livre d'or (par exemple : changerPageOr au lieu de changerPageCandy). En donnant un nom différent aux boutons, l'ordinateur ne se trompera plus jamais et fera tourner les pages séparément !
Étape 32 : Propulser votre Blog en ligne sur Internet avec Netlify ! 🚀🌍
📌 Note de cours — Qu'est-ce que la mise en ligne ?
Jusqu'à présent, votre magnifique blog n'existait que sur votre propre ordinateur. Pour que vos amies, votre famille et le monde entier puissent venir le visiter, il faut envoyer vos fichiers sur un ordinateur public allumé 24h/24 (un hébergeur). Netlify est un outil magique et entièrement gratuit qui va lire votre dossier de code et lui donner une vraie adresse URL sécurisée (qui commence par https://...).
📂 Rangement obligatoire de votre dossier :
Avant de l'envoyer sur Internet, assurez-vous que votre projet est bien rangé. Votre page d'accueil principale doit obligatoirement s'appeler index.html (tout en minuscules) et être placée au premier niveau de votre dossier, juste à côté de vos dossiers d'images et de vos feuilles CSS.
<!-- 👑 BADGE DE RÉUSSITE DU BLOG SECRET -->
<div class="badge-reussite-communaute" style="background: rgba(0, 206, 209, 0.1); border: 2px solid #00ced1; padding: 20px; border-radius: 12px; color: #ccff00; font-family: sans-serif; text-align: center; max-width: 500px; margin: 20px auto;">
<span style="font-size: 2rem; display: block; margin-bottom: 5px;">✨🌍✨</span>
<h4 style="margin: 0 0 5px 0; color: #00ced1;">Félicitations, mon blog est sur Internet !</h4>
<p style="font-size: 0.85rem; color: #fff; margin: 0; line-height: 1.4;">Ce petit coin secret est désormais propulsé sur le réseau mondial. Merci d'en respecter la confidentialité entre copines !</p>
</div>
🛠️ Guide Pas-à-Pas : Les 4 étapes pour publier votre site
Suivez sagement ces instructions toutes simples pour envoyer votre blog privé sur le réseau mondial :
☁️ Étape 1 : Créer votre compte Allez sur le site officiel de Netlify. Cliquez sur le bouton d'inscription et créez un compte gratuit en utilisant simplement votre adresse e-mail.
📦 Étape 2 : Fermer et préparer le dossier Sur votre ordinateur, fermez votre éditeur de code. Repérez votre dossier de projet (celui qui contient votre fichier de redirection secret, votre page accueil.html et vos images).
🎯 Étape 3 : Le Glisser-Déposer (Drag & Drop) Sur votre écran Netlify, allez dans l'onglet des sites, puis descendez tout en bas de la page. Vous allez voir une grande zone en pointillés. Prenez votre dossier complet avec votre souris, et déposez-le directement dans cette boîte !
✨ Étape 4 : La Magie opère ! Netlify va charger vos pages et vos images en moins de 10 secondes. La page va s'actualiser et vous donner un lien bleu cliquable. Votre blog est officiellement accessible partout dans le monde !
🦅 L'astuce :
Le lien donné par Netlify au début est un peu bizarre (du genre beautiful-candy-xyz.netlify.app). Pour le personnaliser et le rendre super classe, allez dans Site settings, cliquez sur Change site name, et tapez le nom secret de votre choix pour avoir une adresse ultra-pro, comme notre-blog-lescopines.netlify.app !
✦✦
Votre Marque page gorumandise 🍰
Un clic sur le gâteau et la déposer sur votre ligne de lecture !