🌐 RÉSUMÉ COMPLET
HTML • CSS • JavaScript
Guide de révision complet pour les examens
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📅 2025–2026
🟠 HTML
HyperText Markup Language
1. Définition
HTML (HyperText Markup Language) est le langage de balisage standard utilisé pour créer et
structurer le contenu des pages web. Il utilise des balises (tags) pour définir la signification et la
structure des éléments.
2. Structure de base d'une page HTML
Toute page HTML suit une structure standardisée. Voici la structure minimale obligatoire :
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Ma Page</title>
<link rel="stylesheet" href="[Link]">
</head>
<body>
<h1>Bonjour le Monde!</h1>
<p>Mon premier paragraphe.</p>
<script src="[Link]"></script>
</body>
</html>
// Structure complète d'une page HTML
Élément Rôle Obligatoire?
<!DOCTYPE html> Déclare que c'est du HTML5 Oui
<html> Racine de tout le document Oui
<head> Métadonnées (non visible) Oui
<meta charset> Définit l'encodage (UTF-8 = Recommandé
tous les caractères)
<meta viewport> Rend la page responsive Recommandé
(mobile)
<title> Titre de l'onglet du navigateur Oui
<body> Contenu visible de la page Oui
3. Tableau des balises essentielles
Balise Syntaxe Rôle
<h1>…<h6> <h1>Titre</h1> Titres de niveau 1 à 6 (h1 =
plus grand)
<p> <p>Texte</p> Paragraphe de texte
Balise Syntaxe Rôle
<a> <a href="url">Lien</a> Lien hypertexte
<img> <img src="[Link]" alt="desc"> Affiche une image (balise
auto-fermante)
<ul> <ul><li>Item</li></ul> Liste non ordonnée (puces)
<ol> <ol><li>Item</li></ol> Liste ordonnée (numéros)
<li> <li>Élément</li> Élément de liste
<table> Voir section tableaux Tableau de données
<form> <form>...</form> Formulaire de saisie
<input> <input type="text"> Champ de saisie
<div> <div>...</div> Conteneur générique (bloc)
<span> <span>...</span> Conteneur générique (inline)
<br> <br> Saut de ligne (auto-fermante)
<hr> <hr> Ligne horizontale (auto-
fermante)
<strong> <strong>Texte</strong> Texte important (gras
sémantique)
<em> <em>Texte</em> Texte en italique (emphase)
<b> <b>Texte</b> Texte gras (visuel seulement)
<i> <i>Texte</i> Italique (visuel seulement)
<u> <u>Texte</u> Texte souligné
<small> <small>Texte</small> Texte plus petit
<mark> <mark>Texte</mark> Texte surligné
<sub> H<sub>2</sub>O Indice (en dessous)
<sup> x<sup>2</sup> Exposant (en haut)
<code> <code>[Link]()</code> Affiche du code en ligne
<pre> <pre>code multiline</pre> Code préformaté (conserve
espaces)
<blockquote> <blockquote>Citation</blockquote> Bloc de citation
<video> <video src="v.mp4" controls> Vidéo intégrée
<audio> <audio src="s.mp3" controls> Audio intégré
<iframe> <iframe src="url"> Contenu externe intégré
<script> <script src="[Link]"> Lien vers JavaScript
<link> <link rel="stylesheet" href="[Link]"> Lien vers CSS
<meta> <meta charset="UTF-8"> Métadonnées de la page
4. Balises sémantiques HTML5
Les balises sémantiques donnent du sens au contenu et améliorent le référencement (SEO) et
l'accessibilité.
Équivalent non-
Balise Rôle
sémantique
<header> En-tête de la page ou section <div id="header">
<nav> Menu de navigation <div id="nav">
<main> Contenu principal de la page <div id="main">
<section> Section thématique <div class="section">
<article> Article indépendant (blog, <div class="article">
actualité)
<aside> Contenu secondaire (sidebar) <div id="sidebar">
<footer> Pied de page <div id="footer">
<figure> Image avec légende <div class="image">
<figcaption> Légende d'une image <p class="caption">
<time> Date/heure <span>
<address> Adresse de contact <p>
<details> Contenu repliable JavaScript requis
<summary> Titre du contenu <details> JavaScript requis
<!-- Structure sémantique complète -->
<body>
<header>
<nav>
<ul>
<li><a href="#">Accueil</a></li>
<li><a href="#">Contact</a></li>
</ul>
</nav>
</header>
<main>
<section>
<article>
<h2>Titre article</h2>
<p>Contenu...</p>
</article>
</section>
<aside>Publicité ou info secondaire</aside>
</main>
<footer>
<p>Copyright 2025</p>
</footer>
</body>
// Structure sémantique complète HTML5
5. Les Listes
Type Balise Exemple Rendu
Non ordonnée <ul> <ul><li>Chat</li><li>Chien</li></ul> • Chat • Chien
Ordonnée <ol> <ol><li>A</li><li>B</li></ol> 1. A 2. B
Description <dl> <dl><dt>HTML</dt><dd>Langage...</dd></dl> Terme :
Définition
<!-- Liste imbriquée -->
<ul>
<li>Fruits
<ul>
<li>Pomme</li>
<li>Banane</li>
</ul>
</li>
<li>Légumes</li>
</ul>
// Liste non ordonnée imbriquée
6. Tableaux HTML
Balise Rôle
<table> Conteneur principal du tableau
<thead> Groupe l'en-tête du tableau
<tbody> Corps du tableau (données)
<tfoot> Pied du tableau
<tr> Ligne du tableau (table row)
<th> Cellule d'en-tête (gras, centré par défaut)
<td> Cellule de données
colspan="N" Fusionne N colonnes horizontalement
rowspan="N" Fusionne N lignes verticalement
<table border="1">
<thead>
<tr>
<th>Nom</th>
<th>Age</th>
<th>Ville</th>
</tr>
</thead>
<tbody>
<tr>
<td>Ahmed</td>
<td>22</td>
<td>Tunis</td>
</tr>
<tr>
<td colspan="2">Total</td> <!-- fusion 2 colonnes -->
<td>1 personne</td>
</tr>
</tbody>
</table>
// Tableau HTML complet avec fusion de colonnes
7. Formulaires HTML
Attribut/Balise Valeur Rôle
<form action> action="/submit" URL où envoyer les
données
<form method> method="POST" ou "GET" Méthode HTTP d'envoi
<input type> text, password, email, number, Type de champ
checkbox, radio, file, submit, reset,
date, color, range
<label> <label for="id">Texte</label> Étiquette liée à un champ
<textarea> <textarea rows="4"> Zone de texte multilignes
<select> <select><option>...</option></select> Menu déroulant
<button> <button Bouton cliquable
type="submit">Envoyer</button>
placeholder placeholder="Votre nom" Texte fantôme dans le
champ
required required Champ obligatoire
disabled disabled Champ désactivé
readonly readonly Champ lecture seule
min / max min="0" max="100" Valeurs min/max pour
number/date
pattern pattern="[A-Za-z]+" Validation par expression
régulière
<form action="/register" method="POST">
<label for="nom">Nom :</label>
<input type="text" id="nom" name="nom" placeholder="Votre nom" required>
<label for="email">Email :</label>
<input type="email" id="email" name="email" required>
<label for="mdp">Mot de passe :</label>
<input type="password" id="mdp" name="mdp" minlength="8" required>
<label for="age">Age :</label>
<input type="number" id="age" name="age" min="18" max="99">
<!-- Radio buttons -->
<input type="radio" name="genre" value="homme" id="h">
<label for="h">Homme</label>
<input type="radio" name="genre" value="femme" id="f">
<label for="f">Femme</label>
<!-- Case à cocher -->
<input type="checkbox" id="cgu" name="cgu">
<label for="cgu">J'accepte les CGU</label>
<!-- Menu déroulant -->
<select name="pays">
<option value="tn">Tunisie</option>
<option value="fr">France</option>
</select>
<button type="submit">Inscription</button>
<button type="reset">Effacer</button>
</form>
// Formulaire d'inscription complet
8. Images et Médias
Balise Attribut Rôle
<img> src="chemin" Source de l'image (obligatoire)
<img> alt="description" Texte alternatif (SEO +
accessibilité)
<img> width / height Dimensions en pixels
<img> loading="lazy" Chargement différé pour
performance
<video> src, controls, autoplay, loop, Vidéo avec contrôles
muted
<audio> src, controls, autoplay, loop Audio avec contrôles
<source> src, type Source alternative (multiple
formats)
<iframe> src, width, height, Intégrer un autre site/vidéo
allowfullscreen
<!-- Image simple -->
<img src="[Link]" alt="Ma photo" width="300" height="200">
<!-- Image responsive -->
<img src="[Link]" alt="Photo" style="max-width:100%;">
<!-- Vidéo avec fallback -->
<video width="640" height="360" controls>
<source src="video.mp4" type="video/mp4">
<source src="[Link]" type="video/webm">
Votre navigateur ne supporte pas la vidéo.
</video>
<!-- YouTube embed -->
<iframe width="560" height="315"
src="[Link]
allowfullscreen>
</iframe>
// Images et médias HTML
⚠️ Attention: L'attribut alt est OBLIGATOIRE sur toutes les images pour l'accessibilité et le
SEO.
9. Liens hypertextes
Type de lien Syntaxe Explication
Lien externe <a Ouvre un autre site web
href="[Link]
Lien interne <a href="[Link]">Contact</a> Vers une autre page du site
Ancre (#id) <a href="#section1">Aller à</a> Vers un endroit précis de la
page
Email <a Ouvre le client email
href="[Link]
Téléphone <a Appelle sur mobile
href="[Link]
Nouvel onglet target="_blank" Ouvre dans un nouvel
onglet
Télécharger download="nom" Force le téléchargement
10. ⚡ Différences importantes HTML
Concept 1 Concept 2 Différence clé
<b> <strong> <b> = gras visuel seulement.
<strong> = important
sémantiquement (lecteurs
d'écran, SEO)
<i> <em> <i> = italique visuel. <em> =
emphase sémantique
<div> <span> <div> = block (prend toute la
largeur). <span> = inline (reste
dans le flux)
id="x" class="x" id = unique sur la page. class =
peut se répéter sur plusieurs
éléments
href="" src="" href = lien/référence (a, link).
src = source de fichier (img,
script, video)
GET POST GET = données dans l'URL
(visible). POST = données
cachées dans le corps de la
requête
<input> <button> <input type='submit'> simple.
<button> peut contenir HTML à
l'intérieur
Concept 1 Concept 2 Différence clé
Block Inline Block = nouvelle ligne, prend
toute la largeur. Inline = dans le
texte
💡 Astuce examen: Pour mémoriser id vs class: pensez à la carte d'identité (unique) vs la
classe scolaire (plusieurs élèves).
11. ❌ Erreurs fréquentes en HTML
Erreur courante Mauvais exemple Bon exemple
Oublier de fermer une balise <p>Texte <div>... <p>Texte</p><div>...
Imbriquer incorrectement <b><p>texte</b></p> <p><b>texte</b></p>
Oublier alt sur img <img src="[Link]"> <img src="[Link]" alt="desc">
Mauvais doctype <!DOCTYPE HTML PUBLIC...> <!DOCTYPE html>
id dupliqué <div id="box">...<div id="box"> Utiliser des class à la place
Pas de charset (pas de meta charset) <meta charset="UTF-8">
Oublier le viewport (pas de meta viewport) <meta name="viewport" ...>
🔵 CSS
Cascading Style Sheets
1. Définition
CSS (Cascading Style Sheets) est le langage utilisé pour styliser et mettre en forme les pages HTML.
Il contrôle les couleurs, polices, espacements, animations, et la mise en page (layout).
2. Syntaxe CSS de base
/* Règle CSS = sélecteur + { déclarations } */
sélecteur {
propriété: valeur; /* Déclaration */
propriété2: valeur2;
}
/* Exemple concret */
h1 {
color: blue; /* couleur du texte */
font-size: 32px; /* taille du texte */
text-align: center; /* centrer */
}
// Syntaxe de base CSS
3. Sélecteurs CSS
Sélecteur Syntaxe Cible Priorité
Balise p{} Tous les <p> 1 (faible)
Classe .box { } Tous les class="box" 10
ID #header { } L'élément id="header" 100
Universel *{} Tous les éléments 0
Descendant div p { } Tout <p> dans un
<div>
Enfant direct div > p { } <p> enfant direct de
<div>
Adjacent h1 + p { } <p> juste après <h1>
Attribut input[type='text'] Input de type text
Pseudo-classe a:hover { } Lien survolé
Pseudo-classe li:first-child Premier enfant
Pseudo-classe li:nth-child(2) Deuxième enfant
Pseudo-élément p::before Avant le contenu de p
Pseudo-élément p::after Après le contenu de p
Groupement h1, h2, h3 { } h1 ET h2 ET h3
Sélecteur Syntaxe Cible Priorité
!important color: red !important; Force la règle (priorité Éviter
max)
/* Exemples de sélecteurs */
.card { border: 1px solid gray; } /* Classe */
#menu { background: navy; } /* ID */
nav a:hover { color: orange; } /* Pseudo-classe */
p::first-letter { font-size: 2em; } /* Pseudo-élément */
input[type='email'] { border: 2px solid blue; } /* Attribut */
li:nth-child(odd) { background: #f0f0f0; } /* Impairs */
// Exemples de sélecteurs CSS
4. Couleurs CSS
Format Exemple Description
Nom color: red; 147 noms prédéfinis
HEX color: #FF0000; #RRGGBB (rouge, vert, bleu
en hexadécimal)
HEX court color: #F00; Raccourci quand chaque paire
est identique
RGB color: rgb(255,0,0); Rouge Vert Bleu (0-255)
RGBA color: rgba(255,0,0,0.5); RGB + opacité (0=transparent,
1=opaque)
HSL color: hsl(0,100%,50%); Teinte, Saturation, Luminosité
HSLA color: hsla(0,100%,50%,0.8); HSL + opacité
5. Le Box Model CSS 📦
Chaque élément HTML est une boîte composée de 4 couches (de l'intérieur vers l'extérieur) :
+-------------------------------+
| MARGIN | ← Espace EXTÉRIEUR (transparent)
| +-------------------------+ |
| | BORDER | | ← Bordure
| | +-------------------+ | |
| | | PADDING | | | ← Espace INTÉRIEUR
| | | +-------------+ | | |
| | | | CONTENT | | | | ← Contenu (texte, image...)
| | | +-------------+ | | |
| | +-------------------+ | |
| +-------------------------+ |
+-------------------------------+
Propriété Exemple Rôle
margin margin: 20px; Espace EXTÉRIEUR (entre
éléments)
Propriété Exemple Rôle
margin margin: 10px 20px; Haut/Bas = 10px,
Droite/Gauche = 20px
margin margin: 5px 10px 15px 20px; Haut, Droite, Bas, Gauche
(sens horaire)
margin: auto margin: 0 auto; Centrer horizontalement un
bloc
padding padding: 15px; Espace INTÉRIEUR
border border: 2px solid red; Bordure (épaisseur, style,
couleur)
border-radius border-radius: 10px; Coins arrondis
border-radius: 50% border-radius: 50%; Cercle parfait
box-sizing box-sizing: border-box; Inclut padding+border dans la
largeur
width / height width: 300px; Largeur / Hauteur du contenu
max-width max-width: 1200px; Largeur maximale
min-height min-height: 100vh; Hauteur minimale
💡 box-sizing: border-box: Toujours mettre * { box-sizing: border-box; } en début de CSS. Ça
évite les calculs de largeur compliqués.
6. Display & Position
Propriété Valeur Comportement
display block Prend toute la largeur, nouvelle
ligne (div, p, h1)
display inline Dans le flux, taille du contenu
(span, a, strong)
display inline-block Inline mais peut avoir
width/height
display flex Conteneur Flexbox
display grid Conteneur Grid
display none Cache complètement l'élément
(pas d'espace)
visibility hidden Cache mais conserve l'espace
position static Normal (par défaut)
position relative Décalé par rapport à sa
position normale
position absolute Positionné par rapport au
parent positionné
Propriété Valeur Comportement
position fixed Fixé par rapport à la fenêtre
(navbar sticky)
position sticky Normal puis fixed quand on
défile
top/left/right/bottom top: 10px; Utilisé avec position (sauf
static)
z-index z-index: 100; Ordre en profondeur (qui passe
devant)
overflow overflow: hidden; Que faire si le contenu dépasse
7. Flexbox
Flexbox est un système de mise en page 1D (une direction). Parfait pour aligner des éléments en
ligne ou en colonne.
/* Activer Flexbox sur le conteneur */
.container {
display: flex;
flex-direction: row; /* row | column | row-reverse */
justify-content: center; /* axe principal */
align-items: center; /* axe transversal */
flex-wrap: wrap; /* passer à la ligne si nécessaire */
gap: 20px; /* espace entre éléments */
}
/* Sur les enfants (flex items) */
.item {
flex: 1; /* grandir pour remplir l'espace */
flex-grow: 1; /* facteur de croissance */
flex-shrink: 0; /* ne pas rétrécir */
flex-basis: 200px; /* taille de base */
align-self: flex-end; /* override align-items pour cet item */
order: 2; /* changer l'ordre d'affichage */
}
// Flexbox - conteneur et items
Propriété Valeurs Rôle (Conteneur)
justify-content flex-start, flex-end, center, Alignement sur l'axe principal
space-between, space-around,
space-evenly
align-items flex-start, flex-end, center, Alignement sur l'axe
stretch, baseline transversal
flex-direction row, column, row-reverse, Direction des items
column-reverse
flex-wrap nowrap, wrap, wrap-reverse Retour à la ligne
gap gap: 10px 20px; Espace entre les items (row-
gap col-gap)
8. CSS Grid
Grid est un système de mise en page 2D (lignes ET colonnes). Parfait pour les layouts complexes.
.container {
display: grid;
grid-template-columns: 200px 1fr 1fr; /* 3 colonnes */
grid-template-rows: 80px auto 60px; /* 3 lignes */
gap: 10px; /* espace entre cellules */
grid-template-areas:
'header header header'
'sidebar main main '
'footer footer footer';
}
.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.main { grid-area: main; }
.footer { grid-area: footer; }
/* Raccourcis pour colonnes répétées */
.grid { grid-template-columns: repeat(3, 1fr); } /* 3 colonnes
égales */
.grid { grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); } /*
responsive */
/* Placement manuel d'un item */
.special {
grid-column: 1 / 3; /* de colonne 1 à 3 (span 2 colonnes) */
grid-row: 2 / 4; /* de ligne 2 à 4 */
}
// CSS Grid - layout complet
Propriété Exemple Rôle
grid-template-columns repeat(3, 1fr) Définit les colonnes
grid-template-rows 100px auto Définit les lignes
gap gap: 20px Espace entre cellules
grid-area grid-area: header Nomme la zone pour template-
areas
grid-column 1/3 L'item s'étend de la colonne 1 à
3
grid-row 2/4 L'item s'étend de la ligne 2 à 4
fr 1fr Fraction de l'espace disponible
auto-fit + minmax repeat(auto-fit, minmax(250px, Colonnes responsives
1fr)) automatiques
9. Typographie
Propriété Exemple Rôle
font-family font-family: 'Arial', sans-serif; Police de caractères
font-size font-size: 16px; Taille du texte
font-weight font-weight: bold; ou 700; Épaisseur (100-900)
Propriété Exemple Rôle
font-style font-style: italic; Normal, italic, oblique
line-height line-height: 1.6; Interlignage
letter-spacing letter-spacing: 2px; Espacement entre lettres
text-align text-align: center; Alignement (left, center, right,
justify)
text-decoration text-decoration: underline; Soulignement, barré, etc.
text-transform text-transform: uppercase; MAJUSCULES, minuscules,
Capitalize
text-shadow text-shadow: 2px 2px 4px gray; Ombre du texte
white-space white-space: nowrap; Gestion des espaces/retours
word-break word-break: break-all; Coupure des mots longs
10. Background (Arrière-plan)
Propriété Exemple Rôle
background-color background-color: #f0f0f0; Couleur de fond
background-image background-image: url('[Link]'); Image de fond
background-size background-size: cover; cover=remplit tout,
contain=visible entier
background-position background-position: center; Position de l'image
background-repeat background-repeat: no-repeat; Répétition de l'image
background-attachment background-attachment: fixed; Effet parallaxe
background (raccourci) background: url('[Link]') Tout en une propriété
center/cover no-repeat;
Dégradé linéaire background: linear-gradient(to Dégradé
right, red, blue);
Dégradé radial background: radial- Dégradé circulaire
gradient(circle, red, blue);
11. Animations et Transitions
/* ══ TRANSITION ══ */
/* Changement progressif quand une propriété change */
.btn {
background: blue;
transition: background 0.3s ease; /* propriété durée timing */
}
.btn:hover { background: red; } /* déclenché au survol */
/* ══ ANIMATION ══ */
/* D'abord définir les keyframes */
@keyframes bouncer {
0% { transform: translateY(0); }
50% { transform: translateY(-30px); }
100% { transform: translateY(0); }
}
/* Ensuite appliquer l'animation */
.ball {
animation: bouncer 1s ease-in-out infinite;
/* nom durée timing répétition */
}
/* ══ TRANSFORM ══ */
.box {
transform: rotate(45deg); /* rotation */
transform: scale(1.5); /* agrandir x1.5 */
transform: translateX(50px); /* déplacer horizontalement */
transform: skew(10deg); /* incliner */
}
// Transitions, Animations et Transforms
Propriété animation Valeur exemple Rôle
animation-name bouncer Nom du @keyframes
animation-duration 1s Durée
animation-timing-function ease, linear, ease-in-out Courbe de vitesse
animation-iteration-count infinite, 3 Nombre de répétitions
animation-direction alternate Normal, reverse, alternate
animation-delay 0.5s Délai avant début
animation-fill-mode forwards État final après animation
12. Responsive Design & Media Queries
Le responsive design adapte la mise en page à la taille de l'écran. On utilise les media queries pour
ça.
/* Mobile First: on code d'abord pour mobile, puis on adapte */
/* Styles de base (mobile) */
.container { width: 100%; padding: 10px; }
.grid { grid-template-columns: 1fr; } /* 1 colonne sur mobile */
/* Tablette (768px et +) */
@media (min-width: 768px) {
.container { max-width: 768px; margin: 0 auto; }
.grid { grid-template-columns: repeat(2, 1fr); } /* 2 colonnes */
}
/* Desktop (1024px et +) */
@media (min-width: 1024px) {
.container { max-width: 1200px; }
.grid { grid-template-columns: repeat(3, 1fr); } /* 3 colonnes */
}
/* Mode sombre */
@media (prefers-color-scheme: dark) {
body { background: #1a1a1a; color: white; }
}
/* Impression */
@media print {
nav, footer { display: none; }
}
// Media Queries - approche Mobile First
Breakpoint commun Taille Cible
xs < 576px Petit mobile
sm ≥ 576px Mobile normal
md ≥ 768px Tablette
lg ≥ 1024px Laptop
xl ≥ 1280px Desktop
2xl ≥ 1536px Grand écran
13. Variables CSS (Custom Properties)
/* Déclarer des variables dans :root */
:root {
--primary-color: #264DE4;
--font-size-base: 16px;
--spacing-lg: 32px;
--border-radius: 8px;
}
/* Utiliser les variables */
.btn {
background-color: var(--primary-color);
font-size: var(--font-size-base);
padding: var(--spacing-lg);
border-radius: var(--border-radius);
}
/* Valeur par défaut si variable non définie */
.box { color: var(--text-color, black); }
// Variables CSS - réutilisabilité
14. ⚡ Différences importantes CSS
Concept 1 Concept 2 Différence clé
margin padding Margin = espace extérieur
(entre éléments). Padding =
espace intérieur
display: none visibility: hidden none = supprime l'espace.
hidden = garde l'espace mais
invisible
position: absolute position: fixed absolute = relatif au parent
positionné. fixed = relatif à la
fenêtre
Concept 1 Concept 2 Différence clé
em rem em = relatif au parent. rem =
relatif à la racine (html)
% vw/vh % = relatif au parent. vw/vh =
relatif à la fenêtre (viewport)
Flexbox Grid Flex = 1D (une direction). Grid
= 2D (lignes + colonnes)
transition animation Transition = changement entre
2 états. Animation = séquence
avec keyframes
class vs id CSS priorité id (100) > class (10) > balise
(1)
border-box content-box border-box: width inclut
padding+border. content-box
(défaut): width = contenu seul
min-width max-width min-width: écrans >= X. max-
width: écrans <= X
🟡 JavaScript
Le langage de programmation du Web
1. Définition
JavaScript est le langage de programmation du web qui rend les pages interactives. Il peut modifier le
HTML/CSS, communiquer avec des serveurs, et créer des applications complexes.
2. Variables : let, var, const
Mot-clé Portée Réassignable? Redéclarable? Hoisting?
var Fonction Oui Oui Oui
(undefined)
let Bloc {} Oui Non TDZ
const Bloc {} Non Non TDZ
// let : pour les valeurs qui changent
let compteur = 0;
compteur = 1; // OK
// const : pour les valeurs fixes
const PI = 3.14159;
// PI = 3; // ERREUR: Assignment to constant
// const avec objet : l'objet peut être modifié!
const user = { nom: 'Ahmed' };
[Link] = 'Ali'; // OK (on modifie l'objet, pas la référence)
// user = {}; // ERREUR
// var : portée de fonction (éviter en JS moderne)
function test() {
var x = 10;
if (true) {
var x = 20; // MÊME variable (remplace!)
let y = 30; // variable différente (bloc)
}
[Link](x); // 20 (var ignorait le bloc)
}
// let vs var vs const
💡 Règle d'or: Toujours utiliser const par défaut. Si la valeur change, utiliser let. Ne jamais
utiliser var.
3. Types de données
Type Exemple Vérification
String 'Bonjour' ou "Hello" ou `Texte` typeof x === 'string'
Number 42, 3.14, -10, Infinity, NaN typeof x === 'number'
Boolean true, false typeof x === 'boolean'
Type Exemple Vérification
undefined let x; // pas assigné typeof x === 'undefined'
null let x = null; // vide intentionnel x === null
Object { nom: 'Ali', age: 22 } typeof x === 'object'
Array [1, 2, 3] [Link](x)
Function function() { } typeof x === 'function'
Symbol Symbol('id') typeof x === 'symbol'
BigInt 9007199254740991n typeof x === 'bigint'
// Template literals (backticks) - très utiles!
const prenom = 'Ahmed';
const age = 22;
const message = `Bonjour ${prenom}, tu as ${age} ans!`;
// Résultat: 'Bonjour Ahmed, tu as 22 ans!'
// Conversions
Number('42'); // 42 (string -> number)
String(42); // '42' (number -> string)
Boolean(0); // false
Boolean(''); // false
Boolean('hello'); // true
parseInt('42.5px'); // 42 (arrête aux non-chiffres)
parseFloat('42.5px'); // 42.5
// Types et conversions en JavaScript
4. Opérateurs
Opérateur Exemple Résultat
== 5 == '5' true (compare valeur, pas type)
=== 5 === '5' false (compare valeur ET type)
!= 5 != '5' false
!== 5 !== '5' true
&& true && false false (ET logique)
|| true || false true (OU logique)
! !true false (NON logique)
?? null ?? 'défaut' 'défaut' (nullish coalescing)
?. user?.adresse?.ville undefined (optional chaining)
... (spread) [...arr1, ...arr2] Fusion de tableaux
... (rest) function(...args) Paramètres variables
ternaire x > 0 ? 'pos' : 'neg' Condition courte
⚠️ Attention: Toujours utiliser === et !== (comparaison stricte). L'opérateur == peut causer des
bugs surprenants (0 == false est true!).
5. Structures conditionnelles
// ══ IF / ELSE IF / ELSE ══
const note = 14;
if (note >= 18) {
[Link]('Excellent');
} else if (note >= 14) {
[Link]('Bien'); // ← exécuté ici
} else if (note >= 10) {
[Link]('Passable');
} else {
[Link]('Insuffisant');
}
// ══ SWITCH ══
const jour = 'lundi';
switch(jour) {
case 'lundi':
[Link]('Début de semaine');
break; // IMPORTANT: sans break, continue au suivant
case 'vendredi':
[Link]('Fin de semaine');
break;
default:
[Link]('Milieu de semaine');
}
// ══ TERNAIRE ══ (if/else court)
const statut = note >= 10 ? 'Reçu' : 'Recalé';
// ══ NULLISH COALESCING ?? ══
const nom = null ?? 'Anonyme'; // 'Anonyme'
const nom2 = '' ?? 'Anonyme'; // '' (car '' n'est pas null/undefined)
const nom3 = '' || 'Anonyme'; // 'Anonyme' (car '' est falsy avec ||)
// Conditions en JavaScript
6. Boucles
// ══ FOR ══
for (let i = 0; i < 5; i++) {
[Link](i); // 0, 1, 2, 3, 4
}
// ══ WHILE ══
let compteur = 0;
while (compteur < 3) {
[Link](compteur++); // 0, 1, 2
}
// ══ DO...WHILE ══ (s'exécute au moins 1 fois)
do {
[Link]('Au moins une fois');
} while (false);
// ══ FOR...OF ══ (valeurs d'un tableau/itérable)
const fruits = ['pomme', 'banane', 'cerise'];
for (const fruit of fruits) {
[Link](fruit); // pomme, banane, cerise
}
// ══ FOR...IN ══ (clés d'un objet)
const user = { nom: 'Ahmed', age: 22 };
for (const cle in user) {
[Link](`${cle}: ${user[cle]}`); // nom: Ahmed, age: 22
}
// break = arrêter la boucle
// continue = passer à l'itération suivante
// Toutes les boucles JavaScript
7. Fonctions
// ══ Fonction classique (declaration) ══
function additionner(a, b) {
return a + b;
}
[Link](additionner(3, 4)); // 7
// ══ Fonction expression ══
const multiplier = function(a, b) {
return a * b;
};
// ══ Arrow Function ══ (ES6)
const diviser = (a, b) => a / b; // retour implicite si 1 expression
const carre = x => x * x; // 1 paramètre: pas besoin de ()
const greet = (nom) => { // plusieurs instructions: {} et return
const msg = `Bonjour ${nom}`;
return msg;
};
// ══ Paramètres par défaut ══
function saluer(nom = 'Inconnu') {
return `Salut ${nom}!`;
}
saluer(); // 'Salut Inconnu!'
saluer('Ahmed'); // 'Salut Ahmed!'
// ══ Rest parameters ══
function somme(...nombres) {
return [Link]((acc, n) => acc + n, 0);
}
somme(1, 2, 3, 4); // 10
// Déclaration de fonctions en JavaScript
Type Syntaxe Hoisting? this?
Declaration function nom() { } Oui Contexte d'appel
Expression const f = function() { } Non Contexte d'appel
Arrow const f = () => { } Non Hérité du parent
💡 Arrow vs function: Les arrow functions n'ont pas leur propre 'this'. Utiliser function classique
pour les méthodes d'objets. Utiliser arrow pour les callbacks.
8. Tableaux (Arrays)
Méthode Exemple Rôle Modifie l'original?
push() [Link](5) Ajoute à la fin Oui
pop() [Link]() Supprime le dernier Oui
unshift() [Link](0) Ajoute au début Oui
shift() [Link]() Supprime le premier Oui
splice() [Link](1, 2) Supprime/insère Oui
sort() [Link]((a,b) => a-b) Trie Oui
reverse() [Link]() Inverse Oui
map() [Link](x => x*2) Transforme chaque Non
élément → nouveau
tableau
filter() [Link](x => x > 0) Filtre les éléments → Non
nouveau tableau
reduce() [Link]((acc,x) => Réduit à une valeur Non
acc+x, 0)
find() [Link](x => x > 5) Trouve le premier Non
élément
findIndex() [Link](x => x > Trouve l'index Non
5)
includes() [Link](3) Vérifie si élément Non
existe
indexOf() [Link](3) Trouve l'index (ou -1) Non
join() [Link](', ') Convertit en string Non
slice() [Link](1, 3) Extrait une portion Non
flat() [Link]() Aplatit un tableau Non
imbriqué
forEach() [Link](x => Itère (pas de retour) Non
[Link](x))
every() [Link](x => x > 0) true si TOUS validés Non
some() [Link](x => x > 0) true si AU MOINS UN Non
validé
concat() [Link](arr2) Fusionne tableaux Non
spread [...arr] [...arr1, ...arr2] Copie/fusionne Non
const nombres = [1, 2, 3, 4, 5, 6];
// map : transformer
const doubles = [Link](n => n * 2);
// [2, 4, 6, 8, 10, 12]
// filter : filtrer
const pairs = [Link](n => n % 2 === 0);
// [2, 4, 6]
// reduce : calculer
const somme = [Link]((acc, n) => acc + n, 0);
// 21
// Chaînage (chaining)
const resultat = nombres
.filter(n => n > 2)
.map(n => n * 10)
.reduce((acc, n) => acc + n, 0);
// (3+4+5+6)*10 = 180
// Méthodes fonctionnelles sur les tableaux
9. Objets (Objects)
// ══ Créer un objet ══
const personne = {
nom: 'Ahmed',
age: 22,
ville: 'Tunis',
saluer: function() { // méthode
return `Je suis ${[Link]}`;
}
};
// ══ Accéder aux propriétés ══
[Link]; // 'Ahmed' (notation point)
personne['age']; // 22 (notation crochets)
// ══ Modifier / Ajouter ══
[Link] = 23;
[Link] = 'ahmed@[Link]'; // nouvelle propriété
// ══ Supprimer ══
delete [Link];
// ══ Destructuring ══
const { nom, age } = personne;
const { nom: prenom, age: annees } = personne; // renommer
// ══ Spread Operator ══
const personne2 = { ...personne, age: 25 }; // copier + modifier
// ══ Object methods utiles ══
[Link](personne); // ['nom', 'age', ...]
[Link](personne); // ['Ahmed', 22, ...]
[Link](personne); // [['nom', 'Ahmed'], ['age', 22], ...]
// ══ Vérifier si propriété existe ══
'nom' in personne; // true
[Link]('nom'); // true
// Objets JavaScript
10. Le DOM (Document Object Model)
Le DOM représente la page HTML comme un arbre d'objets JavaScript. On peut lire et modifier
n'importe quel élément de la page.
Méthode Syntaxe Rôle
getElementById [Link]('id') Sélectionne par id (un
seul)
querySelector [Link]('.classe') Sélectionne le premier
(CSS selector)
querySelectorAll [Link]('p') Sélectionne tous
(NodeList)
getElementsByClassName [Link]('cls') Par classe
(HTMLCollection)
getElementsByTagName [Link]('p') Par balise
(HTMLCollection)
createElement [Link]('div') Crée un nouvel
élément
appendChild [Link](enfant) Ajoute à la fin du parent
removeChild [Link](enfant) Supprime un enfant
remove() [Link]() Supprime l'élément lui-
même
insertBefore [Link](new, ref) Insère avant un
élément
innerHTML [Link] = '<b>Texte</b>' HTML interne (avec
balises)
textContent [Link] = 'Texte' Texte uniquement (plus
sûr)
value [Link] Valeur d'un
input/textarea
style [Link] = 'red' Style inline CSS
classList [Link]('active') Gérer les classes CSS
setAttribute [Link]('href', '#') Définir un attribut
getAttribute [Link]('href') Lire un attribut
// ══ Sélectionner des éléments ══
const btn = [Link]('#monBouton');
const tous = [Link]('.carte');
// ══ Modifier le contenu ══
[Link] = 'Nouveau texte';
[Link] = '<b>Texte gras</b>';
// ══ Modifier les classes ══
[Link]('actif');
[Link]('actif');
[Link]('actif'); // ajoute si absent, enlève si présent
[Link]('actif'); // true/false
// ══ Créer et ajouter des éléments ══
const div = [Link]('div');
[Link] = 'Nouveau div';
[Link]('card');
[Link](div);
// ══ Modifier le style ══
[Link] = 'blue';
[Link] = '20px';
// Manipulation du DOM
11. Événements (Events)
Événement Déclencheur
click Clic sur l'élément
dblclick Double-clic
mouseover / mouseout Souris entre / sort
mousemove Souris se déplace
keydown / keyup / keypress Touche du clavier pressée/relâchée
input Chaque frappe dans un input
change Valeur changée (et confirmée)
submit Formulaire soumis
focus / blur Champ actif / désactivé
load Page entièrement chargée
DOMContentLoaded HTML chargé (avant images/CSS)
scroll Défilement de la page
resize Fenêtre redimensionnée
contextmenu Clic droit
touchstart / touchend Tactile (mobile)
// ══ addEventListener ══ (méthode recommandée)
const btn = [Link]('#btn');
[Link]('click', function(event) {
[Link]('Cliqué!');
[Link]([Link]); // l'élément cliqué
});
// Arrow function
[Link]('click', (e) => {
[Link](); // empêcher comportement par défaut
[Link](); // arrêter la propagation
});
// ══ Retirer un écouteur ══
[Link]('click', maFonction);
// ══ Exemple formulaire ══
const form = [Link]('form');
[Link]('submit', (e) => {
[Link](); // empêcher l'envoi par défaut
const nom = [Link]('#nom').value;
[Link]('Nom:', nom);
});
// ══ Délégation d'événements ══
[Link]('ul').addEventListener('click', (e) => {
if ([Link] === 'LI') {
[Link]('actif');
}
});
// Gestion des événements
12. Fetch, Promises, Async/Await
Fetch permet de faire des requêtes HTTP (appels API) depuis JavaScript. Les Promises et
async/await gèrent les opérations asynchrones.
// ══ PROMISE ══
const maPromesse = new Promise((resolve, reject) => {
const succes = true;
if (succes) resolve('Données reçues!');
else reject('Erreur!');
});
maPromesse
.then(data => [Link](data)) // succès
.catch(err => [Link](err)) // erreur
.finally(() => [Link]('Fin')); // toujours exécuté
// ══ FETCH avec .then() ══
fetch('[Link]
.then(response => {
if (![Link]) throw new Error('Erreur HTTP: ' + [Link]);
return [Link](); // parse le JSON
})
.then(data => [Link](data))
.catch(err => [Link](err));
// ══ ASYNC / AWAIT ══ (plus lisible)
async function chargerUtilisateurs() {
try {
const response = await fetch('[Link]
if (![Link]) throw new Error('Erreur ' + [Link]);
const data = await [Link]();
[Link](data);
return data;
} catch (erreur) {
[Link]('Problème:', [Link]);
}
}
// ══ POST avec Fetch ══
async function creerUtilisateur(nomUtilisateur) {
const response = await fetch('[Link] {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: [Link]({ nom: nomUtilisateur })
});
return await [Link]();
}
// Fetch, Promises et Async/Await
13. JSON (JavaScript Object Notation)
// JSON = format de données texte, ressemble à un objet JS
// ══ Convertir objet JS → JSON string ══
const user = { nom: 'Ahmed', age: 22 };
const jsonString = [Link](user);
// '{"nom":"Ahmed","age":22}'
// ══ Convertir JSON string → objet JS ══
const obj = [Link](jsonString);
// { nom: 'Ahmed', age: 22 }
// JSON avec formatage lisible
[Link](user, null, 2);
// {
// "nom": "Ahmed",
// "age": 22
// }
// JSON - sérialisation et désérialisation
14. localStorage et sessionStorage
API Durée de vie Méthodes
localStorage Permanente (jusqu'à setItem, getItem, removeItem,
effacement) clear
sessionStorage Session (onglet fermé = perdu) setItem, getItem, removeItem,
clear
// ══ localStorage ══
// Stocker (seulement des strings!)
[Link]('nom', 'Ahmed');
[Link]('user', [Link]({ nom: 'Ahmed', age: 22 }));
// Lire
const nom = [Link]('nom'); // 'Ahmed'
const user = [Link]([Link]('user'));
// Supprimer
[Link]('nom');
[Link](); // tout effacer
// localStorage - persister des données
15. Gestion des erreurs (try/catch)
try {
// Code qui peut échouer
const data = [Link]('json invalide{{{');
[Link](data);
} catch (erreur) {
// Gérer l'erreur
[Link]('Erreur:', [Link]);
} finally {
// Toujours exécuté (avec ou sans erreur)
[Link]('Bloc terminé');
}
// ══ Lancer une erreur personnalisée ══
function diviser(a, b) {
if (b === 0) throw new Error('Division par zéro impossible!');
return a / b;
}
// Try/Catch/Finally
16. ⚡ Différences importantes JavaScript
Concept 1 Concept 2 Différence clé
== === == compare valeur seulement.
=== compare valeur ET type
let var let = portée bloc {}. var = portée
fonction (éviter var)
null undefined null = vide intentionnel.
undefined = pas encore défini
function arrow function function a son propre this.
Arrow hérite le this du parent
forEach map forEach = pas de retour. map =
retourne un nouveau tableau
innerHTML textContent innerHTML interprète le HTML.
textContent = texte pur (plus
sûr)
querySelector getElementById querySelector = plus flexible
(CSS selectors).
getElementById = plus rapide
async/await .then/.catch async/await = plus lisible. .then
= chaînable. Les deux gèrent
les Promises
localStorage sessionStorage localStorage = permanent.
sessionStorage = onglet
seulement
spread ... rest ... spread = étaler un
tableau/objet. rest = collecter
en tableau
for...of for...in for...of = valeurs (tableaux).
for...in = clés (objets)
🚀 Mini Projets Complets
Projet 1 : Compteur cliquable
<!-- HTML -->
<div id='app'>
<h2 id='display'>0</h2>
<button id='dec'>-</button>
<button id='reset'>Reset</button>
<button id='inc'>+</button>
</div>
/* CSS */
#app { text-align: center; font-family: Arial; padding: 40px; }
button { padding: 10px 20px; font-size: 20px; margin: 5px; cursor: pointer;
}
#display { font-size: 60px; color: #264DE4; }
// JavaScript
let count = 0;
const display = [Link]('display');
[Link]('inc').addEventListener('click', () => {
count++;
[Link] = count;
});
[Link]('dec').addEventListener('click', () => {
count--;
[Link] = count;
});
[Link]('reset').addEventListener('click', () => {
count = 0;
[Link] = count;
});
// Compteur - utilise DOM + Events + Variables
Projet 2 : Liste de tâches (To-Do List)
<!-- HTML -->
<div id='todo-app'>
<input type='text' id='task-input' placeholder='Nouvelle tâche...'>
<button id='add-btn'>Ajouter</button>
<ul id='task-list'></ul>
</div>
// JavaScript complet
const input = [Link]('task-input');
const list = [Link]('task-list');
const addBtn = [Link]('add-btn');
function addTask() {
const taskText = [Link]();
if (!taskText) return; // validation
const li = [Link]('li');
[Link] = `
<span class='task-text'>${taskText}</span>
<button class='delete-btn'>Supprimer</button>
`;
// Marquer comme terminé au clic
[Link]('.task-text').addEventListener('click', () => {
[Link]('done');
});
// Supprimer la tâche
[Link]('.delete-btn').addEventListener('click', () => {
[Link]();
});
[Link](li);
[Link] = ''; // vider l'input
}
[Link]('click', addTask);
// Ajouter avec Entrée
[Link]('keydown', (e) => {
if ([Link] === 'Enter') addTask();
});
// To-Do List - utilise DOM, Events, Arrays, Functions
Projet 3 : Appel API (fetch)
<!-- HTML -->
<div>
<button id='load-btn'>Charger utilisateurs</button>
<div id='result'></div>
</div>
// JavaScript - Appel API REST
[Link]('load-btn').addEventListener('click', async () => {
const resultDiv = [Link]('result');
[Link] = '<p>Chargement...</p>';
try {
const response = await
fetch('[Link]
if (![Link]) throw new Error('Erreur: ' + [Link]);
const users = await [Link]();
[Link] = [Link](user => `
<div class='user-card'>
<h3>${[Link]}</h3>
<p>📧 ${[Link]}</p>
<p>🌐 ${[Link]}</p>
</div>
`).join('');
} catch (erreur) {
[Link] = `<p style='color:red'>Erreur:
${[Link]}</p>`;
}
});
// Fetch API - données réelles de [Link]
📋 RÉSUMÉ FINAL & ASTUCES EXAMEN
Syntaxes à mémoriser absolument
Technologie Syntaxe clé À retenir
HTML <!DOCTYPE html> Toujours en première ligne
HTML <meta charset="UTF-8"> Dans <head>, encodage
HTML <link rel="stylesheet" Lier le CSS
href="[Link]">
HTML <script src="[Link]" defer> Lier le JS (defer = après
HTML)
CSS box-sizing: border-box; * { box-sizing: border-box; }
CSS display: flex; justify-content: Centrer avec flex
center; align-items: center;
CSS @media (min-width: 768px) { } Media query tablet+
CSS position: absolute; top: 0; left: 0; Positionnement absolu
JS [Link]('#id') Sélectionner un élément
JS [Link]('click', Écouter un événement
callback)
JS const res = await fetch(url); Appel API
const data = await [Link]();
JS [Link]() / [Link]() Conversion JSON
JS [Link]() / .filter() / .reduce() Méthodes fonctionnelles
⚠️ Pièges d'examen les plus fréquents
Piège Erreur fréquente Bonne pratique
== vs === Utiliser == pour comparer Toujours utiliser ===
var vs let Utiliser var dans une boucle Utiliser let ou const
Oublier return function sans return Vérifier que la fonction retourne
bien
async sans await fetch sans await Mettre await devant chaque
Promise
innerHTML XSS innerHTML avec données Préférer textContent pour texte
utilisateur
[Link]() Oublier sur les forms Toujours l'appeler pour les
formulaires
Portée var var dans un if/for Préférer let (portée bloc)
Alt manquant img sans alt Toujours mettre alt='...'
Piège Erreur fréquente Bonne pratique
Fermer les balises Oublier </div>, </p>... Indenter et vérifier
null vs undefined Confondre les deux null=intentionnel,
undefined=pas défini
🎯 Conseil ultime examen: Lisez bien la question, commentez votre code, indentez
proprement. Un code lisible et bien structuré gagne des points même s'il est incomplet.
🌟 Bonne chance à l'examen! 🌟
HTML • CSS • JavaScript — Résumé complet 2025-2026