Attributs globaux, sélecteurs CSS et Box Model¶
Attributs globaux, Sélecteurs CSS et Box Model¶
Séance 3 - DSP - USAL33
5. Attributs globaux¶
Qu’est-ce qu’un attribut global ?¶
Attributs globaux = attributs utilisables sur toutes les balises HTML
Principaux attributs :¶
Attribut |
Rôle |
|---|---|
|
Identifiant unique |
|
Classe(s) CSS (réutilisable) |
|
Styles CSS inline |
|
Info-bulle au survol |
|
Données personnalisées |
|
Langue du contenu |
|
Cache l’élément |
Attribut id¶
Rôle : Identifiant unique dans la page
Règles :
Valeur unique sur toute la page
Commence par une lettre
Pas d’espaces
Usages :
<div id="header">En-tête</div>
<a href="#section2">Aller à la section 2</a>
<section id="section2">...</section>
<button id="submit-btn">Envoyer</button>
Attribut class¶
Rôle : Une ou plusieurs classes CSS (réutilisables)
Règles :
Peut être utilisé sur plusieurs éléments
Un élément peut avoir plusieurs classes
Classes séparées par des espaces
<p class="important">Texte important</p>
<div class="card featured highlight">Carte mise en avant</div>
Bonne pratique : Préférer les classes aux IDs pour le style CSS
id vs class¶
Critère |
|
|
|---|---|---|
Unicité |
Unique dans la page |
Réutilisable |
Nombre par élément |
Un seul |
Plusieurs possibles |
Spécificité CSS |
Très élevée (100) |
Moyenne (10) |
Usage recommandé |
Ancres, JavaScript |
Styles CSS |
<nav id="main-nav" class="navigation sticky">
<a href="#home" class="nav-link active">Accueil</a>
</nav>
Attribut style¶
Rôle : Styles CSS inline (dans la balise)
<p style="color: blue; font-size: 18px;">Texte bleu</p>
À éviter : Mélange structure et présentation
Préférer : Fichier CSS externe
Cas d’usage légitime : Styles générés dynamiquement par JavaScript
Attribut title¶
Rôle : Info-bulle au survol de la souris
<abbr title="HyperText Markup Language">HTML</abbr>
<button title="Cliquez pour enregistrer">💾</button>
<img src="photo.jpg" alt="Photo" title="Photo de vacances 2026">
Avantages :
Aide contextuelle
Améliore l’UX
⚠️ Limites : Non accessible au tactile (mobiles)
Attributs data-* — Données personnalisées¶
Rôle : Stocker des données personnalisées (pour JavaScript)
<article data-article-id="42" data-author="Jean Dupont" data-category="tech">
<h2>Titre de l'article</h2>
</article>
<script>
const article = document.querySelector('article');
console.log(article.dataset.articleId); // "42"
console.log(article.dataset.author); // "Jean Dupont"
console.log(article.dataset.category); // "tech"
</script>
Bonne pratique : Préfixer avec data- + nom descriptif
Attribut lang¶
Rôle : Indique la langue du contenu
<html lang="fr">
<body>
<p>Texte en français</p>
<p lang="en">This is in English</p>
<p lang="es">Esto es en español</p>
</body>
</html>
Avantages :
Accessibilité (prononciation correcte par lecteurs d’écran)
SEO (moteurs de recherche identifient la langue)
Traduction automatique
Correcteur orthographique du navigateur
Partie 3 (suite)¶
CSS approfondi¶
Sélecteurs avancés et Box Model
1. Sélecteurs avancés¶
Rappel : Sélecteurs de base¶
Sélecteur |
Cible |
Exemple |
|---|---|---|
Type |
Toutes les balises d’un type |
|
Classe |
Éléments avec une classe |
|
ID |
Élément avec un ID unique |
|
Universel |
Tous les éléments |
|
Sélecteurs de classe et d’ID¶
Classe (.ma-classe)¶
Réutilisable sur plusieurs éléments
Préféré pour le style CSS
.button { padding: 10px 20px; }
.button-primary { background: blue; color: white; }
ID (#mon-id)¶
Unique dans la page
Haute spécificité (difficile à surcharger)
Réservé pour JavaScript ou ancres
#unique-header { font-size: 32px; }
Sélecteurs de combinaison¶
Sélecteur |
Nom |
Cible |
|---|---|---|
|
Descendant |
Tous les B dans A (à n’importe quel niveau) |
|
Enfant direct |
B enfant immédiat de A |
|
Voisin adjacent |
B immédiatement après A (même parent) |
|
Voisins généraux |
Tous les B après A (même parent) |
/* Tous les <p> dans <article> */
article p { line-height: 1.6; }
/* Les <li> directs de <ul> */
ul > li { list-style: disc; }
/* Le premier <p> après un <h1> */
h1 + p { font-size: 1.2em; }
Pseudo-classes — État des éléments (1/2)¶
Pseudo-classe |
Cible |
Exemple |
|---|---|---|
|
Survol de la souris |
|
|
Élément ayant le focus |
|
|
Élément activé (clic) |
|
Pseudo-classes — État des éléments (2/2)¶
Pseudo-classe |
Cible |
Exemple |
|---|---|---|
|
Premier enfant |
|
|
Dernier enfant |
|
|
n-ième enfant |
|
Pseudo-éléments — Parties d’éléments¶
Pseudo-élément |
Cible |
Exemple |
|---|---|---|
|
Contenu inséré avant |
|
|
Contenu inséré après |
|
|
Première ligne |
|
|
Première lettre |
|
/* Ajouter une icône avant les liens externes */
a[href^="http"]::after {
content: " 🔗";
}
Note : ::before et ::after nécessitent la propriété content
Sélecteurs d’attributs¶
Sélecteur |
Cible |
|---|---|
|
Éléments avec l’attribut |
|
Attribut avec valeur exacte |
|
Attribut commençant par value |
|
Attribut finissant par value |
|
Attribut contenant value |
/* Tous les liens externes */
a[href^="http"] { color: blue; }
/* Tous les PDFs */
a[href$=".pdf"]::after { content: " 📄"; }
/* Champs obligatoires */
input[required] { border-left: 3px solid red; }
Spécificité CSS¶
Spécificité = poids d’un sélecteur
Type de sélecteur |
Valeur |
Exemple |
|---|---|---|
Éléments, pseudo-éléments |
1 |
|
Classes, attributs, pseudo-classes |
10 |
|
IDs |
100 |
|
Styles inline |
1000 |
|
|
∞ |
|
Calcul :
div p { } /* 0-0-2 = 2 */
.intro p { } /* 0-1-1 = 11 */
#content .intro p { } /* 1-1-1 = 111 */
⚠️ Évitez !important : complique la maintenance
La cascade CSS¶
Cascade = ordre de priorité quand plusieurs règles ciblent le même élément
Ordre de priorité :
Importance :
!importantSpécificité du sélecteur
Ordre d’apparition (dernière règle gagne)
En cas d’égalité de spécificité : La dernière règle définie l’emporte
p { color: blue; }
p { color: red; } /* ← Celle-ci gagne */
2. Le Box Model¶
Le Box Model CSS¶
Chaque élément HTML est une boîte rectangulaire composée de 4 zones :
┌─────────────────────────────────────┐
│ MARGIN (extérieur) │
│ ┌───────────────────────────────┐ │
│ │ BORDER (bordure) │ │
│ │ ┌─────────────────────────┐ │ │
│ │ │ PADDING (intérieur) │ │ │
│ │ │ ┌───────────────────┐ │ │ │
│ │ │ │ CONTENT │ │ │ │
│ │ │ └───────────────────┘ │ │ │
│ │ └─────────────────────────┘ │ │
│ └───────────────────────────────┘ │
└─────────────────────────────────────┘
Les 4 zones du Box Model¶
Zone |
Rôle |
Propriété CSS |
|---|---|---|
Content |
Contenu de l’élément |
|
Padding |
Espace intérieur |
|
Border |
Bordure de l’élément |
|
Margin |
Espace extérieur |
|
div {
width: 200px; /* Content */
padding: 20px; /* Espace intérieur */
border: 5px solid black; /* Bordure */
margin: 10px; /* Espace extérieur */
}
Largeur totale (par défaut) = width + padding×2 + border×2 = 250px
Content — Contenu¶
div {
width: 300px;
height: 200px;
min-width: 200px; /* Largeur minimale */
max-width: 500px; /* Largeur maximale */
}
Comportement par défaut :
Bloc (
<div>,<p>,<h1>) : largeur 100% du parentInline (
<span>,<a>,<strong>) : largeur = contenu
Bon à savoir : min-width et max-width sont essentiels pour le responsive
Padding — Espacement intérieur¶
/* Tous les côtés identiques */
padding: 15px;
/* Vertical | Horizontal */
padding: 10px 20px;
/* Top | Horizontal | Bottom */
padding: 10px 20px 15px;
/* Top | Right | Bottom | Left (sens horaire) */
padding: 10px 20px 10px 20px;
/* Côté par côté */
padding-top: 10px;
padding-right: 20px;
padding-bottom: 10px;
padding-left: 20px;
Astuce mnémotechnique (4 valeurs) : « TRouBLe » (Top, Right, Bottom, Left)
Border — Bordure¶
/* Syntaxe complète */
border: 2px solid #333;
/* ↑ ↑ ↑
width style color */
/* Styles de bordure */
border-style: solid; /* Ligne continue */
border-style: dashed; /* Tirets */
border-style: dotted; /* Pointillés */
border-style: double; /* Double ligne */
/* Bordures différentes par côté */
border-top: 3px solid red;
border-bottom: 1px dashed blue;
/* Coins arrondis */
border-radius: 10px;
border-radius: 50%; /* Cercle parfait */
Margin — Espacement extérieur¶
/* Syntaxe identique au padding */
margin: 20px;
margin: 10px 20px;
margin: 10px 15px 20px 25px;
/* Centrer un élément de bloc */
margin: 0 auto;
/* Marges négatives (avancé) */
margin-top: -10px; /* Rapproche de l'élément au-dessus */
Valeurs spéciales :
auto: centrage horizontal (pour les éléments de bloc avec largeur définie)Valeurs négatives : superposer ou rapprocher les éléments
Fusion des marges verticales¶
Comportement spécial : Les marges verticales adjacentes fusionnent
<p style="margin-bottom: 30px;">Paragraphe 1</p>
<p style="margin-top: 20px;">Paragraphe 2</p>
Résultat : Espace entre les deux = 30px (la plus grande), pas 50px
Règle : La plus grande marge l’emporte
Astuce : Les marges horizontales ne fusionnent jamais
box-sizing — Calcul de la largeur¶
Problème par défaut : width ne compte pas padding et border
div {
width: 200px;
padding: 20px;
border: 5px solid black;
/* Largeur totale = 200 + 40 + 10 = 250px */
}
Solution : box-sizing: border-box
* {
box-sizing: border-box; /* Recommandé globalement */
}
div {
width: 200px;
padding: 20px;
border: 5px solid black;
/* Largeur totale = 200px (padding et border INCLUS) */
}
Toujours utiliser border-box au début de votre CSS
Visualiser le Box Model¶
DevTools (F12) → Onglet « Éléments » → Panneau « Styles » en bas
┌─────────────────────┐
│ margin: 10 │
│ ┌───────────────┐ │
│ │ border: 5 │ │
│ │ ┌───────────┐ │ │
│ │ │ padding: │ │ │
│ │ │ 20 │ │ │
│ │ │ ┌───────┐ │ │ │
│ │ │ │ 200× │ │ │ │
│ │ │ │ 150px │ │ │ │
│ │ │ └───────┘ │ │ │
│ │ └───────────┘ │ │
│ └───────────────┘ │
└─────────────────────┘
Utilisez toujours les DevTools pour déboguer le Box Model
Fin de la séance 3¶
Prochaine étape : TP3 - Synthèse HTML¶
Questions ?