Numérique et sciences informatiques (spécialité) · Première
HTML et CSS : exercices corrigés de Première NSI
Publié le 7 novembre 2026 · Mis à jour le 7 novembre 2026 · Signaler une erreur
L'essentiel
- Une page web s'écrit en HTML, un langage de balises ; le CSS s'ajoute pour la mise en forme.
- Une balise ouvrante s'écrit
<nom attribut="valeur">, la balise fermante</nom>. - Un document HTML a un élément racine qui contient un
headpuis unbody; l'attributlangdonne la langue. - Les éléments sont de deux familles : bloc ou texte.
- Pour corriger un code, vérifie dans l'ordre : fermetures, imbrication, structure, attributs.
Comment utiliser ces exercices
Ces exercices te font manipuler le HTML et le CSS comme on le demande en Première NSI : lire un code, repérer ses éléments, le corriger, puis en écrire. Les pages web sont écrites dans un langage de balises, le HTML, dont les normes sont suivies par le W3C pour que les pages circulent de la même façon partout 2. Le HTML décrit la structure d'une page ; il s'accompagne d'autres langages pour la mise en forme, comme le CSS 4.
Cherche d'abord seul(e), sur papier ou dans un éditeur de texte, puis ouvre l'indice si tu bloques, et seulement ensuite la correction. Chaque exercice est classé de 1 (lecture directe) à 3 (plusieurs erreurs à trouver ou page à construire). Pour vérifier un code que tu écris, enregistre-le dans un fichier d'extension .html et ouvre-le dans un navigateur.
Rappels de cours utiles
Les exercices
Exercice 1 Lire une balise
On considère la ligne suivante :
<p class="note">Suite du cours</p>
- Recopie la balise ouvrante.
- Recopie la balise fermante.
- Quel est le nom de l'attribut, et quelle est sa valeur ?
- Quel est le texte affiché entre les deux balises ?
Indice 1
Une balise ouvrante commence par < et finit par > ; la fermante contient un /.
Indice 2
Un attribut s'écrit nom="valeur" à l'intérieur de la balise ouvrante.
Voir la correction pas à pas
La balise ouvrante est
<p class="note">: elle va du premier<au premier>.La balise fermante est
</p>: elle reprend le nompprécédé d'un/.Dans la balise ouvrante, on lit
class="note": l'attribut s'appelleclasset sa valeur estnote.Le texte affiché est ce qui se trouve entre les deux balises :
Suite du cours.
Retiens la méthode : on découpe toujours un élément en trois parties, balise ouvrante (avec ses attributs), contenu, balise fermante.
Exercice 2 Compter les balises ouvrantes
Voici un petit document :
<html lang="fr">
<head><title>Mon blog</title></head>
<body>
<h1>Bienvenue</h1>
<p>Un premier texte</p>
</body>
</html>
Combien ce code contient-il de balises ouvrantes ?
Indice 1
Une balise ouvrante n'a pas de / après le <.
Indice 2
Avance ligne par ligne et note chaque nom de balise au fur et à mesure.
Voir la correction pas à pas
Ligne 1 :
<html lang="fr">est une balise ouvrante (1). L'attributlangne crée pas de balise supplémentaire.Ligne 2 :
<head>(2) puis<title>(3). Le</title>et le</head>sont des balises fermantes, on ne les compte pas.Ligne 3 :
<body>(4).Ligne 4 :
<h1>(5). Ligne 5 :<p>(6).Les lignes 6 et 7 ne contiennent que des balises fermantes. Le total est donc de 6 balises ouvrantes :
html,head,title,body,h1,p.
Il y a autant de balises fermantes que de balises ouvrantes dans ce code : si les deux nombres diffèrent, il manque une fermeture quelque part. C'est un bon contrôle rapide.
Exercice 3 Remettre un document en ordre
Le document suivant ne respecte pas la structure attendue d'une page HTML.
<html>
<body>
<p>Bonjour
</body>
<head><title>Salut</title></head>
</html>
- Quels problèmes de structure repères-tu ?
- Réécris le document corrigé, en précisant que la page est en français.
Indice 1
Dans l'élément racine, on attend d'abord un head, puis un body.
Indice 2
Regarde si chaque balise ouvrante a bien sa fermante.
Voir la correction pas à pas
Le
bodyest placé avant lehead: l'élément racine doit contenir leheadpuis lebody.Le paragraphe
<p>Bonjourn'est jamais refermé : il manque</p>.La langue n'est pas indiquée : on ajoute l'attribut
lang="fr"à l'élément racine.On réécrit le document dans le bon ordre, avec toutes les fermetures.
<html lang="fr"> <head><title>Salut</title></head> <body> <p>Bonjour</p> </body> </html>
Trois corrections : l'ordre head puis body, la fermeture du paragraphe, l'attribut lang. Le contenu visible n'a pas changé, mais le document est maintenant correctement structuré.
Exercice 4 Éléments de type texte
On rappelle que les éléments p et h1 sont de type bloc, alors que span et strong sont de type texte (inline).
Voici un fragment de page :
<h1>Les réseaux</h1>
<p>Lis <span>le cours</span> puis retiens <strong>bien</strong> la définition.</p>
<p>Fin de la page.</p>
- Combien d'éléments de type texte ce fragment contient-il ?
- Quel élément de type bloc contient d'autres éléments ? Lesquels ?
- Peut-on dire que l'élément
spanest enfant de l'élémentp? Justifie.
Indice 1
Compte les éléments par leur nom, pas par le nombre de balises.
Indice 2
Un élément est « dans » un autre lorsque ses deux balises sont entre la balise ouvrante et la balise fermante de l'autre.
Voir la correction pas à pas
Les éléments du fragment sont :
h1,p,span,strong,p. Parmi eux, seulsspanetstrongsont de type texte, soit 2 éléments.Le premier
pcontient du texte, un élémentspanet un élémentstrong. Le titreh1et le secondpne contiennent que du texte.L'élément
spanest entièrement placé entre<p>et</p>: il est donc bien inclus dans le premier paragraphe, c'est un élément enfant de cep.
Un élément de type bloc peut contenir du texte et des éléments de type texte, comme ici le paragraphe qui contient deux passages balisés. Cette imbrication doit toujours être propre : </strong> et </span> arrivent avant </p>.
Exercice 5 Écrire une page complète
Écris, à partir de zéro, le code d'une page HTML qui respecte toutes les contraintes suivantes :
- la page est rédigée en anglais ;
- le titre de l'onglet est « My holidays » ;
- la page affiche un titre principal « Holidays in Spain » ;
- elle contient un paragraphe « I love the sea. » dans lequel le mot « sea » est placé dans un élément
strong.
Indice 1
Commence par le squelette : élément racine, head, body.
Indice 2
L'élément strong se place à l'intérieur du paragraphe, autour du seul mot « sea ».
Voir la correction pas à pas
On écrit l'élément racine avec la langue anglaise :
<html lang="en">.On ajoute le
headavec le titre de l'onglet :<head><title>My holidays</title></head>.Dans le
body, on place le titre principal :<h1>Holidays in Spain</h1>.On écrit le paragraphe en plaçant le mot « sea » dans l'élément
strong:<p>I love the <strong>sea</strong>.</p>.On assemble et on referme chaque élément.
<html lang="en"> <head><title>My holidays</title></head> <body> <h1>Holidays in Spain</h1> <p>I love the <strong>sea</strong>.</p> </body> </html>
Le point d'attention est l'imbrication : le point final de la phrase reste hors de l'élément strong, car seul le mot « sea » doit être concerné.
Exercice 6 Que vise cette règle CSS ?
Rappel : une règle CSS s'écrit sélecteur { propriété: valeur; }. Le sélecteur p désigne tous les éléments p de la page.
On applique la règle suivante à un document :
p { color: blue; }
Le corps du document est :
<body>
<h1>Mes voyages</h1>
<p>Paris</p>
<p>Rome</p>
<p>Oslo</p>
</body>
- Combien d'éléments cette règle vise-t-elle ?
- Le titre
h1est-il concerné ? - Écris une règle CSS qui mettrait le titre
h1en rouge (red).
Indice 1
Le sélecteur ne vise que les éléments qui portent exactement ce nom.
Indice 2
Pour la question 3, garde la même forme de règle en changeant le sélecteur et la valeur.
Voir la correction pas à pas
Le sélecteur
pvise chaque élémentpdu document. On lit trois balises<p>: Paris, Rome et Oslo. La règle s'applique donc à 3 éléments.Le titre est un élément
h1, pas unp: il n'est pas concerné et garde sa couleur habituelle.Pour viser le titre, on remplace le sélecteur et la valeur :
h1 { color: red; }.
Une règle CSS agit sur tous les éléments que son sélecteur désigne, sans qu'il soit besoin de modifier le code HTML. C'est ce qui permet de changer l'aspect de toute une page en une seule ligne.
Exercice 7 Déboguer une page
Cette page ne s'affiche pas comme prévu.
<html lang=fr>
<head>
<title>Recettes<title>
</head>
<body>
<h1>Crêpes</h2>
<p clas="note">Pâte à préparer la veille</p>
</body>
</html>
- Repère toutes les erreurs et explique chacune.
- Écris le code corrigé.
- Que se passerait-il, selon toi, si l'on écrivait correctement le nom de l'attribut du paragraphe ?
Indice 1
Parcours les balises une à une : chacune doit être appariée avec sa fermante portant le même nom.
Indice 2
Relis le nom de chaque attribut lettre par lettre : l'attribut du paragraphe doit s'appeler class.
Voir la correction pas à pas
Dans le
head,<title>Recettes<title>ouvre une seconde fois l'élément au lieu de le fermer : il faut écrire</title>.Le titre principal est ouvert par
<h1>mais fermé par</h2>: les noms ne correspondent pas, il faut</h1>.Dans le paragraphe, le nom d'attribut
clasest mal écrit : le navigateur ne signale rien, mais l'effet attendu n'a pas lieu. Il faut écrireclass.Par habitude, on met aussi la valeur de
langentre guillemets :lang="fr".Le code corrigé :
<html lang="fr"> <head> <title>Recettes</title> </head> <body> <h1>Crêpes</h1> <p class="note">Pâte à préparer la veille</p> </body> </html>Avec
class, l'attribut est reconnu : le paragraphe porte bien la classenote, que le CSS pourra ensuite viser.
Trois erreurs de fond : une fermeture sans /, des noms de balises différents à l'ouverture et à la fermeture, et un nom d'attribut mal écrit. Après chaque correction, recharge la page : c'est le moyen le plus rapide de savoir si la page se comporte comme prévu.
Les questions qu'on se pose
Quelle est la différence entre HTML et CSS ?
Le HTML est le langage de balises dans lequel on écrit les pages web : il en décrit la structure 2. Le CSS est un autre langage, qui s'ajoute au HTML pour la mise en forme 4. En pratique, on utilise le HTML pour dire ce qu'est chaque morceau de contenu (titre, paragraphe, lien), et le CSS pour décider de son aspect.
Faut-il toujours refermer une balise ?
Un élément se délimite par une balise ouvrante et une balise fermante 4. Dans tes exercices, refermer systématiquement chaque élément t'évite la plupart des erreurs d'affichage. Si le résultat est bizarre, commence toujours par compter les ouvertures et les fermetures.
Où place-t-on l'attribut lang et à quoi sert-il ?
Sources
- Ressources libres sur la science informatique - programmation, réseau, codage de l'information, Éduscol STI. Consulté le 7 novembre 2026.
- Ressource pédagogique NSI — HTML & CSS, Éduscol. Consulté le 7 novembre 2026.
- HTML & CSS en NSI — Cours et exercices, Académie de Lyon. Consulté le 7 novembre 2026.
- Élément HTML, Wikipédia. Consulté le 7 novembre 2026.
Les numéros dans le texte renvoient à ces sources. Une source qui ne dit pas ce qu'on lui fait dire ? Signale-le.