Essayer de coder ← Retour aux sujets

Le squelette d'une page

HTML5

Une page HTML est un fichier texte fait d'éléments imbriqués. Toute page a une racine <html>, un <head> (informations invisibles) et un <body> (ce que l'on voit).

<!DOCTYPE html>
Annonce HTML5 : toujours la toute première ligne
<html lang="fr">
Racine du document ; lang donne la langue
<meta charset="UTF-8">
Encodage : permet d'afficher é, è, ç…
<title>Ma page</title>
Titre de l'onglet et des résultats de recherche
<main> … </main>
Contenu principal : un seul par page
index.html
<!DOCTYPE html>
<html lang="fr">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Ma première page</title>
</head>
<body>
  <main>
    <h1>Bonjour NSI</h1>
    <p>Ma première page web.</p>
  </main>
</body>
</html>
Rendu
Onglet « Ma première page ». Dans la page : un grand titre « Bonjour NSI », puis un paragraphe.

Balises, attributs, éléments

vocabulaire

Une balise s'écrit entre < >. Un élément = balise ouvrante + contenu + balise fermante. Les attributs apportent des précisions.

<p>Texte</p>
Un élément : <p> ouvre, </p> ferme
<a href="page.html">
Attribut href : un nom, =, une valeur entre guillemets
<br> <hr> <img …>
Éléments vides : ni contenu ni balise fermante
<!-- note -->
Commentaire : invisible dans la page
&lt; &gt; &amp; &nbsp;
Entités : affichent <, >, & et une espace insécable
attributs.html
<a href="https://www.python.org" title="Site officiel de Python">Python</a>
<img src="logo.png" alt="Logo du site" width="120">
<p>1 &lt; 2 &amp; 3 &gt; 2</p>
Rendu
Un lien « Python », une image de 120 pixels de large, puis le texte : 1 < 2 & 3 > 2

📄 Le cours : la structure d'une page

HTML (*HyperText Markup Language*) n'est pas un langage de programmation : il décrit la structure d'une page (ceci est un titre, ceci un paragraphe, ceci un lien) à l'aide de balises. L'apparence est le travail du CSS, le comportement celui de JavaScript.

LangageRôleExemple
HTMLstructure et contenu« ceci est un titre »
CSSapparence« les titres sont bleus et centrés »
JavaScriptcomportement« au clic, afficher un message »

Anatomie d'un élément

<a href="page.html">Aller à la page</a>
└────────┬─────────┘└───────┬──────┘└┬─┘
   balise ouvrante       contenu   balise fermante
   (avec un attribut)

Une balise fermante reprend le nom de l'ouvrante précédé d'une barre oblique. Certains éléments n'ont pas de contenu et donc pas de balise fermante : <br> (retour à la ligne), <hr> (trait), <img> (image), <meta>, <input>. Les noms de balises sont insensibles à la casse, mais on écrit toujours en minuscules.

Le squelette expliqué

  • <!DOCTYPE html> indique au navigateur qu'il s'agit de HTML5. Sans lui, il passe en « mode de compatibilité » et affiche la page de façon imprévisible.
  • <html lang="fr"> est la racine ; lang aide les lecteurs d'écran (prononciation) et les moteurs de recherche.
  • <head> contient les informations sur la page, qui ne s'affichent pas : encodage, titre, feuille de style, scripts.
  • <body> contient tout ce que l'utilisateur voit.
Dans le headRôle
<meta charset="UTF-8">encodage des caractères : sans lui, « é » s'affiche « Ã© »
<meta name="viewport" content="width=device-width, initial-scale=1.0">adapte la page à la largeur d'un téléphone
<title>…</title>texte de l'onglet, des favoris, des résultats de recherche
<link rel="stylesheet" href="style.css">relie la feuille de style CSS
<script src="app.js" defer></script>relie un fichier JavaScript (defer : exécuté une fois la page lue)
cours.html
<!DOCTYPE html>
<html lang="fr">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Cours NSI</title>
  <link rel="stylesheet" href="style.css">
  <script src="app.js" defer></script>
</head>
<body>
  <header><h1>Cours NSI</h1></header>
  <main>
    <p>Contenu de la page.</p>
  </main>
  <footer><p>&copy; 2026</p></footer>
</body>
</html>

Imbrication et indentation

Les éléments s'emboîtent comme des boîtes : on ferme toujours le dernier ouvert en premier. On indente (2 espaces de plus à chaque niveau) pour voir cet emboîtement. Pour le navigateur, la page est un arbre :

html
├── head
│   ├── meta
│   └── title
└── body
    ├── header
    │   └── h1
    └── main
        └── p

Cet arbre s'appelle le DOM (*Document Object Model*) : c'est lui que JavaScript manipule (voir DOM en JavaScript).

Commentaires et entités

Un commentaire <!-- … --> n'est jamais affiché. Les caractères <, > et & ont un sens pour HTML : pour les afficher, on écrit leur entité (&lt;, &gt;, &amp;). &nbsp; est une espace insécable (le navigateur ne la coupe pas en fin de ligne), &copy; donne ©.

entites.html
<!-- Ce commentaire n'apparait pas à l'écran -->
<p>Pour afficher une balise, on écrit : &lt;p&gt;</p>
<p>Prix : 5&nbsp;€ &amp; livraison offerte</p>
Rendu
Pour afficher une balise, on écrit : <p>
Prix : 5 € & livraison offerte

Créer et tester sa première page

  1. Crée un dossier, puis un fichier texte nommé index.html avec un éditeur (VS Code, Notepad++ : pas un traitement de texte).
  2. Enregistre-le en UTF-8 et colle le squelette.
  3. Double-clique sur le fichier : il s'ouvre dans le navigateur. Après chaque modification, enregistre puis recharge avec F5.
  4. Vérifie la validité du code sur le validateur du W3C (validator.w3.org).

Tu peux aussi copier n'importe quel exemple de cette page dans l'atelier (bouton « Atelier » de chaque fenêtre de code) pour voir le rendu tout de suite.

⚠️ Erreurs fréquentes

Oublier le DOCTYPE ou le charset

Sans <!DOCTYPE html>, le navigateur passe en mode de compatibilité (les mises en page se comportent bizarrement). Sans <meta charset="UTF-8">, les accents s'affichent mal (é au lieu de é). Ces deux lignes se copient telles quelles dans chaque page.

Imbriquer les balises dans le mauvais ordre

À éviter
faux.html
<p><strong>Important</p></strong>   <!-- ferme dans le mauvais ordre -->
Correct
correct.html
<p><strong>Important</strong></p>   <!-- on ferme le dernier ouvert -->

Oublier de fermer une balise

Un <div> ou un <ul> jamais fermé fait « déborder » la mise en page sur la suite du document, parfois très loin de l'erreur. L'indentation et le validateur du W3C aident à repérer la balise manquante.

Valeur d'attribut sans guillemets

À éviter
faux.html
<a href=mon cours.html>Cours</a>   <!-- l'espace coupe la valeur -->
Correct
correct.html
<a href="mon-cours.html">Cours</a>

Une extension cachée : index.html.txt

Sous Windows, si les extensions sont masquées, un fichier créé avec le Bloc-notes peut s'appeler index.html.txt : le navigateur l'affiche comme du texte brut. Active l'affichage des extensions et vérifie que le nom finit bien par .html.

Écrire < ou & directement dans le texte

Un < suivi d'une lettre est pris pour une balise, un & isolé peut former une entité par erreur. Utilise &lt; et &amp; quand tu veux les afficher.

📋 Aide-mémoire

  • Squelette : <!DOCTYPE html>, <html lang="fr">, <head> (charset, viewport, title, link, script), <body>.
  • Élément = balise ouvrante + contenu + balise fermante ; éléments vides : <br>, <hr>, <img>, <meta>, <input>.
  • Attribut : nom="valeur" toujours entre guillemets ; balises et attributs en minuscules.
  • On ferme le dernier élément ouvert en premier ; on indente de 2 espaces par niveau.
  • Entités : &lt; &gt; &amp; &nbsp; &copy; ; commentaire : <!-- … -->.
  • Fichier .html enregistré en UTF-8, ouvert dans le navigateur ; HTML = structure, CSS = apparence, JavaScript = comportement.