Cours HTML/CSS 2026

HTML/CSS approfondi

Sélecteurs avancés, Box Model et Positionnement

Séance 4 - DSP - USAL33

Quentin Fait
Cours HTML/CSS 2026

Rappel de la séance 3

Quentin Fait
Cours HTML/CSS 2026

Ce que nous avons vu

Attributs globaux HTML

  • id, class, data-*, lang

Sélecteurs CSS de base

  • Type, classe, ID, universel
  • Sélecteurs de combinaison (descendant, enfant direct)

Aujourd'hui :

  • Fin des sélecteurs avancés
  • Box Model
  • Positionnement CSS
Quentin Fait
Cours HTML/CSS 2026

1. Sélecteurs avancés (suite)

Quentin Fait
Cours HTML/CSS 2026

Pseudo-classes — État des éléments

Pseudo-classe Cible Exemple
:hover Survol de la souris a:hover { color: red; }
:focus Élément ayant le focus input:focus { border-color: blue; }
:first-child Premier enfant li:first-child { font-weight: bold; }
:last-child Dernier enfant li:last-child { border: none; }
:nth-child(n) n-ième enfant tr:nth-child(even) { background: #f0f0f0; }
Quentin Fait
Cours HTML/CSS 2026

Exemple : Tableau avec lignes alternées

tr:nth-child(odd) {
    background: white;
}

tr:nth-child(even) {
    background: #f5f5f5;
}

Usage typique : Améliorer la lisibilité des tableaux

Quentin Fait
Cours HTML/CSS 2026

Pseudo-éléments

Pseudo-élément Cible Exemple
::before Contenu inséré avant p::before { content: "→ "; }
::after Contenu inséré après a::after { content: " ↗"; }

Important : La propriété content est obligatoire

a[href^="http"]::after {
    content: " (lien externe)";
}
Quentin Fait
Cours HTML/CSS 2026

Sélecteurs d'attributs

Sélecteur Cible Exemple
[attr] Éléments avec l'attribut [required] { }
[attr="value"] Valeur exacte [type="email"] { }
[attr^="value"] Commence par [href^="http"] { }
[attr$="value"] Finit par [href$=".pdf"] { }
Quentin Fait
Cours HTML/CSS 2026

Exemples pratiques

/* Champs obligatoires */
input[required] {
    border-left: 3px solid red;
}

/* Liens externes */
a[href^="http"] {
    color: blue;
}

/* Liens PDF */
a[href$=".pdf"]::after {
    content: " (PDF)";
}
Quentin Fait
Cours HTML/CSS 2026

Spécificité CSS

Spécificité = poids d'un sélecteur

Type Valeur Exemple
Éléments 1 p, div
Classes, attributs, pseudo-classes 10 .card, [type], :hover
IDs 100 #header
Styles inline 1000 <div style="...">

Règle : Plus la spécificité est élevée, plus la règle est prioritaire

Quentin Fait
Cours HTML/CSS 2026

Calcul de la spécificité

/* Spécificité : 1 */
p { color: blue; }

/* Spécificité : 11 */
.intro p { color: red; }

/* Spécificité : 101 */
#content p { color: green; }

/* Spécificité : 111 - gagne */
#content .intro p { color: purple; }
Quentin Fait
Cours HTML/CSS 2026

La cascade CSS

Ordre de priorité quand plusieurs règles ciblent le même élément :

  1. Importance : !important
  2. Spécificité : ID > classe > élément
  3. Ordre d'apparition : La dernière règle gagne
p { color: blue; }
p { color: red; }  /* Cette règle gagne */

Conseil : Éviter !important autant que possible

Quentin Fait
Cours HTML/CSS 2026

2. Le Box Model

Quentin Fait
Cours HTML/CSS 2026

Le Box Model CSS

Chaque élément HTML est une boîte composée de 4 zones :

┌─────────────────────────────────────┐
│           MARGIN (extérieur)        │
│  ┌───────────────────────────────┐  │
│  │        BORDER (bordure)       │  │
│  │  ┌─────────────────────────┐  │  │
│  │  │   PADDING (intérieur)   │  │  │
│  │  │  ┌───────────────────┐  │  │  │
│  │  │  │     CONTENT       │  │  │  │
│  │  │  └───────────────────┘  │  │  │
│  │  └─────────────────────────┘  │  │
│  └───────────────────────────────┘  │
└─────────────────────────────────────┘
Quentin Fait
Cours HTML/CSS 2026

Les 4 zones du Box Model

Zone Rôle Propriété CSS
Content Contenu (texte, images) width, height
Padding Espace intérieur padding
Border Bordure border
Margin Espace extérieur margin
Quentin Fait
Cours HTML/CSS 2026

Exemple de Box Model

div {
    width: 200px;
    padding: 20px;
    border: 5px solid black;
    margin: 10px;
}

Largeur totale (par défaut) = 200 + (20×2) + (5×2) = 250px

Par défaut, width et height ne comptent que le content

Quentin Fait
Cours HTML/CSS 2026

Padding — Espacement intérieur

/* Tous les côtés identiques */
padding: 15px;

/* Vertical | Horizontal */
padding: 10px 20px;

/* Top | Right | Bottom | Left */
padding: 10px 20px 15px 25px;

/* Côté par côté */
padding-top: 10px;
padding-right: 20px;
padding-bottom: 15px;
padding-left: 25px;

Astuce : Top, Right, Bottom, Left (sens horaire)

Quentin Fait
Cours HTML/CSS 2026

Border — Bordure

/* Syntaxe : width style color */
border: 2px solid #333;

/* Styles courants */
border-style: solid;   /* Ligne continue */
border-style: dashed;  /* Tirets */
border-style: dotted;  /* Pointillés */

/* Coins arrondis */
border-radius: 10px;
border-radius: 50%;    /* Cercle */
Quentin Fait
Cours HTML/CSS 2026

Margin — Espacement extérieur

/* Syntaxe identique au padding */
margin: 20px;
margin: 10px 20px;
margin: 10px 15px 20px 25px;

/* Centrage horizontal */
.container {
    width: 800px;
    margin: 0 auto;
}

Pour centrer : L'élément doit avoir une largeur définie

Quentin Fait
Cours HTML/CSS 2026

Fusion des marges verticales

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)

Important : Uniquement vertical, pas horizontal

Quentin Fait
Cours HTML/CSS 2026

box-sizing: border-box

Le problème :

.box {
    width: 200px;
    padding: 20px;
    border: 5px solid black;
}
/* Largeur totale = 250px */

La solution :

* {
    box-sizing: border-box;
}

.box {
    width: 200px;  /* Largeur totale = 200px */
    padding: 20px;
    border: 5px solid black;
}

À mettre au début de tous vos projets CSS

Quentin Fait
Cours HTML/CSS 2026

Visualiser le Box Model

DevTools : F12 → Éléments → Computed

Les zones sont colorées :

  • Margin : bleu clair
  • Border : jaune
  • Padding : vert
  • Content : bleu foncé

Utilisez les DevTools pour déboguer

Quentin Fait
Cours HTML/CSS 2026

3. Positionnement CSS

Quentin Fait
Cours HTML/CSS 2026

Propriété position

Valeur Comportement
static Position normale (défaut)
relative Relative à sa position normale
absolute Par rapport au parent positionné
fixed Par rapport à la fenêtre
sticky Hybride relative/fixed

Propriétés associées : top, right, bottom, left, z-index

Quentin Fait
Cours HTML/CSS 2026

position: static

Position normale dans le flux

div {
    position: static; /* Valeur par défaut */
}

Les propriétés top, right, bottom, left sont ignorées

Vous n'écrirez presque jamais cette valeur

Quentin Fait
Cours HTML/CSS 2026

position: relative

Décalage par rapport à sa position normale

.box {
    position: relative;
    top: 20px;
    left: 30px;
}

Caractéristiques :

  • L'élément reste dans le flux
  • L'espace d'origine est réservé
  • Crée une référence pour position: absolute
Quentin Fait
Cours HTML/CSS 2026

position: absolute

Position par rapport au parent positionné le plus proche

.parent {
    position: relative;
}

.child {
    position: absolute;
    top: 10px;
    right: 10px;
}

Caractéristiques :

  • L'élément sort du flux
  • Si aucun parent positionné : par rapport à <body>
Quentin Fait
Cours HTML/CSS 2026

Exemple : Badge sur une carte

<div class="card">
    <span class="badge">NEW</span>
    <h3>Titre</h3>
    <p>Contenu</p>
</div>
.card {
    position: relative;
    padding: 20px;
}

.badge {
    position: absolute;
    top: 10px;
    right: 10px;
    background: red;
    color: white;
    padding: 5px 10px;
}
Quentin Fait
Cours HTML/CSS 2026

position: fixed

Position fixe par rapport à la fenêtre

.header {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
}

Caractéristiques :

  • Ne bouge pas au scroll
  • Sort du flux

Usage : Headers fixes, boutons flottants

Quentin Fait
Cours HTML/CSS 2026

Compenser un header fixe

.navbar {
    position: fixed;
    top: 0;
    width: 100%;
    height: 60px;
}

body {
    padding-top: 60px; /* Hauteur du header */
}
Quentin Fait
Cours HTML/CSS 2026

position: sticky

Hybride entre relative et fixed

.sidebar {
    position: sticky;
    top: 20px;
}

Comportement :

  1. Agit comme relative normalement
  2. Devient fixed au scroll quand le seuil est atteint
  3. Redevient relative à la fin du conteneur

Usage : Sidebars, en-têtes de tableaux

Quentin Fait
Cours HTML/CSS 2026

z-index — Ordre d'empilement

Contrôle la superposition des éléments

.back {
    position: absolute;
    z-index: 1;
}

.front {
    position: absolute;
    z-index: 2; /* Au-dessus */
}

Règles :

  • Fonctionne avec position différent de static
  • Plus le z-index est élevé, plus l'élément est au-dessus
Quentin Fait
Cours HTML/CSS 2026

Valeurs courantes de z-index

.navbar {
    position: fixed;
    z-index: 100;
}

.modal {
    position: fixed;
    z-index: 200;
}

.overlay {
    position: fixed;
    z-index: 199;
}

Convention : Utiliser des valeurs espacées (100, 200, 300...)

Quentin Fait
Cours HTML/CSS 2026

Centrage avec position absolute

.center {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
}

Explication :

  1. top: 50%; left: 50%; place le coin en haut à gauche au centre
  2. transform décale l'élément de la moitié de sa taille

Alternative : Flexbox ou Grid (plus simple)

Quentin Fait
Cours HTML/CSS 2026

Récapitulatif position

Valeur Flux Référence
static Dans le flux -
relative Dans le flux Sa position normale
absolute Hors du flux Parent positionné
fixed Hors du flux Fenêtre
sticky Dans puis hors Conteneur
Quentin Fait
Cours HTML/CSS 2026

Résumé de la séance

Quentin Fait
Cours HTML/CSS 2026

Ce que nous avons vu

Sélecteurs avancés

  • Pseudo-classes : :hover, :nth-child()
  • Pseudo-éléments : ::before, ::after
  • Sélecteurs d'attributs
  • Spécificité et cascade

Box Model

  • Content, Padding, Border, Margin
  • box-sizing: border-box

Positionnement

  • static, relative, absolute, fixed, sticky
  • z-index
Quentin Fait
Cours HTML/CSS 2026

Points clés

Box Model : Toujours utiliser box-sizing: border-box

Spécificité : Éviter !important

Positionnement :

  • relative pour créer une référence
  • absolute pour sortir du flux
  • fixed pour des éléments fixes
  • sticky pour un comportement hybride

DevTools : Indispensable pour déboguer

Quentin Fait
Cours HTML/CSS 2026

Prochaine séance

TP4 : Box Model et Positionnement

Mise en pratique des concepts vus aujourd'hui

Quentin Fait
Cours HTML/CSS 2026

Questions ?

Quentin Fait
Cours HTML/CSS 2026

Merci !

À la prochaine séance

Quentin Fait