1.a
Enfants directs du body
Le body doit comporter au minimum 30 éléments enfants. Le but est de vérifier que le projet contient une véritable structure HTML.
PROJET WEB · GUIDE TECHNIQUE
Les critères techniques expliqués avec des exemples concrets, des erreurs fréquentes et des solutions à réutiliser dans tes projets.
<main>
<section class="actualites">
<h2>Nos actualités</h2>
<article>
<h3>Nouvelle activité</h3>
<p>Découvrez notre projet.</p>
</article>
</section>
</main>
01
QUANTITÉ DE CODE
1.a
bodyLe body doit comporter au minimum 30 éléments enfants. Le but est de vérifier que le projet contient une véritable structure HTML.
1.b
Le CSS doit comporter au minimum 60 lignes, sans compter les lignes vides et sans compter les doublons.
02
STRUCTURE & RENDU
Règle : minuscules, pas d’espace, pas de caractères spéciaux. Utilise - pour séparer les mots.
Pourquoi ? Les espaces, majuscules et caractères spéciaux peuvent créer des problèmes avec les URL et certains serveurs.
Règle : toutes les images sont dans img/. Une image plein écran peut facilement faire 200 à 900 Ko selon son contenu et son niveau de compression. Pour ce projet, 499 Ko maximum est la limite demandée : au-delà, c’est rarement nécessaire.
Le but n’est pas de rendre chaque image minuscule à tout prix : il faut trouver le meilleur compromis entre qualité visuelle et temps de chargement.
Lorsque le visiteur arrive à la racine du site, le serveur cherche généralement un fichier d’index, typiquement index.html.
Le dossier du projet doit être placé directement à la racine de votre dossier www de votre espace eleves.mediamatique.ch.
Règle : charge au minimum deux polices, puis utilise-les réellement : une pour les titres, une autre pour les textes.
Les titres attirent l’œil. Le texte reste confortable à lire.
@import url('https://fonts.googleapis.com/css2?family=Barlow:wght@500;700&display=swap');
h1, h2, h3 {
font-family: 'Barlow', sans-serif;
font-weight: 700;
}
Le @import doit être placé au début du fichier CSS. Charger une police sans l’utiliser n’a pas d’intérêt.
03
HTML
Règle : laisse des lignes vides entre les grands blocs logiques.
<header><nav>...</nav></header><main>...</main><header>...</header>
<main>...</main>Règle : chaque enfant est décalé d’un niveau par rapport à son parent.
<header>
<nav>
<a>Accueil</a>
</nav>
</header><header>
<nav>
<a>Accueil</a>
</nav>
</header>Règle : si tu reprends du CSS depuis Internet, indique son URL en commentaire.
.mon-element { ... }/* Source :
https://example.com/tutorial
*/
.mon-element { ... }<img src="img/skatepark.webp">
<img
src="img/skatepark.webp"
alt="Skatepark de Suchy">
Le texte alternatif aide notamment les utilisateurs de lecteurs d’écran à comprendre les images. Une image purement décorative peut avoir alt="".
<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8">
<meta name="viewport"
content="width=device-width, initial-scale=1.0">
<title>Accueil – Suchy-Skate</title>
<link rel="icon" href="img/favicon.svg">
</head>Accueil – Suchy-Skate✓ page + siteTarifs – Suchy-Skate✓ titre propre à la pageDocument sans titre✕ trop générique<div class="rouge gros txt">
<div id="ct">
<div class="bx1">
<div id="img2"><section class="presentation">
<div id="contact">
<article class="actualites">
<img id="logo-principal">Cette règle vaut pour les classes et les IDs. Évite les abréviations comme ct, txt, bx, sec ou img1. Décris le contenu, pas l’apparence.
<nav class="menu">
<a class="menu-lien">Accueil</a>
<a class="menu-lien">Tarifs</a>
<a class="menu-lien">Contact</a>
</nav><nav>
<a>Accueil</a>
<a>Tarifs</a>
<a>Contact</a>
</nav><nav>
<a>Accueil</a>
<a>Tarifs</a>
</nav>nav > a {
text-decoration: none;
padding: .5rem;
}Avant de créer une classe, demande-toi si un sélecteur précis peut faire le travail : nav > a, section > h2, article p, etc.
Évite les <div> quand une balise sémantique existe. Les noms de classes et IDs doivent être lisibles et rester entièrement en français ou entièrement en anglais.
03.e
ARCHITECTURE
<body>
<header>...<section>...</section>...</header>
<main>
<section>...</section>
<section>...</section>
</main>
<footer>...<section>...</section>...</footer>
</body>Le body est décomposé en header, main et footer. Chacun contient une ou plusieurs sections.
<section id="actualites">
<div class="container">...</div>
</section>Une section peut avoir un id, occuper toute la largeur et recevoir du padding. C’est utile pour les couleurs et images de fond.
<section>
<div class="container">
<h2>Nos actualités</h2>
...
</div>
</section>
.container {
width: min(1180px, calc(100% - 2rem));
margin: 0 auto;
}
header .container {
/* exception si le header doit être différent */
}Tout le contenu est dans un .container pour limiter sa largeur sur desktop. Si un container doit être différent, utilise un sélecteur contextuel comme header .container.
04
CSS & LAYOUT
body {
color: #1A1D56
background: white;
}
body {
color: #1A1D56;
background: white;
}
#contact {
display: none;
}
#sociaux {
display: none;
}
#contact,
#sociaux {
display: none;
}
/* Mobile : comportement par défaut */
nav {
display: flex;
flex-direction: column;
}
/* Puis seulement les adaptations */
@media screen and (min-width: 768px) {
nav {
flex-direction: row;
}
}
Le CSS de base doit fonctionner sur petit écran. Les media queries ajoutent ensuite les adaptations nécessaires pour les écrans plus larges.
Idéal pour aligner des éléments sur un axe.
Idéal pour une structure en lignes et colonnes.
/* Flexbox */
nav {
display: flex;
justify-content: space-between;
}
/* Grid */
.galerie {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 1rem;
}
.colonne {
float: left;
width: 50%;
}
.conteneur {
display: flex;
}
.colonne {
flex: 1;
}
.element {
display: inline-block;
transform: translate(73px, 18px);
}
.conteneur {
display: flex;
justify-content: center;
align-items: center;
}
Pas d'interdiction absolue : inline-block et translate sont de vraies fonctionnalités CSS. Elles ne doivent simplement pas être utilisées pour contourner un problème de mise en page. Si leur utilisation est justifiée, explique-la en commentaire.
.titre {
position: absolute;
left: 400px;
top: 250px;
}
.image {
position: absolute;
left: 700px;
top: 100px;
}
/* Bouton toujours visible */
.bouton-retour {
position: fixed;
right: 1rem;
bottom: 1rem;
}
Pour la mise en page normale, utilise Grid ou Flexbox. Absolute/fixed sont réservés aux éléments qui doivent réellement sortir du flux, comme un bouton de retour en haut ou un menu burger.
05
AVANT DE RENDRE