Documentation · Chapitre 05

Servir CSS, images
et JavaScript.

Le navigateur peut demander directement les fichiers de public/. Il ne doit jamais recevoir les fichiers privés de src/.

Nous améliorons reading-list sans changer sa logique HTTP ni son stockage temporaire en session.

Racine publique et chemin URL

public/css/app.css/css/app.css
public/img/logo.svg/img/logo.svg
public/js/books.js/js/books.js

Le mot public ne figure pas dans l’URL, car ce dossier est déjà la racine exposée par le serveur. Une URL /src/views/books/index.php doit rester inaccessible.

Créez une base CSS simple

public/css/app.css

phpaml — zsh
:root {
    color-scheme: light;
    font-family: system-ui, sans-serif;
    color: #171717;
    background: #f7f7f5;
}

body { margin: 0; }
.container { width: min(68rem, calc(100% - 2rem)); margin-inline: auto; }
header { border-bottom: 1px solid #d7d7d2; }
nav { display: flex; gap: 1rem; padding-block: 1rem; }
main { padding-block: 3rem; }
input, button { min-height: 2.75rem; font: inherit; }
.field-error { color: #a40018; }

Le CSS améliore la présentation sans déplacer la structure HTML ni la logique PHP. Commencez par les fondations : largeur lisible, contraste, espacements et champs utilisables.

Ajoutez une image avec une alternative

phpaml — zsh
<img src="/img/logo.svg"
     width="40" height="40"
     alt="Reading List">

width et height réservent l’espace avant le téléchargement. alt décrit l’information utile. Si l’image est purement décorative, utilisez alt="" afin qu’un lecteur d’écran l’ignore.

JavaScript seulement lorsqu’il apporte quelque chose

phpaml — zsh
<script src="/js/books.js" defer></script>

defer télécharge le script sans bloquer la lecture du HTML et l’exécute après l’analyse du document. Le CRUD doit rester fonctionnel sans ce fichier. Un script peut ensuite ajouter une confirmation de suppression ou une amélioration visuelle, jamais remplacer la validation serveur.

Une page particulière peut charger un script particulier

Ajoutez /js/books.js seulement dans les pages Livres si les autres pages n’en ont pas besoin. Cela évite du travail inutile au navigateur.