HTML - Formation
HTML - Formation
Débutant à l'Expert
2. Environnement de Développement
3. Liens et Ancres
4. Images et Médias
2. Formulaires Interactifs
3. HTML Sémantique
Géolocalisation ( [Link] ).
Iframes ( <iframe> ).
4. Performance et SEO
2. Exercices Corrigés
2. Ressources Externes
3. Annexes
Exemple :
Historique et évolutions
2. Environnement de Développement
Éditeurs de code
mon-projet/
│
├── [Link] (fichier principal)
├── styles/
│ └── [Link] (fichiers CSS)
├── scripts/
│ └── [Link] (fichiers JavaScript)
└── images/
└── [Link] (assets)
Exercice 1
Solution de l’exercice 1
Astuce : Utilisez toujours <!DOCTYPE html> pour activer le mode standard des
navigateurs.
Explications détaillées :
<p>
<strong>Ce texte est important</strong> (gras)<br>
<em>Ce texte est emphatisé</em> (italique)<br>
<mark>Ce texte est surligné</mark><br>
<small>Ce texte est petit</small><br>
<del>Ce texte est barré</del><br>
<ins>Ce texte est inséré/souligné</ins>
</p>
5. Liens et Ancres
Liens hypertextes de base
Ancres internes
<!-- Lien vers une ancre sur une autre page -->
<a href="[Link]#section2">Aller à la Section 2 de l'autre page</
a>
Liens spéciaux
6. Images et Médias
Images de base
<figure>
<img src="[Link]" alt="Diagramme explicatif">
Exercices de la Partie 2
Un lien mailto
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Ma Première Page</title>
</head>
<body>
<h1>Bienvenue sur mon site</h1>
<p>Ceci est mon premier paragraphe.</p>
<p>Voici mon deuxième paragraphe.</p>
</body>
</html>
Solution Exercice 2 :
<h1>Liste de courses</h1>
<ul>
<li>Fruits
<ol>
<li>Pommes</li>
<li>Bananes</li>
</ol>
</li>
<li>Légumes
<ol>
<li>Carottes</li>
<li>Salade</li>
</ol>
Solution Exercice 3 :
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Liens et Images</title>
</head>
<body>
<h1>Mes liens favoris</h1>
<a href="<[Link] target="_blank" title="Encyclopé
die en ligne">
Visiter Wikipedia
</a>
<figure>
<img src="[Link]" alt="Image exemple" width="300">
<figcaption>Une belle image d'exemple</figcaption>
</figure>
<a href="[Link]
</body>
</html>
Solution Exercice 4 :
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>À propos de moi</title>
</head>
<body>
<h1>À propos de moi</h1>
<img src="[Link]" alt="Ma photo" width="200">
Ressources complémentaires :
7. Tableaux
Définition : Les tableaux HTML permettent d'afficher des données tabulaires.
Ils sont construits avec un ensemble de balises spécifiques qui définissent la
structure des lignes et des colonnes.
Structure de base d'un tableau :
<table>
<tr>
<th>En-tête 1</th>
<th>En-tête 2</th>
</tr>
<tr>
<td>Donnée 1</td>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Tableaux HTML</title>
<style>
table {
width: 100%;
border-collapse: collapse;
margin: 20px 0;
}
th, td {
border: 1px solid #ddd;
padding: 12px;
text-align: left;
}
th {
background-color: #f4f4f4;
font-weight: bold;
}
tr:nth-child(even) {
background-color: #f9f9f9;
}
</style>
</head>
<body>
<table>
<caption>Liste des employés</caption>
<thead>
<tr>
<th scope="col">Nom</th>
<th scope="col">Poste</th>
Résultat visuel :
┌─────────────────┬───────────────┬──────────────┐
│ Nom │ Poste │ Département │
├─────────────────┼───────────────┼──────────────┤
│ Marie Dupont │ Développeuse │ IT │
│ Pierre Martin │ Designer │ Création │
└─────────────────┴───────────────┴──────────────┘
Fusion de cellules :
<table>
<tr>
<th colspan="2">Nom et Prénom</th>
<th>Âge</th>
</tr>
<tr>
<td>Dupont</td>
<td>Marie</td>
8. Formulaires Interactifs
Définition : Les formulaires permettent de recueillir des informations utilisateur.
Ils sont essentiels pour les interactions comme les inscriptions, connexions, et
contacts.
Structure de base d'un formulaire :
<button type="submit">Envoyer</button>
</form>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Formulaire de Contact</title>
<style>
form {
max-width: 600px;
margin: 0 auto;
padding: 20px;
border: 1px solid #ddd;
Validation HTML5 :
9. HTML Sémantique
Définition : L'HTML sémantique utilise des balises qui décrivent leur contenu,
améliorant l'accessibilité, le SEO et la maintenance.
Structure sémantique d'une page :
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Blog Personnel</title>
<style>
* { box-sizing: border-box; margin: 0; padding: 0; }
body { font-family: Arial, sans-serif; line-height: 1.6; }
header, footer { background: #333; color: white; padding: 20px; }
nav ul { display: flex; list-style: none; }
nav a { color: white; text-decoration: none; padding: 10px; }
main { padding: 20px; max-width: 1200px; margin: 0 auto; }
article { margin-bottom: 30px; padding: 20px; border: 1px solid #ddd; }
aside { background: #f4f4f4; padding: 20px; margin-left: 20px; }
.container { display: flex; }
</style>
</head>
<body>
<header role="banner">
<h1>Mon Blog Personnel</h1>
<nav role="navigation" aria-label="Menu principal">
<div class="container">
<main role="main">
<article>
<header>
<h2>Mon Premier Article</h2>
<time datetime="2024-01-15">15 Janvier 2024</time>
</header>
<section>
<p>Ceci est l'introduction de mon article...</p>
<figure>
<img src="<[Link]
236-ca5d3832db39?w=600>"
alt="Paysage montagneux" width="600">
<figcaption>Photo de paysage par Unsplash</figcaption>
</figure>
</section>
<footer>
<p>Écrit par <address>Jean Dupont</address></p>
</footer>
</article>
</main>
<footer role="contentinfo">
<p>© 2024 Mon Blog. Tous droits réservés.</p>
<nav aria-label="Navigation pied de page">
<a href="#confidentialité">Politique de confidentialité</a>
<a href="#conditions">Conditions d'utilisation</a>
</nav>
</footer>
</body>
</html>
Exercices de la Partie 3
Exercice 1 : Tableau complexe
Créez un tableau d'emploi du temps avec fusion de cellules pour les créneaux
horaires.
Exercice 2 : Formulaire d'inscription
Créez un formulaire d'inscription avec validation HTML5.
Exercice 3 : Page sémantique
Structurez une page de blog avec toutes les balises sémantiques.
<table>
<caption>Emploi du temps</caption>
<thead>
<tr>
<th>Heure</th>
<th>Lundi</th>
<th>Mardi</th>
<th>Mercredi</th>
</tr>
</thead>
<tbody>
<tr>
<td rowspan="2">9h-11h</td>
<td>Mathématiques</td>
<td>Physique</td>
<td>Histoire</td>
</tr>
<tr>
<td>Salle A</td>
<td>Salle B</td>
<td>Salle C</td>
</tr>
<tr>
<td>11h-12h</td>
<td colspan="3">Pause déjeuner</td>
</tr>
</tbody>
</table>
Solution Exercice 2 :
<form>
<fieldset>
<legend>Informations personnelles</legend>
<label for="nom">Nom complet :</label>
<fieldset>
<legend>Compte</legend>
<label for="email">Email :</label>
<input type="email" id="email" name="email" required>
<button type="submit">S'inscrire</button>
</form>
Solution Exercice 3 :
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Mon Blog</title>
</head>
<body>
<header>
<h1>Mon Blog Technologique</h1>
<nav>
<ul>
<li><a href="#accueil">Accueil</a></li>
<li><a href="#articles">Articles</a></li>
</ul>
</nav>
</header>
<section>
<h3>Introduction</h3>
<p>Le HTML5 continue d'évoluer avec de nouvelles API...</p>
</section>
<section>
<h3>Les nouveautés</h3>
<p>Découvrez les dernières fonctionnalités...</p>
</section>
</article>
</main>
<footer>
<p>© 2024 Blog Tech</p>
</footer>
</body>
</html>
Bonnes pratiques :
Ressources :
MDN Tableaux
W3C Formulaires
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Exemple ARIA</title>
<style>
.modal { display: none; background: #f0f0f0; padding: 20px; }
.modal[aria-hidden="false"] { display: block; }
</style>
</head>
<body>
<button aria-expanded="false" aria-controls="ma-modale"
onclick="toggleModal()">
Ouvrir la modale
</button>
[Link]('aria-hidden', !isHidden);
[Link]('aria-expanded', isHidden);
}
</script>
</body>
</html>
Résultat visuel :
[Bouton "Ouvrir la modale"] → [Cliquez] → [Fenêtre grise avec titre et texte
apparaît]
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Storage API</title>
</head>
<body>
<input type="text" id="userInput" placeholder="Entrez quelque chose">
<button onclick="saveData()">Sauvegarder</button>
<button onclick="loadData()">Charger</button>
<div id="output"></div>
<script>
function saveData() {
const data = [Link]('userInput').value;
function loadData() {
const data = [Link]('userData');
[Link]('output').textContent = data || 'Aucune d
onnée';
}
</script>
</body>
</html>
Résultat :
[Champ texte] [Bouton Sauvegarder] [Bouton Charger]
→ Texte saisi persiste après actualisation
Géolocalisation :
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Géolocalisation</title>
</head>
<body>
<button onclick="getLocation()">Obtenir ma position</button>
<div id="geoResult"></div>
<script>
function getLocation() {
if ([Link]) {
[Link](showPosition);
} else {
[Link]('geoResult').textContent =
"Géolocalisation non supportée";
}
}
Résultat :
[Bouton] → [Demande d'autorisation] → [Coordonnées affichées]
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Iframe Responsive</title>
<style>
.iframe-container {
position: relative;
overflow: hidden;
width: 100%;
padding-top: 56.25%; /* Ratio 16:9 */
}
.iframe-container iframe {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
Résultat :
[Carte interactive responsive qui s'adapte à la taille de l'écran]
Intégration YouTube :
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Vidéo YouTube</title>
</head>
<body>
<div style="max-width: 800px; margin: 0 auto;">
<iframe width="100%" height="450"
src="<[Link]
title="Video YouTube" frameborder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-medi
a; gyroscope; picture-in-picture"
allowfullscreen>
</iframe>
</div>
</body>
</html>
Résultat :
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.
0">
<title>Mon Site - Page d'Accueil</title>
<meta name="description" content="Découvrez nos services de qualité
exceptionnelle">
<meta name="keywords" content="service, qualité, excellence">
<meta name="author" content="Votre Nom">
Exercices de la Partie 4
Exercice 1 : Accessibilité
Créez un menu accessible avec:
Navigation au clavier
États aria-expanded
Exercice 2 : localStorage
Créez une liste de tâches qui persiste après actualisation
Exercice 3 : Iframe Responsive
Intégrez une carte Google Maps responsive
Exercice 4 : SEO
Optimisez une page avec toutes les métadonnées essentielles
[Link]('aria-expanded', !isExpanded);
[Link]('aria-hidden', isExpanded);
[Link] = isExpanded ? 'block' : 'none';
});
</script>
Solution Exercice 2 :
<script>
function addTask() {
const task = [Link]('taskInput').value;
if (task) {
const tasks = [Link]([Link]('tasks') || '[]');
[Link](task);
[Link]('tasks', [Link](tasks));
displayTasks();
}
}
function displayTasks() {
const tasks = [Link]([Link]('tasks') || '[]');
const list = [Link]('taskList');
[Link] = [Link](task => `<li>${task}</li>`).join('');
}
displayTasks();
</script>
Solution Exercice 3 :
Solution Exercice 4 :
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.
0">
<title>Restaurant La Belle Table - Cuisine française à Paris</title>
<meta name="description" content="Restaurant gastronomique proposa
nt une cuisine française traditionnelle avec des produits frais et locaux">
<meta name="keywords" content="restaurant, paris, cuisine française, g
astronomie">
<meta name="author" content="Chef Michel">
<meta property="og:title" content="Restaurant La Belle Table">
<meta property="og:description" content="Découvrez notre cuisine d'ex
ception">
<meta property="og:image" content="<[Link]
oto-1517248135467-4c7edcad34c4?w=1200>">
<meta property="og:url" content="<[Link]
<link rel="canonical" href="<[Link]
</head>
Ressources :
MDN ARIA
Google Lighthouse
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.
0">
<title>Mon CV en Ligne</title>
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body { font-family: 'Arial', sans-serif; line-height: 1.6; color: #333; }
.container { max-width: 1000px; margin: 0 auto; padding: 20px; }
header {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
padding: 40px 20px;
text-align: center;
.profile-img {
width: 150px;
height: 150px;
border-radius: 50%;
object-fit: cover;
border: 4px solid white;
margin-bottom: 20px;
}
section {
margin: 30px 0;
padding: 20px;
border-radius: 8px;
background: white;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
}
h2 {
color: #667eea;
border-bottom: 2px solid #667eea;
padding-bottom: 10px;
margin-bottom: 20px;
}
.competences-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 20px;
}
.experience-item {
margin-bottom: 20px;
}
<div class="container">
<section id="apropos">
<h2>À Propos</h2>
<p>Développeur passionné avec 5 ans d'expérience dans la créatio
n d'applications web modernes et responsives.</p>
</section>
<section id="competences">
<h2>Compétences Techniques</h2>
<div class="competences-grid">
<div>
<h3>Frontend</h3>
<ul>
<li>HTML5/CSS3</li>
<li>JavaScript/TypeScript</li>
<li>[Link]</li>
</ul>
</div>
<div>
<h3>Backend</h3>
<ul>
<li>[Link]</li>
<li>Python/Django</li>
<li>Bases de données</li>
</ul>
<section id="experience">
<h2>Expérience Professionnelle</h2>
<div class="experience-item">
<h3>Développeur Senior - TechCorp</h3>
<p><em>2020 - Présent</em></p>
<p>Développement d'applications web complexes avec React et
[Link]</p>
</div>
</section>
<section id="contact">
<h2>Contact</h2>
<form>
<label for="email">Email :</label>
<input type="email" id="email" required>
<button type="submit">Envoyer</button>
</form>
</section>
</div>
</body>
</html>
Résultat visuel :
[En-tête coloré avec photo] → [Sections avec ombres] → [Formulaire de
contact]
<!DOCTYPE html>
<html lang="fr">
.form-container {
max-width: 600px;
margin: 50px auto;
padding: 30px;
border: 1px solid #ddd;
border-radius: 10px;
box-shadow: 0 0 20px rgba(0,0,0,0.1);
}
.form-group {
margin-bottom: 20px;
}
label {
display: block;
margin-bottom: 5px;
font-weight: bold;
}
.error {
color: var(--error);
font-size: 0.9em;
margin-top: 5px;
display: none;
}
button {
background: var(--primary);
color: white;
padding: 15px 30px;
border: none;
border-radius: 5px;
cursor: pointer;
font-size: 1.1em;
}
button:hover {
background: #0056b3;
}
.success-message {
background: var(--success);
color: white;
padding: 20px;
border-radius: 5px;
text-align: center;
display: none;
}
</style>
</head>
<body>
<form id="contactForm">
<div class="form-group">
<label for="name">Nom complet :</label>
<input type="text" id="name" name="name" required>
<div class="error" id="nameError">Veuillez entrer votre nom</di
v>
</div>
<div class="form-group">
<label for="email">Email :</label>
<input type="email" id="email" name="email" required>
<div class="error" id="emailError">Email invalide</div>
</div>
<div class="form-group">
<label for="subject">Sujet :</label>
<select id="subject" name="subject" required>
<option value="">Choisissez un sujet</option>
<option value="support">Support technique</option>
<option value="sales">Service commercial</option>
<option value="other">Autre</option>
</select>
</div>
<div class="form-group">
<label for="message">Message :</label>
<textarea id="message" name="message" rows="5" required></
textarea>
<div class="error" id="messageError">Message requis</div>
</div>
<script>
[Link]('contactForm').addEventListener('submit', f
unction(e) {
[Link]();
// Validation simple
const name = [Link]('name');
const email = [Link]('email');
const message = [Link]('message');
if (![Link]()) {
[Link]('nameError').[Link] = 'block';
isValid = false;
}
if () {
[Link]('emailError').[Link] = 'block';
isValid = false;
}
if (![Link]()) {
[Link]('messageError').[Link] = 'bloc
k';
isValid = false;
}
if (isValid) {
// Simulation d'envoi réussi
[Link]('successMessage').[Link] = 'blo
ck';
[Link]();
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.
0">
<title>Mon Portfolio</title>
<style>
.gallery {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 20px;
padding: 20px;
}
.gallery-item {
.gallery-item img {
width: 100%;
height: 250px;
object-fit: cover;
transition: transform 0.3s;
}
.gallery-item:hover img {
transform: scale(1.1);
}
.overlay {
position: absolute;
bottom: 0;
background: rgba(0,0,0,0.7);
color: white;
width: 100%;
padding: 20px;
transform: translateY(100%);
transition: transform 0.3s;
}
.gallery-item:hover .overlay {
transform: translateY(0);
}
.modal {
display: none;
position: fixed;
z-index: 1000;
padding: 50px;
left: 0;
.modal-content {
max-width: 90%;
max-height: 90%;
margin: auto;
display: block;
}
.close {
position: absolute;
top: 20px;
right: 30px;
color: white;
font-size: 40px;
cursor: pointer;
}
</style>
</head>
<body>
<div class="gallery">
<div class="gallery-item" onclick="openModal('<[Link]
[Link]/photo-1682687980961-78fa83781450?w=800>')">
<img src="<[Link]
fa83781450?w=400>" alt="Projet 1">
<div class="overlay">
<h3>Projet Désert</h3>
<p>Photographie de paysage désertique</p>
</div>
</div>
<script>
function openModal(src) {
[Link]('modal').[Link] = 'block';
[Link]('modalImage').src = src;
}
function closeModal() {
[Link]('modal').[Link] = 'none';
}
<style>
.navbar {
display: flex;
justify-content: space-between;
align-items: center;
padding: 1rem;
background: #333;
}
.nav-menu {
display: flex;
list-style: none;
gap: 2rem;
}
.nav-toggle {
display: none;
background: none;
border: none;
color: white;
font-size: 1.5rem;
}
<table id="dataTable">
<thead>
<tr>
<th>Nom</th>
<th>Âge</th>
<th>Ville</th>
</tr>
</thead>
<tbody>
<!-- Les données seront ajoutées par JavaScript -->
</tbody>
</table>
<script>
const data = [
{ nom: "Alice", age: 25, ville: "Paris" },
{ nom: "Bob", age: 30, ville: "Lyon" }
];
<div class="search-container">
<input type="text" id="searchInput" placeholder="Rechercher...">
<button onclick="performSearch()"> 🔍</button>
<div id="searchResults"></div>
</div>
<script>
function performSearch() {
const query = [Link]('searchInput').value;
// Simulation de résultats
const results = [
"Résultat 1 pour " + query,
"Résultat 2 pour " + query
];
Solutions Détaillées
Solution Projet 1 - Améliorations :
.competence-icon {
width: 24px;
height: 24px;
background: #007bff;
border-radius: 50%;
display: inline-flex;
align-items: center;
justify-content: center;
color: white;
font-weight: bold;
}
</style>
Prochaines Étapes :
Déploiement en ligne
Cette partie pratique vous prepare à créer des projets réels et à construire
votre portfolio de développeur web!
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Manipulation du DOM</title>
<style>
.container {
max-width: 800px;
margin: 50px auto;
<div id="users-list">
<!-- Liste des utilisateurs -->
</div>
</div>
</div>
<script>
// Création d'éléments
function createElement() {
const newElement = [Link]('div');
[Link] = `
<h4>Nouvel élément créé</h4>
<p>Créé le: ${new Date().toLocaleTimeString()}</p>
<button onclick="[Link]()">Supprimer</butt
on>
`;
[Link] = '#e3f2fd';
[Link] = '15px';
[Link]('content-area').appendChild(newElemen
t);
}
// Suppression d'éléments
function removeElement() {
const contentArea = [Link]('content-area');
if ([Link]) {
[Link]();
}
}
// Modification de texte
function changeText() {
const element = [Link]('text-to-change');
[Link] = 'Texte modifié avec succès! ' + new Date().to
LocaleTimeString();
}
// Modification de style
function changeStyle() {
const element = [Link]('text-to-change');
[Link] = '#ff6b6b';
[Link] = 'bold';
[Link] = '1.2em';
}
// Ajout d'utilisateurs
function addUser() {
const name = [Link]('userName').value;
const email = [Link]('userEmail').value;
[Link]('users-list').appendChild(userCard);
// Réinitialiser le formulaire
[Link]('userName').value = '';
[Link]('userEmail').value = '';
}
}
// Chargement initial
[Link]('DOMContentLoaded', function() {
[Link]('DOM complètement chargé et analysé');
// Charger des données initiales ici
});
</script>
</body>
</html>
Résultat visuel :
[Interface avec boutons] → [Création dynamique de cartes] → [Modification en
temps réel]
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Web Components</title>
<style>
/* Styles globaux */
<user-card
name="Pierre Martin"
role="Designer UX"
avatar="<[Link]
228f2d?w=150&h=150&fit=crop&crop=face>"
theme="light">
</user-card>
connectedCallback() {
[Link]();
}
render() {
const name = [Link]('name') || 'Utilisateur';
const role = [Link]('role') || 'Rôle non défini';
const avatar = [Link]('avatar') || '<[Link]
[Link]/photo-1472099645785-5658abf4ff4e?w=150&h=150&fit=crop&cr
op=face>';
const theme = [Link]('theme') || 'light';
[Link] = `
<style>
:host {
display: block;
margin: 20px 0;
border-radius: 15px;
padding: 25px;
font-family: Arial, sans-serif;
box-shadow: 0 4px 15px rgba(0,0,0,0.1);
.card {
display: flex;
align-items: center;
gap: 20px;
}
.avatar {
width: 80px;
height: 80px;
border-radius: 50%;
object-fit: cover;
border: 3px solid white;
}
.content h2 {
margin: 0 0 10px 0;
color: ${theme === 'dark' ? 'white' : '#333'};
}
.content p {
margin: 0;
color: ${theme === 'dark' ? '#ccc' : '#666'};
font-size: 1.1em;
}
.theme-dark {
background: linear-gradient(135deg, #2c3e50 0%, #3449
5e 100%);
}
.theme-light {
background: linear-gradient(135deg, #ecf0f1 0%, #bdc3c7
100%);
}
</style>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Futures Évolutions HTML</title>
<style>
.feature-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 20px;
margin: 40px 0;
}
.feature-card {
padding: 20px;
border: 1px solid #ddd;
border-radius: 10px;
background: white;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
.feature-card h3 {
color: #007bff;
margin-top: 0;
}
.status {
display: inline-block;
padding: 4px 8px;
border-radius: 12px;
font-size: 0.8em;
margin-left: 10px;
}
<div class="feature-grid">
<div class="feature-card">
<h3>Native Dialog Elements <span class="status standard">HTML
5.2</span></h3>
<p>Éléments de dialogue natifs pour les modales</p>
<button onclick="[Link]('demoDialog').showMo
dal()">
Ouvrir la modale
</button>
</div>
<div class="feature-card">
<h3>Web Share API <span class="status proposal">Proposal</spa
n></h3>
<p>Partage natif vers les applications</p>
<div class="feature-card">
<h3>Container Queries <span class="status draft">Draft</span></
h3>
<p>Media queries basées sur la taille du conteneur</p>
</div>
</div>
<script>
// Web Share API
async function shareContent() {
if ([Link]) {
try {
await [Link]({
title: 'Futures Évolutions HTML',
text: 'Découvrez les nouvelles fonctionnalités HTML',
url: [Link]
});
[Link]('Contenu partagé avec succès');
} catch (error) {
[Link]('Partage annulé');
}
} else {
alert('Web Share API non supportée sur ce navigateur');
}
}
<div class="resources-container">
<h2>Ressources Essentielles</h2>
<div class="resource-category">
<h3> 📚 Documentation Officielle</h3>
<ul>
<li>
<a href="<[Link] tar
get="_blank">
<strong>MDN Web Docs</strong> - Documentation complète
HTML
</a>
<p>La référence la plus complète et à jour</p>
</li>
<li>
<a href="<[Link] target="_blank">
<strong>W3C Specification</strong> - Spécification officielle
<div class="resource-category">
<h3> 🛠️ Outils de Développement</h3>
<ul>
<li>
<a href="<[Link] target="_blank">
<strong>Validateur HTML W3C</strong>
</a>
<p>Validation de code HTML</p>
</li>
<li>
<a href="<[Link] target="_blank">
<strong>Can I Use</strong>
</a>
<p>Compatibilité des navigateurs</p>
</li>
</ul>
</div>
<div class="resource-category">
<h3> 👥 Communautés</h3>
<ul>
<li>
<a href="<[Link] tar
get="_blank">
<strong>Stack Overflow</strong>
</a>
<p>Questions et réponses techniques</p>
</li>
<li>
<a href="<[Link] target="_blank">
<strong>GitHub</strong>
</a>
<style>
.resources-container {
max-width: 800px;
margin: 40px auto;
padding: 30px;
background: #f8f9fa;
border-radius: 15px;
}
.resource-category {
margin-bottom: 30px;
}
.resource-category h3 {
color: #333;
border-bottom: 2px solid #007bff;
padding-bottom: 10px;
}
.resource-category ul {
list-style: none;
padding: 0;
}
.resource-category li {
margin: 15px 0;
padding: 15px;
background: white;
border-radius: 8px;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}
.resource-category a:hover {
text-decoration: underline;
}
.resource-category p {
margin: 5px 0 0 0;
color: #666;
font-size: 0.9em;
}
</style>
18. Annexes
Référence des Balises HTML Essentielles
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Référence des Balises HTML</title>
<style>
.cheatsheet {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 20px;
margin: 40px 0;
}
.tag-card {
padding: 20px;
border: 1px solid #ddd;
border-radius: 8px;
.tag-name {
background: #007bff;
color: white;
padding: 5px 10px;
border-radius: 4px;
font-family: monospace;
display: inline-block;
margin-bottom: 10px;
}
.tag-description {
color: #666;
line-height: 1.6;
}
.tag-example {
background: #f8f9fa;
padding: 10px;
border-radius: 4px;
font-family: monospace;
font-size: 0.9em;
margin-top: 10px;
border-left: 4px solid #007bff;
}
</style>
</head>
<body>
<h1>Cheat Sheet HTML</h1>
<div class="cheatsheet">
<div class="tag-card">
<span class="tag-name"><section></span>
<p class="tag-description">Définit une section thématique dans un
document</p>
<div class="tag-example">
<div class="tag-card">
<span class="tag-name"><article></span>
<p class="tag-description">Contenu autonome et indépendant</p>
<div class="tag-example">
<article><br>
<h2>Article</h2><br>
<p>Contenu</p><br>
</article>
</div>
</div>
<div class="tag-card">
<span class="tag-name"><details></span>
<p class="tag-description">Widget d'information dépliable</p>
<div class="tag-example">
<details><br>
<summary>Voir plus</summary><br>
<p>Contenu caché</p><br>
</details>
</div>
</div>
</div>
</body>
</html>
<div class="glossary">
<h2>Glossaire Technique</h2>
<div class="term">
<div class="term">
<h3>Semantic HTML</h3>
<p>Utilisation de balises HTML qui décrivent leur contenu de manière
significative pour améliorer l'accessibilité et le SEO.</p>
</div>
<div class="term">
<h3>Web Components</h3>
<p>Ensemble de technologies permettant de créer des éléments pers
onnalisés et réutilisables.</p>
</div>
</div>
<style>
.glossary {
max-width: 800px;
margin: 40px auto;
}
.term {
margin: 20px 0;
padding: 20px;
background: #f8f9fa;
border-radius: 8px;
border-left: 4px solid #007bff;
}
.term h3 {
color: #333;
margin-top: 0;
}
.term p {
Exercices d'Approfondissement
Exercice 1 : Créer un Web Component
<script>
// À implémenter
class WeatherCard extends HTMLElement {
constructor() {
super();
// Votre code ici
}
connectedCallback() {
[Link]();
}
render() {
// Afficher la météo
}
}
[Link]('weather-card', WeatherCard);
</script>
Ressources Complémentaires
Livres Recommandés :
Cours En Ligne :
FreeCodeCamp (gratuit)
Outils Avancés :
À quoi ça sert ?
Il s'affiche dans l'onglet du navigateur et dans les résultats des moteurs de
recherche.
<ul> et <ol>
À quoi ça sert ?
Intégrer et lire des fichiers vidéo.
À quoi ça sert ?
Délimiter le contenu principal de la page.
<article>
À quoi ça sert ?
Contenir un article, un post de blog, etc.
<section>
À quoi ça sert ?
Grouper du contenu par thème.
<aside>
À quoi ça sert ?
Contenir des informations secondaires (barre latérale).
<footer>
À quoi ça sert ?
Contenir les informations de bas de page.
<figure>
À quoi ça sert ?
Contenir une image avec sa légende.
<figcaption>
SEO (Référencement)
C'est quoi ?
Optimiser votre site pour les moteurs de recherche.
Comment avec HTML ?
En utilisant les bonnes balises sémantiques et les métadonnées.
API HTML5
C'est quoi ?
Des fonctionnalités avancées intégrées aux navigateurs.
Exemples :
À quoi ça sert ?
Réutiliser du code complexe facilement.