← Développement

HTML5 / CSS3

Sommaire

1. HTML5 — structurer le contenu

HTML (HyperText Markup Language) structure et met en forme le contenu d'une page via des balises.

Structure minimale d'un document

<!doctype html>
<html lang="fr">
<head>
    <meta charset="utf-8">
    <title>Titre de la page</title>
</head>
<body>
    ...
</body>
</html>

Attributs

Une balise peut porter un ou plusieurs attributs, qui la configurent ou modifient son comportement.

Structure sémantique de page

<header>En-tête de la page
    <nav>Barre de navigation</nav>
</header>
<aside>Barre latérale</aside>
<section>Section principale
    <article>Article 1</article>
    <article>Article 2</article>
</section>
<footer>Pied-de-page</footer>
BaliseRôle
<div>Conteneur générique (regroupement / mise en page), sans sens sémantique
<section>Regroupe des éléments autour d'une même thématique
<article>Contenu autonome, indépendant du reste de la page
<header> / <footer>En-tête / pied de page (ou de section)
<nav>Bloc de navigation
<hx> (h1 à h6)Titres, x = niveau hiérarchique (1 = le plus important)

Liens, listes, texte

<a href="page.html" target="_blank">Mon lien</a>

<ul>                          <!-- liste à puces -->
    <li>Élément 1</li>
</ul>

<ol start="2" type="1">       <!-- liste numérotée -->
    <li>Élément 1</li>
</ol>

<dl>                          <!-- liste de définitions -->
    <dt>Mot à définir</dt>
    <dd>Définition</dd>
</dl>

Contenus multimédias

<img src="photo.jpg" alt="Texte alternatif">

<audio src="son.mp3" controls autoplay loop></audio>

<video src="film.mp4" poster="apercu.jpg" controls>
    <source src="film.webm" type="video/webm">
</video>

<canvas></canvas>             <!-- zone de dessin bitmap pilotée en script -->

<figure>
    <img src="photo.jpg" alt="...">
    <figcaption>Légende de l'image</figcaption>
</figure>

Tableaux

<table>
    <caption>Tarifs saison 2024/2025</caption>
    <thead>
        <tr><th>Produit</th><th>Prix</th></tr>
    </thead>
    <tbody>
        <tr><td colspan="2">Ligne fusionnée</td></tr>
    </tbody>
</table>

Formulaires

La partie HTML seulement — la logique de traitement PHP est dans la fiche PHP.

<form action="traitement.php" method="post">
    <fieldset>
        <legend>Identité</legend>
        <input type="text" name="prenom">
        <input type="password" name="motdepasse">
        <input type="number" name="age">
        <input type="radio" name="genre" value="m"> Masculin
        <input type="checkbox" name="couleur_bleu"> Bleu
        <input type="date" name="naissance">
        <input type="email" name="email">
        <input type="hidden" name="tag" value="visiteur">
        <textarea name="commentaire" rows="5" cols="50"></textarea>
        <select name="langue">
            <option value="fr">Français</option>
            <option value="en" selected>Anglais</option>
        </select>
        <button name="envoyer" onclick="...">Envoyer</button>
        <input type="submit" value="Valider">
        <input type="reset">
    </fieldset>
</form>

2. CSS3 — mettre en forme

Le CSS applique des styles au HTML, sous forme de couples propriété: valeur;.

p {
    background-color: #39c0ba;
}

Sélecteurs

SélecteurExempleCible
Balisep { }Toutes les balises <p>
Classe.rouge { }Tous les éléments avec class="rouge"
Identifiant#menu { }L'élément unique avec id="menu"
Groupémark, strong { }Plusieurs sélecteurs en même temps
Descendantnav a { }Un sélecteur imbriqué dans un autre

Le modèle de boîte (box model)

┌───────────────── margin (marge extérieure) ─────────────────┐
│ ┌───────────────────── border ─────────────────────────┐    │
│ │ ┌────────────── padding (marge intérieure) ────────┐ │    │
│ │ │              Ma balise block                      │ │    │
│ │ │              (width × height)                     │ │    │
│ │ └────────────────────────────────────────────────────┘ │    │
│ └────────────────────────────────────────────────────────┘    │
└──────────────────────────────────────────────────────────────┘

Positionnement — 4 solutions

De la plus ancienne à la plus moderne.

PropriétéUsage
displayChange le type de rendu d'une balise (block, inline, inline-block, none…) — solution basique
positionPositionne un élément par coordonnées ou par rapport à un autre élément (relative, absolute, fixed, sticky)
floatFait flotter un élément à gauche / droite (technique obsolète mais encore rencontrée)
flexboxOrganise des éléments en ligne ou en colonne — recommandé pour centrer / répartir
gridMise en page générale en lignes et colonnes — recommandé pour une mise en page complexe
/* Flexbox */
.conteneur {
    display: flex;
    justify-content: space-between; /* alignement horizontal */
    align-items: center;            /* alignement vertical */
}

/* Grid */
.conteneur {
    display: grid;
    grid-template-columns: 1fr 2fr 1fr; /* fr = fraction d'espace disponible */
    gap: 20px;
}

En pratique moderne, on combine souvent Grid (structure globale de page) + Flexbox (alignement à l'intérieur des blocs).

Texte, arrière-plans, bordures, ombres

selecteur {
    font-family: "Segoe UI", Arial, sans-serif; /* le navigateur prend la 1re police connue */
    background-color: #222;
    border-style: solid;      /* none par défaut */
    border-width: 2px;
    border-color: red;
    border: solid red 2px;    /* raccourci */
    box-shadow: 2px 2px 5px rgba(0,0,0,0.3); /* décalage x, y, flou, couleur */
}

Seuls les éléments block peuvent recevoir un arrière-plan.

Pseudo-classes et media-queries

a:hover { color: orange; }     /* notation : balise:pseudo-classe */

@media (max-width: 768px) {
    body { font-size: 14px; }  /* adapte le style selon la résolution d'écran */
}

3. Bon à savoir — structure d'une URL

https://example.com:80/blog?search=test&sort_by=created_at#header
└─┬──┘   └────┬─────┘└┬┘└─┬─┘└──────────┬───────────────┘└──┬───┘
protocole   domaine  port path   query parameters       fragment/ancre