Habille enfin les liens du menu : NavLink échappe à l'isolation CSS

Les six entrées restaient en bleu souligné par défaut : l'isolation CSS de
Blazor ne pose son attribut de portée que sur le balisage du composant
courant, jamais sur ce que rend un composant enfant. NavLink étant un
composant, `.menu-lien` déclaré dans MainLayout.razor.css ne correspondait à
aucun élément — alors que `.menu` et `.bandeau`, du balisage propre, étaient
bien habillés.

Les règles du menu passent en feuille globale plutôt qu'en `::deep` : la
navigation ne dépend plus du bundle d'isolation ni de son cache, qui est
précisément le fichier déjà vu servi périmé ou absent.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
mathieu
2026-08-20 21:53:41 +02:00
co-authored by Claude Opus 5
parent 7150d3bcae
commit 345422eda2
3 changed files with 139 additions and 69 deletions
+41
View File
@@ -2184,6 +2184,47 @@ un clic sur « Auteurs » laissait les six entrées empilées au-dessus de la li
Conséquence sur `app.css` : `--mb-onglets-hauteur` **a disparu**, et `.actions-flottantes`
se pose directement en `bottom: 0`. Plus rien ne l'accompagne en bas de l'écran.
### ⚠️ Les liens du menu n'étaient atteints par AUCUNE règle — `NavLink` est un composant
Symptôme remonté deux fois, la seconde capture d'écran à l'appui : « toujours les liens trop
moches et pas ressemblant à un menu ». Le `<nav>` prenait bien son fond bleu sombre, et les six
entrées restaient en **bleu Bootstrap souligné**, empilées sans marge — l'aspect exact d'un
`<a>` sans style.
**Ce n'était pas un cache, contrairement aux deux défauts précédents** (lot A1, icône du
bandeau), et c'est ce qui a fait perdre du temps : la feuille scopée était bien chargée, elle
habillait le bandeau juste au-dessus.
La cause est une règle de l'isolation CSS de Blazor :
> l'attribut de portée (`b-xxxx`) n'est posé que sur les éléments écrits dans le balisage du
> composant courant — **jamais sur ce que rend un composant enfant**.
`NavLink` **est un composant**. `.menu-lien` déclaré dans `MainLayout.razor.css` devenait
`.menu-lien[b-xxxx]`, et l'`<a>` rendu par `NavLink` ne porte pas cet attribut : la règle ne
correspondait à rien. `.menu` et `.bandeau`, eux, sont du balisage propre au composant, d'où le
fond sombre présent et les liens nus. C'est précisément pour cela que le gabarit Blazor par
défaut écrit ses règles de navigation avec `::deep`.
**Correction retenue : les règles du menu passent en feuille GLOBALE** (`wwwroot/css/app.css`),
plutôt que `::deep`. Les deux corrigent le bug ; la feuille globale corrige en plus une
fragilité connue — la navigation ne dépend alors ni du bundle `MaBibli.Client.styles.css` ni de
son cache, c'est-à-dire du fichier même qu'un appareil a déjà servi périmé ou pas du tout. **La
navigation est ce qui doit le moins pouvoir tomber.**
⚠️ Le point de rupture de **40 rem** est désormais écrit à **deux endroits** : `app.css` (le
menu passe en rangée) et `MainLayout.razor.css` (la bascule se masque — elle, c'est du balisage
propre, donc scopable). Les deux doivent rester identiques.
**Règle à retenir au-delà de ce cas** : toute règle scopée visant un élément rendu par un
composant enfant (`NavLink`, et tout composant du projet) est morte-née. Soit `::deep`, soit la
feuille globale.
Vérifié en exécution, styles calculés à l'appui : à 375 px, menu déployé, liens en `#e8edf3`,
`text-decoration: none`, 45 px de haut, l'entrée active en blanc gras avec sa bordure jaune ; à
1280 px, rangée horizontale centrée (six liens sur la même ligne à y = 55) et bascule
`display: none`, sans débordement horizontal.
### Un retour explicite dans le bandeau
« Le déplacement est foireux » : d'un écran profond (bibliographie, fiche de tome, ajout