Séance 5
Objectifs
Être capable d’intégrer et de décrire des images correctement.
Être capable d’intégrer l’accessibilité dans le code.
Savoir insérer des icônes pour enrichir une interface.
Méthode : Arborescence

Des images ainsi que leurs versions miniatures ont été ajoutées.
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" aria-label="En-tête du site">
<figure 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 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>
<nav 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" 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" 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" 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</time> •
<address>
<a href="https://www.univ-littoral.fr/" target="_blank">FCU ULCO</a>
</address>
</li>
</ul>
</section>
<!-- Formations --><section id="formations" 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 aria-label="Pied de page">
<p>© 2025 <strong>Vincent Vanneste</strong>. Tous droits réservés. | <a href="#haut">Haut de page</a></p>
</footer>
</body>
</html>
Rôle des attributs role
L’attribut role indique la fonction ou le rôle sémantique d’un élément pour les technologies d’assistance (lecteurs d’écran, etc.). Il permet à l’utilisateur d’identifier rapidement la structure et la fonction de chaque section du site, même si la balise HTML ne donne pas cette information.
Dans le document :
role="contentinfo"sur<address>:Indique que cet élément contient des informations sur le site ou le contact.
Rôle des attributs ARIA (aria-*)
Les attributs ARIA (Accessible Rich Internet Applications) fournissent des informations supplémentaires aux technologies d’assistance sur la structure ou le contenu d’un élément.
Dans ton document :
aria-label:Sert à donner un nom ou une description explicite à un élément lorsque son rôle ou son contenu n’est pas suffisamment clair.
Exemples :
<header aria-label="En-tête du site">→ décrit le contenu de l’en-tête.<nav aria-label="Navigation principale">→ précise que ce menu est le menu principal du site.<footer aria-label="Pied de page">→ décrit la fonction du pied de page.
aria-labelledby:Permet de lier un élément à un autre élément qui le décrit. L’élément lié fournit la description ou le titre qui sera lu par les lecteurs d’écran.
Exemple :
<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>Ici, l’image a pour description le contenu du
<figcaption>identifié parfigcaption-vv.
Résumé pratique
role→ dit quoi est l’élément (en-tête, navigation, image, section, etc.).aria-*→ fournit des détails supplémentaires pour les lecteurs d’écran (nom, description, lien avec un autre élément).
En combinant ces deux attributs, ton site devient beaucoup plus accessible, surtout pour les personnes utilisant des technologies d’assistance.
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" aria-label="En-tête du site">
<figure 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 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>
<h1>Mes projets</h1>
<section aria-labelledby="liste-projets">
<h2 id="liste-projets">Liste des projets</h2>
<div class="projets">
<article aria-labelledby="titre-projet1">
<h3 id="titre-projet1"><a href="projet1.html">Projet 1</a></h3>
<figure class='premiere' 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 aria-labelledby="titre-projet2">
<h3 id="titre-projet2"><a href="projet2.html">Projet 2</a></h3>
<figure 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 aria-labelledby="titre-projet3">
<h3 id="titre-projet3"><a href="projet3.html">Projet 3</a></h3>
<figure 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 aria-labelledby="titre-projet4">
<h3 id="titre-projet4"><a href="projet4.html">Projet 4</a></h3>
<figure 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 aria-labelledby="titre-projet5">
<h3 id="titre-projet5"><a href="projet5.html">Projet 5</a></h3>
<figure 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 aria-label="Pied de page">
<p>© 2025 <strong>Vincent Vanneste</strong>. Tous droits réservés. | <a href="#haut">Haut de page</a></p>
</footer>
</body>
</html>
Intérêt principal de <figure>
Sémantique claire :
<figure>signale que l’image a une valeur informative ou illustrative, et que son contenu est autonome par rapport au reste du texte.Les moteurs de recherche et les technologies d’assistance comprennent mieux le rôle de l’image.
Accessibilité améliorée :
Associé à
<figcaption>ouaria-labelledby, un lecteur d’écran peut annoncer la légende de l’image, ce qui aide les utilisateurs malvoyants à comprendre le contenu visuel.
Organisation du contenu :
<figure>permet de regrouper l’image et sa légende dans un seul bloc, pratique pour le style et la mise en page.Le navigateur sait que l’image et sa légende sont liées et peuvent être déplacées ensemble avec CSS si nécessaire.
Indépendance du contenu :
Le contenu d’un
<figure>peut être référencé indépendamment dans le texte, par exemple avec<a href="#id-figure">…</a>.Cela montre que l’image et sa légende ont un sens complet même hors du contexte immédiat.
3. Bonnes pratiques
Toujours fournir un
altdescriptif sur l’image pour l’accessibilité.Utiliser
<figcaption>pour décrire l’image ou donner un titre explicatif.Éviter
<figure>pour des images purement décoratives (dans ce cas,<img>avecalt=""suffit).
Résumé :
Utiliser <figure> avec <figcaption> rend ton contenu plus structuré, sémantique et accessible, et permet aux utilisateurs et moteurs de recherche de comprendre le rôle et le sens de l’image.
Méthode : css/style.css
/* ========================================================================== CSS Général ========================================================================== *//* --- Corps de la page --- */body { /***************/ /* Typographie */ /***************/font-family: Arial, sans-serif;
/* Définit la police principale du texte */color: #333;
/* Couleur du texte (gris foncé) */ /****************************/ /* Couleurs & Arrière-plans */ /****************************/background: #fff;
/* Couleur d’arrière-plan blanche */ /**********************/ /* Boîte & Espacement */ /**********************/margin: 0;
/* Supprime la marge par défaut du navigateur */}
/* ========================================================================== En-tête (Header) ========================================================================== *//* --- Conteneur principal du header --- */header { /***************/ /* Typographie */ /***************/text-align: center;
/* Centre le contenu du header horizontalement */ /**********************/ /* Boîte & Espacement */ /**********************/padding: 20px;
/* Ajoute de l’espace intérieur (haut/bas/gauche/droite) */ /****************************/ /* Couleurs & Arrière-plans */ /****************************/background: #f0f0f0;
/* Couleur de fond gris clair */ /************/ /* Bordures */ /************/border-bottom: 2px solid #ddd;
/* Ligne grise en bas du header */}
/* --- Figure (photo & nom) --- */header figure {
/**********************/ /* Boîte & Espacement */ /**********************/margin: 0;
/* Supprime la marge par défaut de la balise figure */display: inline-block;
/* Permet de garder la figure à côté d’autres éléments */ /***************/ /* Typographie */ /***************/text-align: center;
/* Centre le contenu de la figure (image + légende) */}
/* --- Image de la figure --- */header figure img {
/**************/ /* Dimensions */ /**************/width: 150px;
/* Largeur fixe de l’image */height: auto;
/* Hauteur automatique (conserve les proportions) */ /************/ /* Bordures */ /************/border-radius: 50%;
/* Rend l’image parfaitement ronde */border: 3px solid #0066cc;
/* Bordure bleue autour de la photo */}
/* --- Légende de la figure --- */header figure figcaption {
/**********************/ /* Boîte & Espacement */ /**********************/margin-top: 8px;
/* Espace au-dessus de la légende */ /***************/ /* Typographie */ /***************/font-size: 1rem;
/* Taille du texte normale */color: #333;
/* Couleur du texte */}
/* --- Titre principal du site (h1) --- */header h1 {
/**********************/ /* Boîte & Espacement */ /**********************/margin: 10px 0;
/* Espace vertical autour du titre */ /***************/ /* Typographie */ /***************/font-size: 2rem;
/* Taille du texte plus grande */color: #333;
/* Couleur du texte */}
/* --- Liste de navigation principale (ul) --- */header nav ul {
/******************/ /* Style de liste */ /******************/list-style: none;
/* Supprime les puces de la liste */ /**********************/ /* Boîte & Espacement */ /**********************/padding: 0;
/* Supprime le retrait interne */margin: 10px 0 0;
/* Marge au-dessus de la navigation */}
/* --- Éléments de navigation (li) --- */header nav li {
/**********************/ /* Boîte & Espacement */ /**********************/display: inline-block;
/* Affiche les éléments de la liste sur une même ligne */margin: 0 15px;
/* Espace horizontal entre les liens */}
/* --- Liens de navigation (a) --- */header nav a {
/***************/ /* Typographie */ /***************/text-decoration: none;
/* Supprime le soulignement des liens */color: #0066cc;
/* Couleur bleue pour les liens */font-weight: bold;
/* Met le texte en gras */}
/* --- Survol des liens de navigation --- */header nav a:hover {
/***************/ /* Typographie */ /***************/text-decoration: underline;
/* Soulignement au survol */}
/* ========================================================================== Contenu principal (Main) ========================================================================== *//* --- Titre principal (h1) du main --- */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 du main --- */main>section {
/**********************/ /* Boîte & Espacement */ /**********************/max-width: 900px;
/* Largeur maximale du contenu */margin: 0 auto 40px;
/* Centre horizontalement + marge basse */padding: 0 15px;
/* Espace intérieur à gauche et à droite */}
/* --- Titres (h2) de section --- */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 { /****************************/ /* Couleurs & Arrière-plans */ /****************************/background: #1e3a5f;
/* Fond bleu foncé */ /***************/ /* Typographie */ /***************/color: #fff;
/* Texte blanc */text-align: center;
/* Centre le texte horizontalement */ /**********************/ /* Boîte & Espacement */ /**********************/padding: 20px;
/* Espace intérieur autour du contenu */}
/* --- Liens du footer --- */footer a {
/***************/ /* Typographie */ /***************/color: #ff8c42;
/* Liens orange */text-decoration: none;
/* Pas de soulignement */}
/* --- Survol des liens du footer --- */footer a:hover {
/***************/ /* Typographie */ /***************/color: #ffcc00;
/* Jaune vif au survol */}
Méthode : css/accueil.css
/* ========================================================================== Navigation Interne (dans Main) ========================================================================== *//* --- Liste de la navigation (ul) --- */main nav ul {
/******************/ /* Style de liste */ /******************/list-style: none;
/* Supprime les puces */ /**********************/ /* Boîte & Espacement */ /**********************/padding: 0;
/* Supprime le retrait interne */margin: 0 0 20px;
/* Espace en dessous de la liste */ /***************/ /* Typographie */ /***************/text-align: center;
/* Centre les éléments horizontalement */}
/* --- Éléments de la navigation (li) --- */main nav li {
/**********************/ /* Boîte & Espacement */ /**********************/display: inline-block;
/* Place les éléments sur une seule ligne */margin: 0 10px;
/* Espace horizontal entre les liens */}
/* --- Liens de la navigation (a) --- */main nav a {
/***************/ /* Typographie */ /***************/text-decoration: none;
/* Supprime le soulignement */color: #1e90ff;
/* Couleur bleue claire */font-weight: bold;
/* Met le texte en gras */}
/* --- Survol des liens de navigation --- */main nav a:hover {
/***************/ /* Typographie */ /***************/color: #0056b3;
/* Change la couleur au survol (bleu plus foncé) */}
/* ========================================================================== Contenu des Sections (dans Main) ========================================================================== *//* --- Paragraphes de section --- */main>section p {
/***************/ /* Typographie */ /***************/color: #333;
/* Couleur du texte */font-family: Georgia, serif;
/* Police à empattements (meilleure lisibilité) */}
/* --- Liens de section --- */main>section a {
/***************/ /* Typographie */ /***************/color: #1e90ff;
/* Couleur des liens */text-decoration: underline;
/* Soulignement visible par défaut */}
/* --- Survol des liens de section --- */main>section a:hover {
/***************/ /* Typographie */ /***************/color: #0056b3;
/* Change la couleur au survol */}
Méthode : css/projets.css
/* ========================================================================== Section des Projets (Conteneur) ========================================================================== */.projets { /***************/ /* Typographie */ /***************/text-align: center;
/* centre les articles (inline-block) à l'intérieur du conteneur */}
/* ========================================================================== Cartes de Projet (Article) ========================================================================== */.projets article {
/**********************/ /* Boîte & Espacement */ /**********************/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 */margin: 10px;
/* espace extérieur autour de chaque carte */padding: 10px;
/* espace intérieur entre le bord et le contenu */ /**************/ /* Dimensions */ /**************/width: 220px;
/* largeur fixe pour chaque carte */ /****************************/ /* Couleurs & Arrière-plans */ /****************************/background: #f9f9f9;
/* couleur de fond gris très clair */ /************/ /* Bordures */ /************/border: 1px solid #ddd;
/* bordure fine et grise autour des cartes */border-radius: 8px;
/* arrondit légèrement les coins de la carte */ /***************/ /* Typographie */ /***************/text-align: left;
/* le texte à l’intérieur est aligné à gauche */}
/* ========================================================================== 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;
/* définit la taille du titre en unités relatives */}
/* --- Paragraphes des projets --- */.projets p {
/***************/ /* Typographie */ /***************/font-size: 0.9rem;
/* définit une taille de texte légèrement plus petite */color: #333;
/* applique une couleur gris foncé au texte */}
/* --- Liens des projets --- */.projets a {
/***************/ /* Typographie */ /***************/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 */}
/* --- Survol des liens --- */.projets a:hover {
/***************/ /* Typographie */ /***************/text-decoration: underline;
/* remet le soulignement quand on survole le lien */}
/* --- Conteneur Figure (pour image) --- */.projets figure {
/**********************/ /* Boîte & Espacement */ /**********************/margin: 0;
/* supprime les marges par défaut autour 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 la carte (fusionné) */height: auto;
/* la hauteur s'ajuste automatiquement pour garder les proportions */ /**********************/ /* Boîte & Espacement */ /**********************/margin-bottom: 8px;
/* espace entre l'image et la légende */ /************/ /* Bordures */ /************/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 */}
/* --- Légendes des images --- */.projets figure figcaption {
/***************/ /* Typographie */ /***************/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 */}
Exemple :
See the Pen Séance 5-index by Vincent-Vanneste (@vincent-vanneste) on CodePen.
Exemple :
See the Pen Séance 5-projets by Vincent-Vanneste (@vincent-vanneste) on CodePen.