📘 Les attributs HTML
En HTML, les attributs permettent d'ajouter des informations supplémentaires aux balises.
Exemple :
<p align="center">Texte centré</p>
Dans cet exemple :
p= la balise paragraphealign= l'attribut"center"= la valeur de l'attribut
⚠️ L'attribut align
L'attribut align est un ancien attribut HTML (HTML 4).
Exemples :
<p align="left">Texte à gauche</p>
<p align="center">Texte centré</p>
<p align="right">Texte à droite</p>
<p align="justify">Texte justifié</p>
Il fonctionne encore dans de nombreux navigateurs, mais il est aujourd'hui déconseillé.
La méthode moderne utilise CSS.
Exemple :
<p style="text-align:center;">
Texte centré
</p>
Ou mieux :
<p class="centre">
Texte centré
</p>
Avec une feuille de style :
.centre {
text-align:center;
}
📝 Les attributs HTML généraux
Ces attributs peuvent être utilisés sur la plupart des balises.
| Attribut | Exemple | Utilité |
|---|---|---|
id |
<p id="intro"> |
Identifiant unique |
class |
<p class="important"> |
Classe CSS |
style |
<p style="color:red"> |
Style directement dans la balise |
title |
<p title="information"> |
Texte affiché au survol |
lang |
<html lang="fr"> |
Langue du document |
hidden |
<div hidden> |
Masquer un élément |
data-* |
<div data-id="25"> |
Données personnalisées |
🆔 Attribut id
L'attribut id donne un identifiant unique à un élément.
Exemple :
<div id="menu">
Contenu du menu
</div>
Il peut être utilisé avec :
- CSS
- JavaScript
- des liens internes
Exemple :
<a href="#contact">
Aller au contact
</a>
<div id="contact">
Contact
</div>
🎨 Attribut class
L'attribut class permet d'appliquer un même style à plusieurs éléments.
Exemple :
<p class="important">
Attention
</p>
<p class="important">
Information importante
</p>
CSS associé :
.important {
color:red;
font-weight:bold;
}
🖌️ Attribut style
Permet d'ajouter directement du CSS dans une balise.
Exemple :
<p style="color:blue;">
Texte bleu
</p>
Cependant, il est préférable d'utiliser une feuille CSS séparée.
🖼️ Les attributs des images
Exemple :
<img
src="photo.jpg"
alt="Photo de paysage"
width="300"
height="200">
Attributs :
| Attribut | Rôle |
|---|---|
src |
Adresse de l'image |
alt |
Texte alternatif |
width |
Largeur |
height |
Hauteur |
loading="lazy" |
Chargement différé |
Exemple :
<img src="photo.jpg" alt="Montagne" loading="lazy">
🔗 Les attributs des liens
Exemple :
<a href="page.html" target="_blank">
Ouvrir la page
</a>
Attributs :
| Attribut | Rôle |
|---|---|
href |
Adresse de destination |
target |
Fenêtre d'ouverture |
download |
Téléchargement |
title |
Info-bulle |
Exemple :
<a href="document.pdf" download>
Télécharger le PDF
</a>
📋 Les attributs des formulaires
Exemple :
<input
type="text"
name="nom"
value="Michel"
placeholder="Votre nom"
required>
Attributs principaux :
| Attribut | Rôle |
|---|---|
type |
Type de champ |
name |
Nom envoyé au serveur |
value |
Valeur initiale |
placeholder |
Texte indicatif |
required |
Champ obligatoire |
disabled |
Champ désactivé |
readonly |
Lecture seule |
⚙️ Les attributs JavaScript
Ils permettent de déclencher des actions.
Exemple :
<button onclick="bonjour()">
Cliquez
</button>
Principaux événements :
| Attribut | Action |
|---|---|
onclick |
Clic |
onchange |
Modification |
onmouseover |
Souris dessus |
onload |
Chargement |
onkeyup |
Touche clavier |
♿ Les attributs d'accessibilité ARIA
Les attributs aria-* améliorent l'accessibilité.
Exemple :
<button aria-label="Fermer">
X
</button>
Principaux attributs :
| Attribut | Utilité |
|---|---|
aria-label |
Nom descriptif |
aria-hidden |
Masquer aux lecteurs d'écran |
aria-expanded |
État ouvert/fermé |
aria-controls |
Élément contrôlé |
🎬 Les attributs vidéo
Exemple :
<video
src="video.mp4"
controls
autoplay
loop>
</video>
Attributs :
| Attribut | Rôle |
|---|---|
controls |
Afficher les commandes |
autoplay |
Lecture automatique |
loop |
Lecture en boucle |
muted |
Sans son |
poster |
Image avant lecture |
🪟 Les attributs iframe
Exemple :
<iframe
src="page.html"
width="800"
height="600"
loading="lazy">
</iframe>
Attributs :
| Attribut | Rôle |
|---|---|
src |
Page affichée |
width |
Largeur |
height |
Hauteur |
allow |
Autorisations |
sandbox |
Restrictions de sécurité |
loading |
Chargement différé |
⚠️ Attributs HTML anciens
Certains attributs existent encore mais ne sont plus recommandés.
| Ancien attribut | Remplacement moderne |
|---|---|
align |
CSS text-align |
bgcolor |
CSS background-color |
border |
CSS border |
font |
CSS |
width dans les tableaux |
CSS |
✅ Philosophie HTML5 moderne
La séparation des rôles est :
HTML
Structure du document :
<p class="titre">
Bonjour
</p>
CSS
Présentation :
.titre {
text-align:center;
color:blue;
}
JavaScript
Comportement :
alert("Bonjour");
📌 Exemple moderne complet
HTML :
<p class="message">
Bonjour
</p>
CSS :
.message {
text-align:center;
background-color:yellow;
padding:10px;
}
Avantages :
✅ Code plus propre
✅ Maintenance plus facile
✅ Compatible avec les navigateurs modernes
✅ Séparation claire entre contenu, style et programmation
⚙️ Les attributs de la balise <script>
La balise <script> permet d'intégrer du code JavaScript dans une page HTML ou de charger un fichier JavaScript externe.
Exemple simple :
<script>
alert("Bonjour");
</script>
Ou avec un fichier externe :
<script src="script.js"></script>
📌 Attribut src
Permet de charger un fichier JavaScript externe.
Exemple :
<script src="js/menu.js"></script>
Le navigateur charge alors le fichier :
js/menu.js
📌 Attribut type
Indique le type du script.
Exemple ancien :
<script type="text/javascript">
alert("Bonjour");
</script>
En HTML5, text/javascript est la valeur par défaut.
Donc aujourd'hui on écrit simplement :
<script>
alert("Bonjour");
</script>
Autres utilisations possibles :
Module JavaScript
<script type="module" src="app.js"></script>
Le mode module permet :
importexport- une meilleure organisation du code
📌 Attribut defer
Permet de différer l'exécution du script jusqu'à ce que le HTML soit complètement analysé.
Exemple :
<script src="menu.js" defer></script>
Sans defer :
- Le navigateur rencontre le script
- Il arrête l'analyse HTML
- Il charge JavaScript
- Il exécute JavaScript
- Il reprend le HTML
Avec defer :
- Le HTML continue à être analysé
- Le script est chargé en parallèle
- Le script est exécuté après l'analyse HTML
C'est souvent recommandé.
📌 Attribut async
Charge et exécute le script dès qu'il est disponible.
Exemple :
<script src="statistiques.js" async></script>
Différence avec defer :
| Attribut | Chargement | Exécution |
|---|---|---|
| aucun | bloque HTML | immédiate |
defer |
parallèle | après HTML |
async |
parallèle | dès disponibilité |
async convient surtout pour :
- statistiques
- publicités
- scripts indépendants
📌 Attribut crossorigin
Permet de gérer les scripts provenant d'un autre domaine.
Exemple :
<script
src="https://cdn.example.com/app.js"
crossorigin="anonymous">
</script>
Valeurs possibles :
| Valeur | Rôle |
|---|---|
anonymous |
Sans envoi d'informations d'identification |
use-credentials |
Avec cookies et authentification |
📌 Attribut integrity
Permet de vérifier qu'un fichier externe n'a pas été modifié.
Exemple :
<script
src="https://cdn.example.com/lib.js"
integrity="sha384-xxxxx"
crossorigin="anonymous">
</script>
Utilisé notamment avec les CDN.
Avantage :
✅ Protection contre la modification d'un fichier externe.
📌 Attribut nomodule
Permet de fournir un script aux anciens navigateurs qui ne comprennent pas les modules JavaScript.
Exemple :
<script type="module" src="app.js"></script>
<script nomodule src="ancien.js"></script>
Fonctionnement :
- navigateur moderne → utilise
app.js - ancien navigateur → utilise
ancien.js
📌 Attribut nonce
Utilisé avec la sécurité CSP (Content Security Policy).
Exemple :
<script nonce="abc123">
console.log("Script autorisé");
</script>
Il permet d'autoriser uniquement certains scripts.
📌 Attribut referrerpolicy
Contrôle les informations envoyées lors du chargement du script.
Exemple :
<script
src="script.js"
referrerpolicy="no-referrer">
</script>
Valeurs possibles :
no-referreroriginstrict-originunsafe-url
📋 Résumé des attributs <script>
| Attribut | Utilisation |
|---|---|
src |
Charger un fichier JavaScript |
type |
Type du script (module) |
defer |
Exécuter après analyse HTML |
async |
Exécuter dès chargement |
crossorigin |
Scripts externes |
integrity |
Vérification d'intégrité |
nomodule |
Compatibilité anciens navigateurs |
nonce |
Sécurité CSP |
referrerpolicy |
Gestion du référent HTTP |
✅ Exemple moderne recommandé
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<script
src="js/application.js"
defer>
</script>
</head>
<body>
<h1>Mon site</h1>
</body>
</html>
Dans la majorité des sites modernes :
srcest utilisé pour charger les fichiers externesdeferest ajouté pour ne pas bloquer l'affichagetype="text/javascript"n'est plus nécessairetype="module"est utilisé pour les applications JavaScript modernes
📦 Utiliser <script> comme conteneur de données
La balise <script> peut contenir autre chose que du JavaScript.
Si la valeur de l'attribut type n'est pas reconnue comme un type JavaScript, le navigateur ne tente pas d'exécuter son contenu.
Elle devient alors un simple conteneur de texte.
Cette technique est très utilisée pour embarquer des données dans une page HTML.
📄 Contenir du JSON
Exemple :
<script type="application/json" id="config">
{
"nom": "Michel",
"ville": "Estagel",
"age": 75
}
</script>
Puis en JavaScript :
const config = JSON.parse(
document.getElementById("config").textContent
);
console.log(config.nom);
C'est aujourd'hui la méthode recommandée pour transmettre des données du serveur vers JavaScript.
📝 Contenir du Markdown
On peut également stocker du Markdown.
<script type="text/markdown" id="article">
# Bonjour
Voici du **Markdown**.
- un
- deux
- trois
</script>
Puis :
const md = document.getElementById("article").textContent;
Ensuite on peut convertir ce Markdown avec :
- marked.js
- markdown-it
- Showdown
- etc.
📄 Contenir du texte quelconque
<script type="text/plain" id="texte">
Ceci est simplement du texte.
Le navigateur ne fait rien.
</script>
📦 Contenir du XML
<script type="application/xml" id="xml">
<personne>
<nom>Michel</nom>
</personne>
</script>
📦 Contenir du SVG
<script type="image/svg+xml" id="icone">
<svg width="100" height="100">
...
</svg>
</script>
📦 Contenir du HTML
<script type="text/html" id="modele">
<div class="carte">
<h2>{{titre}}</h2>
<p>{{texte}}</p>
</div>
</script>
Cette technique était très utilisée avant l'apparition de la balise <template>.
📦 Contenir du SQL
<script type="text/sql">
SELECT *
FROM clients;
</script>
📦 Contenir du YAML
<script type="text/yaml">
nom: Michel
ville: Estagel
</script>
📦 Contenir du CSV
<script type="text/csv">
nom;ville
Michel;Estagel
</script>
📦 Contenir n'importe quel langage
Le navigateur ne vérifie pas réellement le contenu.
Ainsi on peut écrire :
<script type="text/php">
...
</script>
<script type="text/python">
...
</script>
<script type="text/lua">
...
</script>
<script type="text/berry">
...
</script>
<script type="application/x-config">
...
</script>
Le contenu sera simplement conservé dans le DOM.
📋 Types MIME les plus utilisés
| Type | Utilisation |
|---|---|
text/javascript |
JavaScript (ancien) |
module |
Module JavaScript |
application/json |
JSON |
text/markdown |
Markdown |
text/plain |
Texte |
text/html |
Modèle HTML |
application/xml |
XML |
image/svg+xml |
SVG |
text/yaml |
YAML |
text/csv |
CSV |
💡 Astuce
Avant l'apparition de la balise <template>, les développeurs utilisaient très souvent :
<script type="text/html">
...
</script>
pour stocker des modèles HTML.
Aujourd'hui, on préfère généralement :
<template id="carte">
<div class="carte">
...
</div>
</template>
La balise <template> est plus adaptée, mais la technique utilisant <script> reste parfaitement valide lorsqu'on souhaite embarquer des données (JSON, Markdown, YAML, etc.) directement dans une page HTML.
📦 La balise <template>
La balise <template> permet de stocker du contenu HTML qui n'est pas affiché lors du chargement de la page.
Le navigateur le conserve en mémoire mais ne l'insère pas dans le document.
C'est une sorte de modèle (template) que JavaScript peut dupliquer autant de fois que nécessaire.
Exemple simple
<template id="bonjour">
<h2>Bonjour</h2>
<p>Bienvenue sur le site.</p>
</template>
Au chargement de la page, rien ne s'affiche.
Pourquoi utiliser <template> ?
Sans <template>, il faudrait construire le HTML avec des chaînes de caractères :
document.body.innerHTML +=
"<h2>Bonjour</h2><p>Bienvenue</p>";
Cette méthode est :
- peu lisible
- difficile à maintenir
- source d'erreurs
Avec <template>, le HTML reste écrit normalement.
Utilisation en JavaScript
HTML :
<template id="fiche">
<div class="fiche">
<h2>Nom</h2>
<p>Description</p>
</div>
</template>
JavaScript :
const modele = document.getElementById("fiche");
const copie = modele.content.cloneNode(true);
document.body.appendChild(copie);
Le contenu apparaît alors dans la page.
Que signifie content ?
La propriété content contient le document stocké dans le template.
const contenu = document.getElementById("fiche").content;
C'est un objet de type :
DocumentFragment
Pourquoi utiliser cloneNode(true) ?
Le contenu du template ne peut être inséré qu'après avoir été copié.
const copie = modele.content.cloneNode(true);
true signifie :
recopier également tous les éléments enfants.
Si on écrivait :
cloneNode(false)
on copierait uniquement le premier niveau.
Modifier le contenu avant insertion
HTML :
<template id="personne">
<div class="personne">
<h2></h2>
<p></p>
</div>
</template>
JavaScript :
const copie =
document.getElementById("personne")
.content
.cloneNode(true);
copie.querySelector("h2").textContent = "Michel";
copie.querySelector("p").textContent = "Estagel";
document.body.appendChild(copie);
Résultat :
Michel
Estagel
Répéter un modèle
Le même template peut être utilisé des centaines de fois.
const personnes = [
{nom:"Michel", ville:"Estagel"},
{nom:"Jean", ville:"Perpignan"},
{nom:"Paul", ville:"Narbonne"}
];
const modele =
document.getElementById("personne");
for(const p of personnes){
const copie =
modele.content.cloneNode(true);
copie.querySelector("h2").textContent =
p.nom;
copie.querySelector("p").textContent =
p.ville;
document.body.appendChild(copie);
}
Un seul modèle HTML suffit.
Les templates peuvent être complexes
Ils peuvent contenir :
- du texte
- des images
- des tableaux
- des formulaires
- des vidéos
- des SVG
- des iframes
- d'autres templates
Exemple :
<template id="carte">
<div class="carte">
<img src="">
<h2></h2>
<p></p>
<button>Détails</button>
</div>
</template>
Un template peut contenir du CSS
<template>
<style>
.carte{
border:1px solid gray;
padding:1rem;
}
</style>
<div class="carte">
Bonjour
</div>
</template>
Le style sera appliqué lorsque le template sera inséré.
Peut-on mettre du JavaScript ?
Oui.
<template>
<script>
console.log("Bonjour");
</script>
</template>
Le script n'est pas exécuté tant que le template n'est pas inséré dans la page.
Cependant, cette pratique est peu recommandée.
Différence entre <template> et <script type="text/html">
Ancienne méthode :
<script type="text/html" id="modele">
<div class="carte">
<h2></h2>
</div>
</script>
Méthode moderne :
<template id="modele">
<div class="carte">
<h2></h2>
</div>
</template>
Le résultat est similaire, mais <template> est prévu spécialement pour cet usage.
Avantages de <template>
✅ HTML parfaitement valide
✅ Invisible tant qu'il n'est pas utilisé
✅ Peut être cloné rapidement
✅ Plus lisible
✅ Plus facile à maintenir
✅ Supporté par tous les navigateurs modernes
Cas d'utilisation
La balise <template> est idéale pour créer :
- une carte de produit
- une fiche utilisateur
- un commentaire
- un article
- une ligne de tableau
- un menu
- une galerie d'images
- une liste de fichiers
- une fenêtre modale
- une notification
- un message de discussion
Résumé
La balise <template> est un modèle HTML réutilisable.
Contrairement à une balise <div> classique :
- son contenu n'est pas affiché ;
- il est conservé dans le DOM ;
- JavaScript peut le cloner avec
content.cloneNode(true)autant de fois que nécessaire.
C'est aujourd'hui la méthode recommandée pour générer dynamiquement du HTML sans avoir à construire des chaînes de caractères.