Séance 6
Objectifs
Comprendre le fonctionnement du box model.
Utiliser Flexbox pour organiser la mise en page du site.
Méthode : Arborescence

Méthode : index.html
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Portfolio de Vincent Vanneste</title>
<link rel="stylesheet" href="css/style.css">
<link rel="stylesheet" href="css/accueil.css">
</head>
<body>
<header id="haut" role="banner" aria-label="En-tête du site">
<figure role="img" aria-labelledby="figcaption-vv">
<img src="images/photo.jpg" alt="Photo de Vincent Vanneste">
<figcaption id="figcaption-vv">Vincent Vanneste</figcaption>
</figure>
<h1>Portfolio de Vincent Vanneste</h1>
<nav role="navigation" aria-label="Navigation principale">
<ul>
<li><a href="index.html">Accueil</a></li>
<li><a href="projets.html">Projets</a></li>
<li><a href="https://www.univ-littoral.fr/" target="_blank">ULCO</a></li>
</ul>
</nav>
</header>
<main role="main">
<nav role="navigation" aria-label="Navigation interne à la page">
<ul>
<li><a href="#about">À propos</a></li>
<li><a href="#competences">Compétences</a></li>
<li><a href="#experiences">Expériences</a></li>
<li><a href="#formations">Formations</a></li>
</ul>
</nav>
<!-- À propos -->
<section id="about" role="region" aria-labelledby="titre-about">
<h2 class="icon-about" id="titre-about">À propos</h2>
<p>Je suis directeur des études du DEUST WMI de Calais et j'enseigne les fondamentaux du développement web
(HTML, CSS, JavaScript, PHP). Passionné par la transmission des connaissances, j'accompagne mes
étudiants dans l'acquisition des compétences nécessaires pour réussir dans le secteur du numérique.</p>
<address role="contentinfo" aria-label="Coordonnées">
<dl>
<dt>Localisation :</dt>
<dd>Calais, France</dd>
<dt>Site :</dt>
<dd><a href="https://vincent-vanneste.fr/" target="_blank">vincent-vanneste.fr</a></dd>
<dt>Email :</dt>
<dd><a href="mailto:vincent.vanneste@univ-littoral.fr">vincent.vanneste@univ-littoral.fr</a></dd>
</dl>
</address>
</section>
<!-- Compétences -->
<section id="competences" role="region" aria-labelledby="titre-competences">
<h2 class="icon-competences" id="titre-competences">Compétences</h2>
<ul>
<li>HTML</li>
<li>CSS</li>
<li>Responsive</li>
<li>Accessibilité</li>
<li>JavaScript</li>
<li>PHP • Laravel 11</li>
<li>MySQL</li>
<li>Git & GitHub</li>
</ul>
</section>
<!-- Expériences -->
<section id="experiences" role="region" aria-labelledby="titre-experiences">
<h2 class="icon-experiences" id="titre-experiences">Expériences récentes</h2>
<ul>
<li>
<strong>Enseignant – Licence 1 Informatique</strong><br>
<time datetime="2025">2025</time> •
<address>
<a href="https://www.univ-littoral.fr/" target="_blank">ULCO</a>
</address><br>
Introduction à HTML, CSS, JS
</li>
<li>
<strong>Directeur des études – DEUST WMI</strong><br>
<time datetime="2024-2025">2024 → 2025</time> •
<address>
<a href="https://www.univ-littoral.fr/" target="_blank">FCU ULCO</a>
</address>
</li>
</ul>
</section>
<!-- Formations -->
<section id="formations" role="region" aria-labelledby="titre-formations">
<h2 class="icon-formations" id="titre-formations">Formations</h2>
<ul>
<li>
<strong>Doctorat productique, automatique et informatique industrielle</strong><br>
<time datetime="2000">2000</time> •
<address>
<a href="https://www.univ-lille.fr/" target="_blank">Université de Lille</a>
</address>
</li>
<li>
<strong>CAPET Technologie</strong><br>
<time datetime="1998">1998</time> •
<address>
<a href="https://www.iufm-douai.fr/" target="_blank">IUFM Douais</a>
</address>
</li>
</ul>
</section>
</main>
<footer role="contentinfo" aria-label="Pied de page">
<p>© 2025 <strong>Vincent Vanneste</strong>. Tous droits réservés.</p>
</footer>
</body>
</html>
Méthode : projets.html
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Portfolio - Projets</title>
<link rel="stylesheet" href="css/style.css">
<link rel="stylesheet" href="css/projets.css">
</head>
<body>
<header id="haut" role="banner" aria-label="En-tête du site">
<figure role="img" aria-labelledby="figcaption-vv">
<img src="images/photo.jpg" alt="Photo de Vincent Vanneste">
<figcaption id="figcaption-vv">Vincent Vanneste</figcaption>
</figure>
<h1>Portfolio de Vincent Vanneste</h1>
<nav role="navigation" aria-label="Navigation principale">
<ul>
<li><a href="index.html">Accueil</a></li>
<li><a href="projets.html">Projets</a></li>
<li><a href="https://www.univ-littoral.fr/" target="_blank">ULCO</a></li>
</ul>
</nav>
</header>
<main role="main">
<h1>Mes projets</h1>
<section role="region" aria-labelledby="liste-projets">
<h2 id="liste-projets">Liste des projets</h2>
<div class="projets">
<article role="article" aria-labelledby="titre-projet1">
<h3 id="titre-projet1"><a href="projet1.html">Projet 1</a></h3>
<figure role="img" aria-labelledby="fig-projet1">
<img src="images/vignettes/projet1.jpg" alt="Aperçu du Projet 1">
<figcaption id="fig-projet1">Aperçu du Projet 1</figcaption>
</figure>
<p>Un projet qui présente les bases du HTML et de la mise en page.</p>
</article>
<article role="article" aria-labelledby="titre-projet2">
<h3 id="titre-projet2"><a href="projet2.html">Projet 2</a></h3>
<figure role="img" aria-labelledby="fig-projet2">
<img src="images/vignettes/projet2.jpg" alt="Aperçu du Projet 2">
<figcaption id="fig-projet2">Aperçu du Projet 2</figcaption>
</figure>
<p>Un site en CSS avec une mise en forme responsive adaptée aux mobiles.</p>
</article>
<article role="article" aria-labelledby="titre-projet3">
<h3 id="titre-projet3"><a href="projet3.html">Projet 3</a></h3>
<figure role="img" aria-labelledby="fig-projet3">
<img src="images/vignettes/projet3.jpg" alt="Aperçu du Projet 3">
<figcaption id="fig-projet3">Aperçu du Projet 3</figcaption>
</figure>
<p>Un mini-site en JavaScript avec des interactions simples.</p>
</article>
<article role="article" aria-labelledby="titre-projet4">
<h3 id="titre-projet4"><a href="projet4.html">Projet 4</a></h3>
<figure role="img" aria-labelledby="fig-projet4">
<img src="images/vignettes/projet4.jpg" alt="Aperçu du Projet 4">
<figcaption id="fig-projet4">Aperçu du Projet 4</figcaption>
</figure>
<p>Une application web utilisant PHP et MySQL pour gérer des données.</p>
</article>
<article role="article" aria-labelledby="titre-projet5">
<h3 id="titre-projet5"><a href="projet5.html">Projet 5</a></h3>
<figure role="img" aria-labelledby="fig-projet5">
<img src="images/vignettes/projet5.jpg" alt="Aperçu du Projet 5">
<figcaption id="fig-projet5">Aperçu du Projet 5</figcaption>
</figure>
<p>Un projet complet combinant HTML, CSS, JS et base de données.</p>
</article>
</div>
</section>
</main>
<footer role="contentinfo" aria-label="Pied de page">
<p>© 2025 <strong>Vincent Vanneste</strong>. Tous droits réservés.</p>
</footer>
</body>
</html>
Méthode : css/style.css
/* --- Corps de la page --- */
body {
font-family: Arial, sans-serif;
/* Police principale du texte : Arial ou une police sans-serif */
color: #333;
/* Couleur du texte : gris foncé */
background: #fff;
/* Fond de la page : blanc */
margin: 0;
/* Supprime la marge par défaut autour de la page */
line-height: 1.5;
/* Hauteur de ligne pour améliorer la lisibilité */
}
/* --- Header --- */
header {
text-align: center;
/* Centre le contenu horizontalement */
padding: 20px;
/* Espace intérieur autour du contenu du header */
background: #f0f0f0;
/* Fond gris clair */
border-bottom: 2px solid #ddd;
/* Bordure en bas du header pour le séparer du contenu */
}
header h1 {
margin: 10px 0;
/* Espace vertical autour du titre */
font-size: 2rem;
/* Taille du texte plus grande pour le titre principal */
}
/* --- Figure dans le header --- */
header figure {
margin: 0 auto 10px;
/* Centre la figure horizontalement + marge basse de 10px */
}
header img {
width: 150px;
/* Largeur fixe de l'image */
border-radius: 50%;
/* Rend l'image ronde */
border: 3px solid #0066cc;
/* Bordure bleue autour de l'image */
}
header figcaption {
margin-top: 8px;
/* Espace entre l'image et la légende */
font-size: 1rem;
/* Taille normale du texte */
}
/* --- Navigation principale (header) --- */
header nav ul {
display: flex;
/* Utilise Flexbox pour aligner les liens horizontalement */
justify-content: center;
/* Centre les éléments horizontalement */
gap: 15px;
/* Espace entre chaque élément de navigation */
list-style: none;
/* Supprime les puces de la liste */
padding: 0;
/* Supprime le padding par défaut */
margin: 10px 0 0;
/* Marge en haut de la liste, pas en bas */
}
header nav a {
text-decoration: none;
/* Supprime le soulignement des liens */
color: #0066cc;
/* Couleur bleue des liens */
font-weight: bold;
/* Texte en gras */
padding: 6px 10px;
/* Espace autour du texte pour créer un bouton */
border-radius: 4px;
/* Coins arrondis pour les liens */
}
header nav a:hover {
background-color: #ddd;
/* Fond gris clair au survol pour indiquer l’interaction */
}
/* --- Main --- */
main>h1 {
text-align: center;
/* Centre le titre principal du main */
color: #1e3a5f;
/* Couleur bleu foncé */
font-size: 2rem;
/* Taille du texte plus grande */
margin: 20px 0;
/* Espace vertical autour du titre */
}
main>section {
max-width: 900px;
/* Largeur maximale du contenu */
margin: 0 auto 40px;
/* Centre horizontalement + marge en bas de 40px */
padding: 0 15px;
/* Espace intérieur gauche/droite de 15px */
}
main>section h2 {
color: #1e3a5f;
/* Couleur du titre (bleu foncé) */
font-size: 1.5em;
/* Taille du texte 1,5 fois la taille normale */
}
/* --- Footer --- */
footer {
background: #1e3a5f;
/* Fond bleu foncé */
color: #fff;
/* Texte en blanc */
padding: 20px;
/* Espace intérieur autour du contenu */
text-align: center;
/* Centre le texte horizontalement */
}
footer p {
margin: 0;
/* Supprime la marge par défaut autour du paragraphe */
}
1. display: flex;
Transforme la liste
<ul>
en conteneur flex.Ses enfants directs
<li>
deviennent des éléments flex.Par défaut, Flexbox aligne les éléments horizontalement (
flex-direction: row
), donc les liens de navigation sont placés côte à côte au lieu de verticalement.
2. justify-content: center;
Centre les éléments flex horizontalement dans le conteneur.
Sans cela, les éléments se seraient alignés à gauche par défaut.
Dans ce cas, tous les liens de navigation sont centrés dans le header.
3. gap: 15px;
Crée un espace uniforme de 15px entre chaque élément flex (chaque
<li>
).Plus pratique que de mettre des
margin-right
sur chaque<li>
car Flex gère automatiquement l’espacement.
4. Compléments liés à Flex
Les autres propriétés (
list-style: none; padding: 0; margin: 10px 0 0;
) ne font pas partie de Flexbox, mais elles permettent de nettoyer le style par défaut de la liste pour que la mise en page soit propre.
Méthode : css/accueil.css
/* --- Navigation interne du main --- */
main nav ul {
display: flex;
/* Utilise Flexbox pour aligner les éléments horizontalement */
justify-content: center;
/* Centre les éléments dans la ligne */
flex-wrap: wrap;
/* Permet aux éléments de passer à la ligne si l'espace est insuffisant */
gap: 12px;
/* Espace de 12px entre les éléments */
padding: 0;
/* Supprime le padding par défaut de la liste */
margin: 20px 0;
/* Marge verticale de 20px au-dessus et en dessous */
list-style: none;
/* Supprime les puces de la liste */
}
main nav a {
text-decoration: none;
/* Supprime le soulignement par défaut */
color: #fff;
/* Couleur du texte : blanc */
background-color: #0073e6;
/* Couleur de fond bleu vif */
padding: 6px 12px;
/* Espace intérieur autour du texte */
border-radius: 6px;
/* Coins arrondis pour un effet "bouton" */
font-weight: bold;
/* Texte en gras */
}
main nav a:hover {
background-color: #005bb5;
/* Fond bleu plus foncé au survol pour indiquer l’interaction */
}
/* --- Sections principales --- */
section {
margin: 20px auto;
/* Marge verticale de 20px et centre horizontalement */
padding: 0 15px;
/* Espace intérieur gauche/droite de 15px */
}
section h2 {
font-size: 1.5rem;
/* Taille du titre légèrement plus grande */
margin-top: 30px;
/* Espace au-dessus du titre */
margin-bottom: 10px;
/* Espace en dessous du titre */
border-bottom: 2px solid #ddd;
/* Ligne sous le titre pour le séparer visuellement */
padding-bottom: 5px;
/* Espace entre le texte et la ligne */
color: #1e3a5f;
/* Couleur bleu foncé */
}
section p {
margin-bottom: 15px;
/* Espace sous les paragraphes */
}
/* --- Listes et adresses --- */
section ul {
padding-left: 20px;
/* Décalage de la liste vers la droite */
margin-bottom: 20px;
/* Espace sous la liste */
}
section li {
margin-bottom: 8px;
/* Espace entre les éléments de la liste */
}
address {
font-style: normal;
/* Texte non italique, contrairement au style par défaut */
display: inline;
/* L'adresse s'affiche sur la même ligne si possible */
}
/* --- Liens dans le contenu --- */
section a {
color: #0066cc;
/* Couleur bleue pour les liens */
text-decoration: none;
/* Supprime le soulignement par défaut */
}
section a:hover {
text-decoration: underline;
/* Remet le soulignement au survol */
}
/* --- Icônes devant les titres --- */
.icon-about::before {
content: "👤";
/* Emoji représentant "À propos" */
margin-right: 8px;
/* Espace entre l'icône et le texte du titre */
}
.icon-competences::before {
content: "💻";
/* Emoji représentant les compétences informatiques */
margin-right: 8px;
}
.icon-experiences::before {
content: "📅";
/* Emoji représentant les expériences/agenda */
margin-right: 8px;
}
.icon-formations::before {
content: "🎓";
/* Emoji représentant les formations/diplômes */
margin-right: 8px;
}
1. display: flex;
Transforme la liste
<ul>
en conteneur flex.Tous les enfants directs
<li>
deviennent des éléments flex.Par défaut, Flex aligne les éléments horizontalement (
flex-direction: row
), donc les liens apparaissent sur la même ligne.
2. justify-content: center;
Centre tous les éléments flex horizontalement dans le conteneur.
Sans cette propriété, les éléments resteraient alignés à gauche.
3. flex-wrap: wrap;
Permet aux éléments flex de passer à la ligne suivante si la largeur du conteneur est insuffisante.
Pratique pour les écrans plus petits ou si la liste est longue, afin que les boutons ne débordent pas.
4. gap: 12px;
Définit un espace de 12px entre chaque élément flex.
Plus simple et plus précis que d’ajouter des
margin
manuellement sur chaque<li>
.
5. Autres propriétés
padding: 0;
→ supprime le padding par défaut de la liste.margin: 20px 0;
→ ajoute une marge verticale autour de la navigation.list-style: none;
→ supprime les puces par défaut de la liste.
Méthode : css/projets.css
/* --- Projets --- */
.projets {
text-align: center;
/* centre les articles à l'intérieur du conteneur */
}
.proj/* --- Conteneur principal des projets --- */
.projets {
display: flex;
/* Utilise Flexbox pour disposer les articles en ligne */
flex-wrap: wrap;
/* Permet aux articles de passer à la ligne si l'espace est insuffisant */
justify-content: center;
/* Centre les articles horizontalement dans le conteneur */
gap: 20px;
/* Espace de 20px entre chaque article */
padding: 10px 0;
/* Espace vertical en haut et en bas du conteneur */
}
/* --- Articles individuels --- */
.projets article {
flex: 0 1 220px;
/* Largeur de base 220px, mais flexible si l’espace est limité */
padding: 10px;
/* Espace intérieur autour du contenu de l'article */
background: #f9f9f9;
/* Couleur de fond gris très clair */
border: 1px solid #ddd;
/* Bordure fine grise autour de l'article */
border-radius: 8px;
/* Coins arrondis pour adoucir l'apparence */
text-align: left;
/* Texte aligné à gauche dans l'article */
}
/* --- Titres des projets --- */
.projets h3 {
margin-top: 0;
/* Supprime l'espace au-dessus du titre */
font-size: 1.1rem;
/* Taille du texte légèrement plus grande que le texte normal */
}
/* --- Liens --- */
.projets a {
text-decoration: none;
/* Supprime le soulignement par défaut */
color: #0066cc;
/* Couleur bleue pour le lien */
font-weight: bold;
/* Texte en gras pour plus de visibilité */
}
.projets a:hover {
text-decoration: underline;
/* Soulignement au survol pour indiquer l'interaction */
}
/* --- Paragraphes --- */
.projets p {
font-size: 0.9rem;
/* Taille légèrement plus petite que le texte normal */
color: #333;
/* Couleur gris foncé pour le texte */
}
/* --- Figures et images --- */
.projets figure {
margin: 0;
/* Supprime les marges par défaut de la figure */
padding: 0;
/* Supprime le padding par défaut */
}
.projets figure img {
width: 100%;
/* L'image prend toute la largeur de son conteneur */
height: auto;
/* La hauteur s'ajuste automatiquement pour conserver les proportions */
border-radius: 4px;
/* Coins légèrement arrondis pour l'image */
border: 1px solid #ccc;
/* Bordure grise claire autour de l'image */
margin-bottom: 8px;
/* Espace entre l'image et la légende */
}
.projets figure figcaption {
font-size: 0.85rem;
/* Taille du texte de la légende plus petite */
color: #666;
/* Couleur gris moyen pour distinguer du texte principal */
text-align: center;
/* Centre le texte de la légende sous l'image */
}ets article {
display: inline-block;
/* affiche les articles les uns à côté des autres (comme du texte) */
vertical-align: top;
/* aligne le haut des articles entre eux */
width: 220px;
/* largeur fixe pour chaque carte */
margin: 10px;
/* espace extérieur autour de chaque carte */
padding: 10px;
/* espace intérieur entre le bord et le contenu */
background: #f9f9f9;
/* couleur de fond gris très clair */
border: 1px solid #ddd;
/* bordure fine et grise autour des cartes */
border-radius: 8px;
/* arrondit légèrement les coins de la carte */
text-align: left;
/* le texte à l’intérieur est aligné à gauche */
}
.projets h3 {
margin-top: 0;
/* supprime l’espace au-dessus du titre */
font-size: 1.1rem;
/* définit la taille du titre en unités relatives */
}
.projets a {
text-decoration: none;
/* enlève le soulignement par défaut des liens */
color: #0066cc;
/* applique une couleur bleue au lien */
font-weight: bold;
/* met le lien en gras */
}
.projets a:hover {
text-decoration: underline;
/* remet le soulignement quand on survole le lien */
}
.projets p {
font-size: 0.9rem;
/* définit une taille de texte légèrement plus petite */
color: #333;
/* applique une couleur gris foncé au texte */
}
.projets figure {
margin: 0;
/* supprime les marges par défaut autour de la figure */
padding: 0;
/* supprime le padding par défaut */
}
.projets figure img {
width: 100%;
/* l'image prend toute la largeur de la carte */
height: auto;
/* la hauteur s'ajuste automatiquement pour garder les proportions */
border-radius: 4px;
/* arrondit légèrement les coins de l'image */
border: 1px solid #ccc;
/* ajoute une bordure grise claire autour de l'image */
margin-bottom: 8px;
/* espace entre l'image et la légende */
}
.projets figure figcaption {
font-size: 0.85rem;
/* taille de la police de la légende */
color: #666;
/* couleur gris moyen pour la légende */
text-align: center;
/* centre le texte de la légende */
}
1. flex: 0 1 220px;
0 → L’article ne grandira pas au-delà de sa taille de base pour remplir l’espace disponible.
1 → L’article peut rétrécir si l’espace horizontal manque.
220px → largeur de base de l’article.
Effet : chaque article fait 220px de large, mais si l’écran est plus petit, il peut se réduire pour s’adapter à l’espace disponible.
2. Autres propriétés
padding: 10px;
Ajoute un espace intérieur autour du contenu pour ne pas toucher les bords de l’article.
background: #f9f9f9;
Fond gris clair pour distinguer visuellement chaque article.
border: 1px solid #ddd;
Bordure fine autour de chaque article pour mieux les délimiter.
border-radius: 8px;
Coins arrondis pour un rendu plus doux et esthétique.
text-align: left;
Texte du contenu aligné à gauche, comme pour la plupart des paragraphes.
Exemple :
See the Pen Séance 6-index by Vincent-Vanneste (@vincent-vanneste) on CodePen.
Exemple :
See the Pen Séance 6-projets by Vincent-Vanneste (@vincent-vanneste) on CodePen.