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>
Depuis <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>
Depuis <time datetime="2024">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
/* ========================================================================== CSS Général ========================================================================== *//* --- Corps de la page --- */body { /***************/ /* Typographie */ /***************/font-family: Arial, sans-serif;
/* Police principale du texte : Arial ou une police sans-serif */color: #333;
/* Couleur du texte : gris foncé */line-height: 1.5;
/* Hauteur de ligne pour améliorer la lisibilité */ /**********************/ /* Boîte & Espacement */ /**********************/margin: 0;
/* Supprime la marge par défaut autour de la page */ /****************************/ /* Couleurs & Arrière-plans */ /****************************/background: #fff;
/* Fond de la page : blanc */}
/* ========================================================================== En-tête (Header) ========================================================================== */header { /***************/ /* Typographie */ /***************/text-align: center;
/* Centre le contenu horizontalement */ /**********************/ /* Boîte & Espacement */ /**********************/padding: 20px;
/* Espace intérieur autour du contenu du header */ /****************************/ /* Couleurs & Arrière-plans */ /****************************/background: #f0f0f0;
/* Fond gris clair */ /************/ /* Bordures */ /************/border-bottom: 2px solid #ddd;
/* Bordure en bas du header pour le séparer du contenu */}
/* --- Titre principal du Header (h1) --- */header h1 {
/***************/ /* Typographie */ /***************/font-size: 2rem;
/* Taille du texte plus grande pour le titre principal */ /**********************/ /* Boîte & Espacement */ /**********************/margin: 10px 0;
/* Espace vertical autour du titre */}
/* --- Figure dans le header --- */header figure {
/**********************/ /* Boîte & Espacement */ /**********************/margin: 0 auto 10px;
/* Centre la figure horizontalement + marge basse de 10px */}
/* --- Image de profil --- */header img {
/**************/ /* Dimensions */ /**************/width: 150px;
/* Largeur fixe de l'image */ /************/ /* Bordures */ /************/border-radius: 50%;
/* Rend l'image ronde */border: 3px solid #0066cc;
/* Bordure bleue autour de l'image */}
/* --- Légende de l'image de profil --- */header figcaption {
/***************/ /* Typographie */ /***************/font-size: 1rem;
/* Taille normale du texte */ /**********************/ /* Boîte & Espacement */ /**********************/margin-top: 8px;
/* Espace entre l'image et la légende */}
/* --- Navigation principale (dans le header) --- */header nav ul {
/***********/ /* Flexbox */ /***********/display: flex;
/* Utilise Flexbox pour aligner les liens horizontalement */justify-content: center;
/* Centre les éléments horizontalement */ /**********************/ /* Boîte & Espacement */ /**********************/gap: 15px;
/* Espace entre chaque élément de navigation */padding: 0;
/* Supprime le padding par défaut */margin: 10px 0 0;
/* Marge en haut de la liste, pas en bas */ /******************/ /* Style de liste */ /******************/list-style: none;
/* Supprime les puces de la liste */}
/* --- Liens de navigation principale (dans le header) --- */header nav a {
/***************/ /* Typographie */ /***************/text-decoration: none;
/* Supprime le soulignement des liens */color: #0066cc;
/* Couleur bleue des liens */font-weight: bold;
/* Texte en gras */ /**********************/ /* Boîte & Espacement */ /**********************/padding: 6px 10px;
/* Espace autour du texte pour créer un bouton */ /************/ /* Bordures */ /************/border-radius: 4px;
/* Coins arrondis pour les liens */}
header nav a:hover {
/****************************/ /* Couleurs & Arrière-plans */ /****************************/background-color: #ddd;
/* Fond gris clair au survol pour indiquer l’interaction */}
/* ========================================================================== Contenu principal (Main) ========================================================================== *//* --- Titre principal du main (h1) --- */main>h1 {
/***************/ /* Typographie */ /***************/text-align: center;
/* Centre le titre principal du main */color: #1e3a5f;
/* Couleur bleu foncé */font-size: 2rem;
/* Taille du texte plus grande */ /**********************/ /* Boîte & Espacement */ /**********************/margin: 20px 0;
/* Espace vertical autour du titre */}
/* --- Sections principales du main --- */main>section {
/**********************/ /* Boîte & Espacement */ /**********************/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 */}
/* --- Titres de section (h2) --- */main>section h2 {
/***************/ /* Typographie */ /***************/color: #1e3a5f;
/* Couleur du titre (bleu foncé) */font-size: 1.5em;
/* Taille du texte 1,5 fois la taille normale */}
/* ========================================================================== Pied de page (Footer) ========================================================================== */footer { /***************/ /* Typographie */ /***************/color: #fff;
/* Texte en blanc */text-align: center;
/* Centre le texte horizontalement */ /**********************/ /* Boîte & Espacement */ /**********************/padding: 20px;
/* Espace intérieur autour du contenu */ /****************************/ /* Couleurs & Arrière-plans */ /****************************/background: #1e3a5f;
/* Fond bleu foncé */}
footer p {
/**********************/ /* Boîte & Espacement */ /**********************/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-rightsur 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 (dans Main) ========================================================================== *//* --- Liste de la navigation (ul) --- */main nav ul {
/***********/ /* Flexbox */ /***********/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 */ /**********************/ /* Boîte & Espacement */ /**********************/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 */ /******************/ /* Style de liste */ /******************/list-style: none;
/* Supprime les puces de la liste */}
/* --- Liens de la navigation (a) --- */main nav a {
/***************/ /* Typographie */ /***************/text-decoration: none;
/* Supprime le soulignement par défaut */color: #fff;
/* Couleur du texte : blanc */font-weight: bold;
/* Texte en gras */ /**********************/ /* Boîte & Espacement */ /**********************/padding: 6px 12px;
/* Espace intérieur autour du texte */ /****************************/ /* Couleurs & Arrière-plans */ /****************************/background-color: #0073e6;
/* Couleur de fond bleu vif */ /************/ /* Bordures */ /************/border-radius: 6px;
/* Coins arrondis pour un effet "bouton" */}
/* --- Survol des liens de navigation --- */main nav a:hover {
/****************************/ /* Couleurs & Arrière-plans */ /****************************/background-color: #005bb5;
/* Fond bleu plus foncé au survol pour indiquer l’interaction */}
/* ========================================================================== Sections de Contenu ========================================================================== *//* --- Style général des sections --- */section { /**********************/ /* Boîte & Espacement */ /**********************/margin: 20px auto;
/* Marge verticale de 20px et centre horizontalement */padding: 0 15px;
/* Espace intérieur gauche/droite de 15px */}
/* --- Titres de section (h2) --- */section h2 {
/***************/ /* Typographie */ /***************/font-size: 1.5rem;
/* Taille du titre légèrement plus grande */color: #1e3a5f;
/* Couleur bleu foncé */ /**********************/ /* Boîte & Espacement */ /**********************/margin-top: 30px;
/* Espace au-dessus du titre */margin-bottom: 10px;
/* Espace en dessous du titre */padding-bottom: 5px;
/* Espace entre le texte et la ligne */ /************/ /* Bordures */ /************/border-bottom: 2px solid #ddd;
/* Ligne sous le titre pour le séparer visuellement */}
/* --- Paragraphes de section --- */section p {
/**********************/ /* Boîte & Espacement */ /**********************/margin-bottom: 15px;
/* Espace sous les paragraphes */}
/* ========================================================================== Éléments de Contenu (Listes, Liens, Adresse) ========================================================================== *//* --- Listes à puces (dans section) --- */section ul {
/**********************/ /* Boîte & Espacement */ /**********************/padding-left: 20px;
/* Décalage de la liste vers la droite */margin-bottom: 20px;
/* Espace sous la liste */}
/* --- Éléments de liste (dans section) --- */section li {
/**********************/ /* Boîte & Espacement */ /**********************/margin-bottom: 8px;
/* Espace entre les éléments de la liste */}
/* --- Liens (dans section) --- */section a {
/***************/ /* Typographie */ /***************/color: #0066cc;
/* Couleur bleue pour les liens */text-decoration: none;
/* Supprime le soulignement par défaut */}
section a:hover {
/***************/ /* Typographie */ /***************/text-decoration: underline;
/* Remet le soulignement au survol */}
/* --- Balise Adresse --- */address { /***************/ /* Typographie */ /***************/font-style: normal;
/* Texte non italique, contrairement au style par défaut */ /**********************/ /* Boîte & Espacement */ /**********************/display: inline;
/* L'adresse s'affiche sur la même ligne si possible */}
/* ========================================================================== Classes Utilitaires (Icônes) ========================================================================== *//* --- Base des icônes (pseudo-élément) --- */.icon-about::before,
.icon-competences::before,
.icon-experiences::before,
.icon-formations::before {
/**********************/ /* Boîte & Espacement */ /**********************/margin-right: 8px;
/* Espace entre l'icône et le texte du titre */}
/* --- Icônes spécifiques (Emoji) --- */.icon-about::before {
content: "👤";
/* Emoji représentant "À propos" */}
.icon-competences::before {
content: "💻";
/* Emoji représentant les compétences informatiques */}
.icon-experiences::before {
content: "📅";
/* Emoji représentant les expériences/agenda */}
.icon-formations::before {
content: "🎓";
/* Emoji représentant les formations/diplômes */}
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
marginmanuellement 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
/* ========================================================================== Section des Projets (Conteneur) ========================================================================== */.projets { /***********/ /* Flexbox */ /***********/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 */ /**********************/ /* Boîte & Espacement */ /**********************/gap: 20px;
/* Espace de 20px entre chaque article */padding: 10px 0;
/* Espace vertical en haut et en bas du conteneur */}
/* ========================================================================== Cartes de Projet (Article) ========================================================================== */.projets article {
/***********/ /* Flexbox */ /***********/flex: 0 1 220px;
/* Largeur de base 220px, ne grandit pas, peut rétrécir */ /**********************/ /* Boîte & Espacement */ /**********************/padding: 10px;
/* Espace intérieur autour du contenu de l'article */ /****************************/ /* Couleurs & Arrière-plans */ /****************************/background: #f9f9f9;
/* Couleur de fond gris très clair */ /************/ /* Bordures */ /************/border: 1px solid #ddd;
/* Bordure fine grise autour de l'article */border-radius: 8px;
/* Coins arrondis pour adoucir l'apparence */ /***************/ /* Typographie */ /***************/text-align: left;
/* Texte aligné à gauche dans l'article */}
/* ========================================================================== Contenu des Cartes (Typo, Images, Liens) ========================================================================== *//* --- Titres des projets (h3) --- */.projets h3 {
/**********************/ /* Boîte & Espacement */ /**********************/margin-top: 0;
/* Supprime l'espace au-dessus du titre */ /***************/ /* Typographie */ /***************/font-size: 1.1rem;
/* Taille du texte légèrement plus grande */}
/* --- Paragraphes des projets --- */.projets p {
/***************/ /* Typographie */ /***************/font-size: 0.9rem;
/* Taille légèrement plus petite */color: #333;
/* Couleur gris foncé pour le texte */}
/* --- Liens des projets --- */.projets a {
/***************/ /* Typographie */ /***************/text-decoration: none;
/* Supprime le soulignement par défaut */color: #0066cc;
/* Couleur bleue pour le lien */font-weight: bold;
/* Texte en gras */}
/* --- Survol des liens --- */.projets a:hover {
/***************/ /* Typographie */ /***************/text-decoration: underline;
/* Soulignement au survol */}
/* --- Conteneur Figure (pour image) --- */.projets figure {
/**********************/ /* Boîte & Espacement */ /**********************/margin: 0;
/* Supprime les marges par défaut de la figure */padding: 0;
/* Supprime le padding par défaut */}
/* --- Images des projets --- */.projets figure img {
/**************/ /* Dimensions */ /**************/width: 100%;
/* L'image prend toute la largeur de son conteneur */height: auto;
/* La hauteur s'ajuste automatiquement */ /**********************/ /* Boîte & Espacement */ /**********************/margin-bottom: 8px;
/* Espace entre l'image et la légende */ /************/ /* Bordures */ /************/border-radius: 4px;
/* Coins légèrement arrondis pour l'image */border: 1px solid #ccc;
/* Bordure grise claire autour de l'image */}
/* --- Légendes des images --- */.projets figure figcaption {
/***************/ /* Typographie */ /***************/font-size: 0.85rem;
/* Taille du texte de la légende plus petite */color: #666;
/* Couleur gris moyen */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.