TP HTML & CSS #3
S1 2026-2027 - IUT - Université de Lille, BUT2 SD
TP 3 — CSS : suite
Objectif : zones personnalisées, tableaux élaborés, flottement, menus horizontaux, colonnes avec flex et positionnement.
3.1 Préparation
- Créez le dossier
code/tp3, et dedans les dossiersimgetcss. - Copiez la page
exo2.htmlet son stylestyle2.csssous les nomspage.htmletstyle.css. - Cette page contient déjà un unique
<h1>: n'en ajoutez pas d'autre, utilisez des<h2>et<h3>pour le reste du document. - Ajoutez dans la page des titres de niveau 3 : par exemple « Exercice 2 du TP 2 – Partie 1 ».
- Donnez une couleur
purpleaux titresh3de la page (ajoutez la règle dansstyle.css). - Récupérez le texte d'un poème et une image de portrait de l'auteur ; placez-les dans le dossier approprié.
3.2 Zone 1 : création d'une zone avec citation
- Ajoutez un
<h3>« Zone 1 : création zone », suivi d'une zone bloc<div>nomméezone1. Choix : id ou class ? (indice : un seul usage →id). - Copiez le poème sous forme de longue citation
<blockquote>composée de cinq paragraphes. - Ajoutez au début de
zone1un titre<h3>(par exemple le titre du poème).
<h3>Zone 1 : création zone</h3>
<div id="zone1">
<h3>Titre du poème</h3>
<blockquote>
<p>Premier paragraphe du poème…</p>
<p>Second paragraphe…</p>
<p>…</p>
</blockquote>
</div>Définissez dans
style.cssles règles CSS dezone1: une zone de largeur 600 px, sur fond gris, décalée de 50 px à gauche ; leh3de la zone en couleurlime, sans marge et avec unpaddingde 10 px ; les paragraphes dublockquoted'une largeur de 350 px, décalés de 20 px et indentés de 1 em (text-indent).La première lettre de chaque paragraphe en police
fantasy, taille double (::first-letter) et couleurlime.Ajoutez une image de fond (le portrait) qui se répète sur l'axe Y (
background-repeat: repeat-y). Le portrait ne doit pas être coupé ; ajustez les marges si besoin.Entourez la fin du dernier paragraphe (« … heureux ! ») d'une balise en ligne de votre choix, par exemple
<span class="fin">…</span>, puis stylisez-la en italique, couleurlimeet indentée de 1 em.
À retenir :
#zone1 h3ne cible que lesh3à l'intérieur de la zone.text-indentindente la première ligne. Les pseudo-éléments::first-letter,::first-lineaffinent le style.background-repeat: repeat-yrépète l'image verticalement.
3.3 Zone 2 : table et listes
- Ajoutez un
<h3>« Zone 2 : Tables et listes », suivi d'une zone bloczone2. - Ajoutez au début de
zone2un titre<h3>« Autres Poèmes », suivi du tableau :
| Poème | Auteur | Année | Recueil |
|---|---|---|---|
| Demain, dès l'aube... | Victor HUGO | 1802-1885 | Les contemplations |
| Il pleure dans mon cœur | Paul VERLAINE | 1844-1896 | Romances sans paroles |
| Le dormeur du val | Arthur RIMBAUD | 1854-1891 | Poésies |
- Ajoutez à la suite une liste ordonnée imbriquée à trois niveaux :
<ol>
<li>Semaine du 20 mars
<ol>
<li>Baudelaire
<ol>
<li>Correspondances</li>
<li>Harmonie du soir</li>
<li>L'homme de la mer</li>
</ol>
</li>
<li>Prévert</li>
<li>Hugo</li>
<li>Apollinaire</li>
</ol>
</li>
</ol>- Définissez dans
style.cssles règles CSS dezone2: une zone de largeur 600 px, sur fond clair (#E5FBE2), décalée de 50 px à gauche avec une marge haute de 20 px ; le tableau sur 70 % de large avecborder-collapse: collapse, des bordures fines et unpaddingsurth/td; les lignes paires en blanc (tr:nth-child(even)) ; au survol d'une ligne, le texte passe en gras et grossit légèrement ; la dernière colonne (td:last-child) en vert. - Numérotez les listes ordonnées (
list-style-type) : 1er niveau enupper-alpha(A, B…), 2e niveau enlower-alpha(a, b…), 3e niveau enlower-roman(i, ii…).
À retenir :
tr:nth-child(even)cible les lignes paires,td:last-childla dernière colonne,:hovergère le survol. Les listes imbriquées se numérotent à chaque niveau aveclist-style-type.
3.4 Zone 3 : le texte entoure une image (float)
- Ajoutez un
<h3>« Zone 3 : Image entourée de texte », suivi d'un bloczone3contenant la photo du portrait suivie d'un paragraphe de biographie :
<div id="zone3">
<h3>Zone 3 : Image entourée de texte</h3>
<img src="img/portrait.png" alt="Portrait">
<p>Long texte de biographie… sur plusieurs paragraphes.</p>
</div>Définissez les règles CSS (fond
#F9F8DB, mêmes propriétés de zone quezone2, texte justifié) : faites flotter l'image à gauche (float: left) avec une marge droite, pour que le texte l'entoure.Testez
float: rightà la place defloat: left, puis ajoutez une règle pour que le flottement soit arrêté après la zone (#zone3 { overflow: auto; }ou un élémentclear: both).
À retenir :
floatsort l'élément du flux et fait couler le texte autour. On l'arrête avecclearouoverflow: autosur le conteneur.
3.5 Zone 4 : menu horizontal (nav)
- Ajoutez un
<h3>« Zone 4 : Menu horizontale ». Leh3sert aussi à arrêter le flottement de la zone précédente (clear: both). - Créez une section
<nav>avec les rubriques sous forme de liste non ordonnée :
<h3 style="clear: both;">Zone 4 : Menu horizontale</h3>
<nav>
<ul>
<li><a href="#">Biographie</a></li>
<li><a href="#">Poèmes</a></li>
<li><a href="#">Galerie</a></li>
<li><a href="#">Ressources</a></li>
<li><a href="#">Contacts</a></li>
</ul>
</nav>
#: lien vide pour tester. Il pourra être remplacé par une URL réelle.
- Définissez les règles CSS du menu : le
navsur 700 px, centré ; la liste sans puces (list-style-type: none) et sanspadding; leslimis en ligne (display: inline-block), de largeur 100 px, sur fond noir avec une bordure bleue et un texte centré ; les liens en blanc, sans soulignement (text-decoration: none). - Au survol d'un item (
nav li:hover), le fond passe de noir à bleu. - (Optionnel) Remplaçons les couleurs de fond par des (
background-image) : choisissez une image pour l'état normal et une autre pour le survol (créez ou récupérez deux petites images de votre choix).
À retenir : un menu se construit avec
<nav>+<ul>+<li>.list-style-type: nonesupprime les puces,display: inline-blockmet les items en ligne,text-decoration: noneretire le soulignement des liens.
3.6 Zone 5 : contenu sur deux colonnes
Ajoutez un
<h3>« Zone 5 : Contenu sur deux colonnes », suivi d'un bloczone5contenant deux paragraphes avec le même long texte (la biographie, par exemple).Réalisez les deux colonnes par flexbox (le plus simple) : le conteneur
#zone5endisplay: flexavec unclear: bothet un espacement (gap: 20px), chaque paragraphe enflex: 1et texte justifié.Testez les deux autres méthodes :
- float : deux paragraphes avec
float: left; width: 48%;; - position : deux paragraphes en
position: absolute;, l'un avecleft: 0;, l'autre avecleft: 50%;(n'oubliez pas de fixer une largeur, ex.width: 48%, sinon les deux colonnes se chevauchent).
- float : deux paragraphes avec
Généralisez le principe sur plusieurs colonnes (3 ou 4) et testez.
À retenir :
display: flexdispose les enfants en ligne et est la méthode la plus simple pour créer des colonnes.gapespace les éléments.
3.7 Zone 6 : un menu avec flex
- Créez un autre menu en travaillant le positionnement des items avec flex :
<nav class="menu-flex">
<ul>
<li><a href="#">Accueil</a></li>
<li><a href="#">Bio</a></li>
<li><a href="#">Galerie</a></li>
</ul>
</nav>- Testez : les items s'étirent de façon égale sur toute la largeur. Supprimez
flex: 1et observez. - Définissez en CSS (classe
.menu-flex) : la liste endisplay: flex, sans puces et avec ungapde 10 px ; chaquelienflex: 1, sur fond bleu, texte centré ; les liens en blanc, sans soulignement, endisplay: blockavec unpaddingde 10 px ; au survol des liens, un fond plus clair.
3.8 Pour aller plus loin : rendre la page adaptative
Les sites se consultent sur écran très variés (ordinateur, tablette, smartphone). Le Responsive Web Design adapte l'affichage à l'appareil.
- Ajoutez dans le
<head>depage.htmlla balise viewport :
<meta name="viewport" content="width=device-width, initial-scale=1.0">Ajoutez en fin de
style.cssune règle@media only screen and (max-width: 480px)dans laquelle vous adaptez la mise en page : les zones 1 à 3 passent à 100 % de largeur sans marge gauche, lenavà 100 %, la zone 5 en une seule colonne (flex-direction: column), et les images rétrécissent à 100 % de la largeur («max-width: 100%,height: auto»).Redimensionnez la fenêtre du navigateur (ou utilisez le mode responsive de F12) : passez sous 480 px et observez la mise en page qui change.
Testez l'import conditionnel de feuilles de style selon l'appareil. Créez
bureau.cssetsmartphone.cssen copiantstyle.csspuis en changeant seulement quelques propriétés (par exemple la couleur desh3ou la largeur des zones), et ajoutez danspage.html:
<link rel="stylesheet" media="only screen and (min-width: 480px)" href="bureau.css">
<link rel="stylesheet" media="only screen and (max-width: 480px)" href="smartphone.css">- Redimensionnez la fenêtre de part et d'autre de 480 px et observez quelle feuille s'applique selon l'appareil.
À retenir : les règles
@mediaappliquent des styles selon la taille de l'écran. La balise<meta name="viewport">est indispensable au rendu mobile.flex-direction: columnempile les colonnes sur petit écran.