Terminale STI2D SIN Seance

Entrainement TP

Séance — Mini-site « Carte de lieu »

HTMLCSSJS responsivemode sombre

Construire une page web responsive présentant un lieu (ville, monument, musée…), avec structure sémantique, grille CSS et bouton « mode sombre » en JavaScript.

Objectifs

  • Structurer une page HTML sémantique (header, main, sections, footer).
  • Mettre en page avec variables CSS, grille responsive et media queries.
  • Implémenter un bouton « mode sombre » en JavaScript (classe dark + persistance).
  • Insérer des médias via une zone de pièces jointes et soigner l’accessibilité (attribut alt).

Accès élève : enligneici.fr/sandbox_eleve.php puis sélectionner l’activité.

Compétences visées

  • Produire une page web structurée et valide.
  • Utiliser une grille responsive et gérer la lisibilité (contrastes, tailles).
  • Programmer une interaction simple côté client (toggle de classe, stockage local).
  • Tester et corriger (console, erreurs courantes).

Pré-requis

  • Balises HTML de base, attribut alt.
  • Sélecteurs CSS, classes, variables CSS (--var).
  • Écouteurs d’événements JS, classList.toggle(), localStorage.

Équipement

  • Navigateurs récents, accès au bac à sable.
  • Quelques images libres ou personnelles (via pièces jointes).

Consignes élèves (atelier)

  1. Créer la structure : <header>, <main> avec section « Héro » et section « Galerie », puis <footer>.
  2. Ajouter un titre clair et une description (2–4 phrases) du lieu choisi.
  3. Insérer au moins 2 images via Pièces jointes puis le bouton Insérer. Renseigner l’attribut alt.
  4. Mettre en place la galerie responsive (2–3 colonnes selon la largeur) et utiliser des variables CSS pour les couleurs.
  5. Programmer un bouton « Mode sombre » qui ajoute/enlève la classe dark sur la page et mémorise le choix.
  6. Tester l’aperçu, corriger les erreurs console, vérifier la lisibilité.
  7. Enregistrer régulièrement, puis Envoyer la copie à la fin.
Critères d’évaluation
  • HTML clair et sémantique ; alt images renseignés.
  • CSS : variables, grille responsive, lisibilité (contrastes, taille).
  • JS : mode sombre fonctionnel et persistant ; console propre.
  • Autonomie, soin et respect des consignes.

Astuces

  • Commencer simple, puis améliorer l’aspect visuel.
  • Soigner les légendes de galerie avec <figure> et <figcaption>.
  • Prévoir un contraste suffisant pour le mode sombre.

Annexes (starters rapides)

Starter HTML
<header class="container">
  <h1>Carte de lieu</h1>
  <button id="toggle-dark" type="button" class="btn">Mode sombre</button>
</header>

<main class="container">
  <section class="hero">
    <h2>Mon lieu</h2>
    <p>Décris en quelques phrases ce qui rend ce lieu intéressant.</p>
    <!-- Insérer une image principale via Pièces jointes -->
  </section>

  <section>
    <h3>Galerie</h3>
    <div class="gallery">
      <!-- <figure><img src="..." alt="..."><figcaption>...</figcaption></figure> -->
    </div>
  </section>
</main>

<footer class="container">
  <small>© Votre nom — Projet scolaire</small>
</footer>
Starter CSS
:root{
  --bg:#0f1320; --fg:#e8eef7; --card:#161b22; --line:#273349;
  --accent:#4da3ff; --paper:#ffffff; --ink:#111; --gap:14px; --radius:14px;
}
:root.dark{ --paper:#0e1116; --ink:#f1f5ff; --bg:#0b0e16; --fg:#e6ecf8; --card:#121824; --line:#22304a; --accent:#7ab6ff; }

*{box-sizing:border-box} html,body{margin:0}
body{font:16px/1.5 system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Arial;background:var(--bg);color:var(--fg)}
img{max-width:100%;display:block;border-radius:10px}
.container{max-width:980px;margin:auto;padding:16px}
.btn{background:var(--accent);color:#001427;border:none;border-radius:10px;padding:8px 12px;font-weight:600;cursor:pointer}
header.container{display:flex;align-items:center;justify-content:space-between}
.hero{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:16px;margin:12px 0}
.gallery{display:grid;gap:var(--gap);grid-template-columns:repeat(3,1fr);margin-top:10px}
.gallery figure{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:10px}
.gallery figcaption{opacity:.9;margin-top:6px;font-size:.95rem}
footer.container{border-top:1px solid var(--line);margin-top:24px;padding-top:12px}
@media (max-width:900px){ .gallery{grid-template-columns:repeat(2,1fr)} }
@media (max-width:560px){ .gallery{grid-template-columns:1fr} }
Starter JS
// Bascule clair/sombre + persistance
const root = document.documentElement;
const saved = localStorage.getItem('pref-theme'); if (saved === 'dark') root.classList.add('dark');
document.getElementById('toggle-dark').addEventListener('click', () => {
  root.classList.toggle('dark');
  localStorage.setItem('pref-theme', root.classList.contains('dark') ? 'dark' : 'light');
});
Séance « Carte de lieu » — HTML/CSS/JS • Licence CC-BY pour adaptation pédagogique.