Pour passer de la création de pages simples à la construction d'applications web robustes, il faut adopter une approche systématique. Au lieu de choisir des couleurs ou des tailles au cas par cas, les professionnels définissent un Design System : une collection de variables et de règles qui garantissent la cohérence sur l'ensemble d'un projet.
Nous avons refactorisé notre fichier styles.css pour y intégrer cette approche. Il contient maintenant, à l'intérieur d'un bloc :root, toutes nos "variables de design" (design tokens) pour les couleurs, la typographie et les espacements. À partir de maintenant, nous utiliserons ces variables (ex: var(--color-primary)) dans notre CSS pour tous les exercices.
Les Variables CSS, aussi appelées "Custom Properties", sont un peu comme des variables en programmation : elles vous permettent de définir des valeurs réutilisables dans votre feuille de style. Cela simplifie la maintenance, améliore la cohérence et rend les changements de thème beaucoup plus faciles.
--).:root) pour qu'elles soient globales, ou sur un sélecteur spécifique pour un scope limité.var().:root {
--primary-color: #6366F1; /* indigo-500 */
--secondary-color: #818CF8; /* indigo-400 */
--text-color: #334155; /* slate-700 */
--spacing-unit: 1rem;
}
.card {
background-color: var(--primary-color);
color: white;
padding: calc(2 * var(--spacing-unit)); /* 2rem */
border-radius: 0.5rem;
}
.button {
background-color: var(--secondary-color);
color: white;
padding: var(--spacing-unit);
}
L'avantage est que si vous décidez de changer la couleur principale de votre site, vous n'avez qu'à modifier une seule ligne dans :root, et toutes les occurrences de --primary-color seront mises à jour automatiquement !
La sémantique HTML, c'est l'art d'utiliser les balises HTML de manière à ce qu'elles décrivent le sens et le rôle du contenu qu'elles contiennent, et non seulement son apparence. C'est crucial pour plusieurs raisons :
Voici quelques balises sémantiques courantes :
<header> <!-- Contient généralement le logo, le titre du site, la navigation -->
<nav> <!-- Contient les liens de navigation principaux -->
<ul>
<li><a href="#">Accueil</a></li>
<li><a href="#">Services</a></li>
</ul>
</nav>
</header>
<main> <!-- Contient le contenu principal, unique à la page -->
<section> <!-- Un regroupement thématique de contenu -->
<h2>Titre de Section</h2>
<p>Contenu de la section.</p>
</section>
<article> <!-- Contenu autonome, comme un article de blog ou une actualité -->
<h2>Titre de l'Article</h2>
<p>Contenu de l'article.</p>
</article>
</main>
<footer> <!-- Contient les informations de copyright, liens de contact, etc. -->
<p>© 2024 Mon Site</p>
</footer>
<div> <!-- Conteneur générique, sans signification sémantique particulière -->
<span> <!-- Élément en ligne générique, sans signification sémantique particulière -->
</div>
<header> : Représente le contenu introductif ou un groupe d'aides à la navigation.<nav> : Représente une section de liens de navigation.<main> : Représente le contenu dominant du <body>. Il ne doit y en avoir qu'un par page.<section> : Représente une section générique d'un document, souvent avec un titre.<article> : Représente un contenu autonome et indépendant (ex: article de blog, commentaire, widget).<footer> : Représente le pied de page d'un document ou d'une section.<div> : Un conteneur générique de type "bloc" sans signification sémantique particulière. Utilisé quand aucune autre balise sémantique ne convient.<span> : Un conteneur générique de type "en ligne" sans signification sémantique particulière. Utilisé pour cibler une petite partie de texte.Pour rappel, la méthode la plus propre et recommandée pour lier votre HTML et votre CSS est d'utiliser une feuille de style externe. Cela permet de séparer clairement la structure du style et de réutiliser le même fichier CSS sur plusieurs pages.
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Titre de ma page</title>
<link rel="stylesheet" href="styles.css"> <!-- La ligne importante -->
</head>
Les sélecteurs CSS nous permettent de choisir les éléments HTML que nous voulons styliser. Plus nous sommes précis, plus nous avons de contrôle sur notre design.
Cible toutes les occurrences d'une balise HTML spécifique.
p {
color: #333;
}
h1 {
font-size: 12px;
}
Cible tous les éléments HTML qui ont un attribut class spécifique. Une classe peut être appliquée à plusieurs éléments, et un élément peut avoir plusieurs classes.
<p class="texte-important">Ceci est un texte important.</p>
<div class="card texte-important">Une carte importante.</div>
.texte-important {
color: red;
font-weight: bold;
}
.card {
border: 1px solid #ccc;
padding: 15px;
}
Cible un élément HTML unique avec un attribut id spécifique. Un ID doit être unique sur toute la page HTML (il ne doit y avoir qu'un seul élément avec un ID donné).
<div id="zone-principale">...</div>
#zone-principale {
background-color: #f0f0f0;
margin: 20px;
}
Permettent de cibler un élément qui est un "descendant" (enfant, petit-enfant, etc.) d'un autre élément. On les écrit en séparant les sélecteurs par un espace.
Il existe également le sélecteur de descendant direct (enfant direct) d'un autre élément. On les écrit en séparant les sélecteurs par >.
Exemple : pour cibler tous les liens (<a>) qui se trouvent à l'intérieur d'une balise de navigation (<nav>). Une des balise a n'est pas un enfant direct de nav.
<nav>
<a href="#">Lien 1</a>
<p><a href="#">Lien 2 dans un paragraphe</a></p>
</nav>
<a href="#">Lien hors navigation</a>
nav a {
color: purple; /* Seuls les liens DANS le <nav> seront violets */
text-decoration: none;
}
Une pseudo-classe est un mot-clé ajouté à un sélecteur qui spécifie un état spécial de l'élément. La pseudo-classe :hover s'applique lorsqu'un utilisateur passe la souris sur un élément.
C'est très utile pour ajouter de l'interactivité et du feedback visuel à vos liens et boutons.
a {
color: blue;
transition: color 0.3s ease; /* Pour une transition douce */
}
a:hover {
color: darkblue; /* La couleur change au survol */
text-decoration: underline; /* Le texte est souligné au survol */
}
Pour chaque exercice, créez un nouveau fichier HTML et CSS (ou continuez sur les fichiers de la Séance 1 si vous le souhaitez, en les organisant bien). N'oubliez pas de lier votre fichier CSS dans le <head> de votre HTML.
<header> pour le titre du blog et un slogan.<main> contenant un <article>.<article>, mettez un titre d'article (<h1>), une date de publication (<p>), et plusieurs paragraphes de contenu (<p>).<footer> pour les informations de copyright.class="highlight" à un paragraphe que vous souhaitez mettre en évidence.id="auteur-info" à un paragraphe contenant le nom de l'auteur..highlight.#auteur-info.<nav>) contenant une liste de liens (<ul><li><a>).<a> en dehors de cette balise <nav> (par exemple, dans un paragraphe simple).<nav>.:hover à ces mêmes liens (ceux de la navigation) : changez leur couleur en vert et ajoutez un léger soulignement au survol.Pour ce TP, vous allez reprendre la page de présentation personnelle de la Séance 1. L'objectif est de la refactoriser en utilisant la sémantique HTML et d'appliquer notre nouveau Design System.
index.html et styles.css de votre TP de la Séance 1.<div> par les balises sémantiques appropriées : <header>, <main>, <section>, <footer>.styles.css, supprimez les anciennes règles de style du TP1..profile-header {
background-color: var(--color-surface);
padding: var(--space-8);
}
#main-title {
color: var(--color-primary);
font-size: var(--font-size-h1);
}
.about-me-section {
margin-bottom: var(--space-6);
}
var(...).