📖 Introduction aux formulaires HTML5
HTML5 a révolutionné les formulaires en introduisant de nouveaux types d'input, des attributs puissants et une validation intégrée sans JavaScript.
❌ Avant HTML5
<!-- Nécessitait JavaScript pour valider -->
<input type="text" id="email">
<script>
// Validation manuelle avec JS
if(!email.includes('@')) alert('Email invalide');
</script>
✅ Avec HTML5
<!-- Validation automatique intégrée -->
<input type="email" required>
Validation automatique
Vérification côté navigateur sans JavaScript
Claviers adaptés
Sur mobile, le clavier change selon le type (email, tel, number)
Interfaces natives
Sélecteurs de date, couleur, plage intégrés
Moins de code
Réduction du code JavaScript nécessaire
🔢 1. Nouveaux types d'input
HTML5 introduit de nombreux nouveaux types pour des champs spécifiques :
type="email"
Pour les adresses email
<input type="email">
type="url"
Pour les URLs
<input type="url">
type="tel"
Pour les numéros de téléphone
<input type="tel">
type="number"
Pour les nombres
<input type="number" min="0" max="100" step="5">
type="range"
Curseur de plage
<input type="range" min="0" max="100">
type="color"
Sélecteur de couleur
<input type="color">
type="date"
Sélecteur de date
<input type="date">
type="datetime-local"
Date et heure locales
<input type="datetime-local">
type="month"
Sélecteur de mois
<input type="month">
type="week"
Sélecteur de semaine
<input type="week">
type="time"
Sélecteur d'heure
<input type="time">
type="search"
Champ de recherche
<input type="search">
📌 2. Attributs de formulaire HTML5
required
Champ obligatoire
<input type="text" required>
placeholder
Texte indicatif
<input type="text" placeholder="Votre nom...">
autofocus
Focus automatique
<input type="text" autofocus>
pattern
Validation par expression régulière
<input pattern="[A-Za-z]{3,}">
min & max
Valeurs minimales et maximales
<input type="number" min="18" max="99">
step
Incément
<input type="number" step="5">
autocomplete
Auto-complétion
<input autocomplete="off">
novalidate
Désactive la validation
<form novalidate>
multiple
Permet plusieurs valeurs
<input type="email" multiple>
list
Associe une datalist
<input list="options">
✅ 3. Validation intégrée
HTML5 offre une validation automatique côté navigateur sans JavaScript.
📧 Validation email
<input type="email" required>
🔗 Validation URL
<input type="url" required>
🔢 Validation pattern
<input pattern="[0-9]{10}" title="10 chiffres">
🎨 Styliser la validation avec CSS
/* Champs valides */
input:valid {
border-color: #10b981;
}
/* Champs invalides */
input:invalid {
border-color: #ef4444;
}
/* Champs requis */
input:required {
border-left: 4px solid #f59e0b;
}
📋 4. L'élément <datalist>
L'élément <datalist> fournit une liste d'options prédéfinies pour un champ <input>, tout en permettant à l'utilisateur de saisir sa propre valeur.
📝 Syntaxe de base
<input list="villes" name="ville">
<datalist id="villes">
<option value="Casablanca">
<option value="Rabat">
<option value="Marrakech">
<option value="Fès">
<option value="Tanger">
</datalist>
🎯 Avantages de datalist
📝 Exemple : Datalist pour les navigateurs web
<label>Votre navigateur préféré :</label>
<input list="browsers">
<datalist id="browsers">
<option value="Chrome">
<option value="Firefox">
<option value="Safari">
<option value="Edge">
<option value="Opera">
</datalist>
📝 Exemple complet : Formulaire d'inscription HTML5
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Formulaire d'inscription HTML5</title>
<style>
form { max-width: 500px; margin: 0 auto; padding: 20px; }
input, select { width: 100%; padding: 10px; margin: 8px 0; border: 1px solid #ccc; border-radius: 6px; }
button { background: #2c3e66; color: white; padding: 12px; border: none; border-radius: 6px; width: 100%; }
input:valid { border-color: #10b981; }
input:invalid:not(:placeholder-shown) { border-color: #ef4444; }
</style>
</head>
<body>
<form>
<h2>Inscription</h2>
<!-- Nom -->
<input type="text" name="nom" placeholder="Nom complet" required autofocus>
<!-- Email -->
<input type="email" name="email" placeholder="Email" required>
<!-- Téléphone -->
<input type="tel" name="tel" placeholder="Téléphone" pattern="[0-9]{10}" title="10 chiffres">
<!-- Âge -->
<input type="number" name="age" placeholder="Âge" min="18" max="99" required>
<!-- Date de naissance -->
<input type="date" name="naissance" required>
<!-- Pays avec datalist -->
<input list="pays" name="pays" placeholder="Pays">
<datalist id="pays">
<option value="Maroc">
<option value="France">
<option value="Canada">
<option value="Belgique">
<option value="Suisse">
</datalist>
<!-- Couleur préférée -->
<input type="color" name="couleur" value="#3498db">
<!-- Niveau (curseur) -->
<label>Niveau : <span id="niveauValue">5</span></label>
<input type="range" name="niveau" min="1" max="10" value="5" oninput="niveauValue.innerText = this.value">
<!-- Conditions -->
<label>
<input type="checkbox" required> J'accepte les conditions
</label>
<button type="submit">S'inscrire</button>
</form>
</body>
</html>
📝 Résumé du chapitre
| Catégorie | Éléments/Attributs |
|---|---|
| Nouveaux types d'input | email, url, tel, number, range, color, date, datetime-local, month, week, time, search |
| Attributs de formulaire | required, placeholder, autofocus, pattern, min, max, step, autocomplete, novalidate, multiple, list |
| Validation intégrée | Validation automatique, messages personnalisés, CSS :valid / :invalid |
| Datalist | <datalist> + <option>, associé avec input list="id" |
📌 Quiz de vérification
Question 1 : Quel type d'input utilise-t-on pour un sélecteur de couleur ?
📖 Voir la réponse
<input type="color">
Question 2 : Quel attribut rend un champ obligatoire ?
📖 Voir la réponse
required
Question 3 : À quoi sert l'élément <datalist> ?
📖 Voir la réponse
Il fournit une liste d'options prédéfinies pour un champ input, tout en permettant une saisie libre.
Question 4 : Quel attribut permet de valider un champ avec une expression régulière ?
📖 Voir la réponse
pattern
Question 5 : Quelle pseudo-classe CSS cible les champs valides ?
📖 Voir la réponse
:valid