# 🚗 Corrections & explications — FleetZen
Salut les stagiaires ! 👋
Votre page est un **super début** : les couleurs, les boutons avec dégradé, l'ombre sous la barre du haut… tout ça marche et c'est joli. Bravo !
Ce document n'est pas là pour dire que c'est "mal fait". Il est là pour vous expliquer **les principes** qui rendent le HTML et le CSS faciles une fois qu'on les comprend. Lisez doucement, dans l'ordre. 🙂
---
## 🚨 D'abord, le bug le plus urgent : une accolade `}` oubliée
À la toute fin de votre fichier `css/style.css`, vous avez écrit :
```css
p {
font-family: cursive;
```
👉 Il **manque l'accolade de fermeture `}`** !
En CSS, chaque règle ressemble à une boîte : elle **s'ouvre** avec `{` et doit **se fermer** avec `}`. Si on oublie de la fermer, le navigateur est perdu : il ne sait plus où finit la règle, et **tout ce qui suit peut être ignoré**.
### ✅ Correction
```css
p {
font-family: cursive;
}
```
> 💡 **À retenir :** en CSS, à chaque `{` doit correspondre un `}`. Comme des parenthèses : ce qu'on ouvre, on le ferme. Toujours.
---
## 🧠 Les 3 grands principes à retenir
### Principe 1 — La page est une boîte de poupées russes
Tout en HTML est une **boîte dans une boîte dans une boîte**.
Le `
` contient des `
`, qui contiennent du texte ou des images.
👉 Quand on donne une taille à une boîte, il faut toujours se demander : *« par rapport à quoi ? »*
### Principe 2 — Chaque boîte a 4 couches (le "box model")
Imaginez un cadre photo :
```
┌─────────── marge (margin) — l'espace AUTOUR ───────────┐
│ ┌──────── bordure (border) ────────────────────────┐ │
│ │ ┌───── rembourrage (padding) — l'espace DEDANS ┐ │ │
│ │ │ CONTENU (texte, image) │ │ │
│ │ └──────────────────────────────────────────────┘ │ │
│ └────────────────────────────────────────────────────┘ │
└────────────────────────────────────────────────────────────┘
```
- **padding** = coussin *à l'intérieur* de la boîte
- **margin** = espace *à l'extérieur*, entre cette boîte et les autres
- **border** = le trait du cadre
### Principe 3 — `width: 100%` veut dire « toute la largeur de mon parent »
Et c'est exactement là que se cache **votre fameux bug du scroll**. 👇
---
## 🐛 Le bug du scroll : « j'ajoute du padding et une barre de défilement apparaît ! »
C'est **le piège le plus classique du CSS**, et vous êtes tombés dedans pile en ce moment. Regardez ce que vous venez d'ajouter :
```css
.align_x {
width: 100%; /* toute la largeur de l'écran */
padding-left: 10px; /* + 10px à gauche */
padding-right: 10px;/* + 10px à droite */
}
```
Par défaut, le navigateur calcule la largeur comme ça :
> **largeur totale = width + padding gauche + padding droite + margin gauche + margin droite**
Donc votre boîte fait en réalité :
> `100%` (déjà tout l'écran) **+ 10px + 10px** = **plus large que l'écran** → le navigateur ajoute une barre de défilement pour aller voir le morceau qui dépasse. 😱
C'est **exactement** le scroll horizontal que vous voyez. Ce n'est pas un margin sur le contenu qui est "interdit", c'est juste que `100% + quelque chose` ça déborde.
### ✅ La solution magique (à mettre tout en haut de votre CSS)
```css
* {
box-sizing: border-box;
}
```
`box-sizing: border-box` dit au navigateur :
> *« Quand je dis width: 100%, débrouille-toi pour que le **padding** et la **bordure** soient **compris DEDANS** les 100%, sans jamais dépasser. »*
C'est **la première ligne** que tous les pros écrivent. Mettez-la, et votre padding de 10px ne fera plus apparaître de scroll. 🎉
### ⚠️ Attention : ça marche pour le padding, PAS pour le margin
`box-sizing: border-box` range le **padding** et la **bordure** à l'intérieur de la largeur. Mais le **margin**, lui, reste **toujours à l'extérieur** de la boîte — `border-box` n'y change rien.
Donc si un jour vous mettez un **`margin-left`/`margin-right`** sur une boîte en `width: 100%`, **le scroll reviendra**, même avec `border-box`. Dans ce cas, la bonne solution est plutôt :
- soit utiliser du **padding** au lieu du margin (et garder `border-box`),
- soit **enlever le `width: 100%`** : une `
` occupe déjà toute la largeur disponible toute seule, le margin se range alors dans cette largeur sans déborder.
> 💡 **À retenir :**
> - `width: 100%` + **padding** → réglé par `box-sizing: border-box` ✅
> - `width: 100%` + **margin** → ça déborde quand même ❌ (le margin est toujours en dehors). Utilisez du padding, ou enlevez le `width: 100%`.
---
## 🐛 Le bug n°2 : `height: 100%` ne marche presque jamais comme on croit
Vous avez mis `height` un peu partout (`body: 100%`, `.align_x: 100%`, `#text_1: 15%`…).
Le piège : **`height: 100%` veut dire « 100% de la hauteur de mon parent »**. Mais si le parent n'a pas de hauteur fixée, alors 100% de *rien* = rien. La règle est donc souvent **ignorée**, ce qui donne des résultats imprévisibles.
### ✅ La règle simple pour débutants
- Pour la **largeur** : `width` en `%` ça marche bien. 👍
- Pour la **hauteur en `%`** : **évitez-la** (c'est elle qui est ignorée). Laissez plutôt le contenu décider tout seul.
### 👍 L'exception : une hauteur FIXE en `px`, comme votre navbar
Votre barre du haut est un **très bon exemple à suivre** :
```css
#nav_barre {
height: 100px; /* ✅ parfait : une hauteur fixe en px */
}
```
Ici vous **voulez** que la barre fasse toujours 100px, peu importe le contenu : c'est un élément de décor (comme le footer). Pour ça, une hauteur **fixe en `px`** est exactement la bonne méthode, et ça marche **toujours** — pas besoin que le parent ait une hauteur, contrairement aux `%`.
Petit bonus : c'est justement parce que `#nav_barre` a une vraie hauteur (100px) que le `height: 100%` de vos `#buttons` à l'intérieur **fonctionne** ✅. Le `%` marche quand le parent a une hauteur réelle ; il échoue quand le parent n'en a pas.
👉 **La vraie règle est donc :**
- hauteur en **`px`** pour les éléments de décor à taille fixe (navbar, footer) → ✅
- hauteur en **`%`** → seulement si le parent a lui-même une hauteur, sinon c'est ignoré
- pour du **contenu qui grandit** (texte) → pas de hauteur du tout, on laisse faire
```css
/* AVANT ❌ */
#text_1 {
width: 65%;
height: 15%; /* ← inutile, ignoré, et source de bugs */
}
/* APRÈS ✅ */
#text_1 {
width: 65%;
/* pas de height : le texte prend la place qu'il faut */
}
```
> 💡 **À retenir :** la hauteur en **`%`** est piégeuse (ignorée si le parent n'a pas de hauteur). Une hauteur **fixe en `px`** pour un élément de décor (navbar, footer) est une bonne pratique ✅. Pour du contenu qui grandit, on ne fixe pas la hauteur du tout.
---
## 🐛 Le bug n°3 : les images sont déformées
```css
#img_1 {
width: 20%;
height: 20%; /* ❌ */
}
```
En donnant **à la fois** une largeur ET une hauteur, on écrase l'image comme de la pâte à modeler : elle s'aplatit ou s'étire.
### ✅ On fixe UNE seule dimension, l'autre se calcule toute seule
```css
#img_1 {
width: 20%;
height: auto; /* "auto" garde les bonnes proportions */
}
```
> 💡 **À retenir :** pour une image, on choisit `width` **OU** `height`, et on met `auto` pour l'autre. (Même chose pour `.image_footer`.)
---
## 🐛 Le bug n°4 : `display: flex` sur des choses qui n'en ont pas besoin
`display: flex` est un outil pour **ranger des boîtes** (côte à côte, ou centrées…). Il sert seulement sur le **parent** qui contient les éléments à ranger.
Vous l'avez mis sur une image (`#img_1`) et sur un paragraphe (`#text_1`). Sur eux, ça ne range rien et ça peut même casser l'affichage.
```css
/* OUI ✅ : align_x contient un texte + une image à aligner */
.align_x {
display: flex;
justify-content: space-between;
}
/* NON ❌ : une image seule n'a rien à ranger à l'intérieur */
#img_1 {
display: flex; /* ← à enlever */
}
```
> 💡 **À retenir :** `flex` = sur le **parent**, pour aligner ses **enfants**.
---
## 🐛 Le bug n°5 : le footer `position: fixed` cache le texte
```css
.footer {
position: fixed;
bottom: 0;
}
```
`position: fixed` = *« colle ce truc à l'écran, il ne bouge plus, même quand on scrolle »*. C'est **exactement ce qu'on veut ici** : un footer toujours visible en bas de la fenêtre. 👍 Votre `position: fixed; bottom: 0;` est donc le **bon choix**, gardez-le !
Le seul effet de bord à connaître : comme le footer est "décollé" du reste, il se pose **par-dessus** le contenu et peut cacher la fin de votre texte.
### ✅ La correction : réserver de la place pour le footer
On garde le footer fixe, et on dit simplement au `body` de laisser un espace en bas, de la hauteur du footer :
```css
.footer {
text-align: center;
background-color: cadetblue;
font-size: 25px;
position: fixed; /* ✅ on garde : footer toujours visible */
bottom: 0;
width: 100%;
}
body {
padding-bottom: 60px; /* ← réserve la place du footer, le texte n'est plus caché */
}
```
> 💡 **À retenir :** `position: fixed` sort l'élément du flux normal → il recouvre le reste. Quand on veut un footer toujours visible, c'est le bon outil, mais il faut **réserver sa place** (ici avec un `padding-bottom` sur le body).
---
## 📝 Les corrections dans le HTML
### 1. La balise `` est presque vide
```html
FleetZen
```
Et ajoutez la langue : ``.
### 2. Un `p` qui traîne tout seul (faute de frappe)
```html
```
### 3. Les boutons : petit ✏️ errata de ce que je vous ai dit
Je vous avais dit qu'on utilise **très souvent ``** — et c'est vrai ! Mais j'ai oublié de préciser **dans quel cas** : `` sert surtout **à l'intérieur d'un formulaire** (`