Type de ressource : Composant Astro (UI atomique)
Fichier source : src/components/HeaderLink.astro
Statut : Actif
Composant de lien de navigation interne avec détection automatique de la page active. Applique un style visuel (gras + soulignement) au lien correspondant à la page courante.
- Fournir des liens de navigation cohérents
- Indiquer visuellement la page active
- Réduire la duplication de code pour les liens de navigation
- Simplifier la gestion de lâĂ©tat actif
| Propriété |
Valeur |
| Type |
UI atomique |
| Hydratation |
Aucune |
| Framework JS |
Aucun |
| Accessibilité |
Partiellement conforme |
| Responsive |
Non applicable |
âââ FormattedDate.astro
âââ HeaderLink.astro
| Composant parent |
Fichier |
Relation |
| Header |
src/components/Header.astro |
Utilisation pour les liens internes |
Aucun composant enfant nâest utilisĂ© (composant leaf).
import type { HTMLAttributes } from 'astro/types';
type Props = HTMLAttributes<'a'>;
const { href, class: className, ...props } = Astro.props;
const pathname = Astro.url.pathname.replace(import.meta.env.BASE_URL, '');
const subpath = pathname.match(/[^\/]+/g);
const isActive = href === pathname || href === '/' + (subpath?.[0] || '');
<a href={href} class:list={[className, { active: isActive }]} {...props}>
text-decoration: underline;
import HeaderLink from '../components/HeaderLink.astro';
<HeaderLink href="/">Home</HeaderLink>
<HeaderLink href="/blog">Blog</HeaderLink>
<HeaderLink href="/about">About</HeaderLink>
| Prop |
Type |
Description |
Exemple |
href |
string |
URL du lien |
"/blog" |
| Prop |
Type |
Description |
Valeur par défaut |
class |
string |
Classes CSS additionnelles |
undefined |
| (toutes les autres) |
HTMLAttributes<'a'> |
Attributs HTML standard |
- |
| Slot |
Description |
Obligatoire |
default |
Contenu personnalisé du lien |
â |
| Type de composant |
Stratégie |
Rationale |
| Composant UI atomique |
Aucune |
HTML pur, pas dâinteraction |
Aucune directive nâest utilisĂ©e (composant HTML pur).
| Métrique |
Sans hydratation |
| HTML size |
+0.5 KB |
| CSS size |
+0.5 KB |
| JS size |
0 KB |
| TTI |
Immédiat |
Non applicable - styles inline simples.
Non applicable - le composant est responsive par défaut.
Non implémenté - le composant utilise les couleurs par défaut du navigateur.
| CritĂšre |
Implémentation |
Statut |
| 1.3.1 Info and Relationships |
Structure HTML sémantique (<a>) |
â
|
| 2.4.7 Focus Visible |
Non testé |
â ïž |
Aucun attribut ARIA nâest utilisĂ©.
| Touche |
Action |
Tab |
Navigation vers le lien |
Enter |
Activation du lien |
npx lighthouse http://localhost:4321/ --view
- â
HTML statique par défaut
- â
CSS scoped
- â
Pas de JavaScript
- â
Détection automatique de la page active (calcul cÎté serveur)
| Métrique |
Objectif |
Stratégie |
| LCP |
< 2.5s |
Pas de JS bloquant |
| INP |
< 200ms |
Pas de JS |
| CLS |
< 0.1 |
Pas de layout shift |
| Type |
HTML |
CSS |
JS (hydraté) |
Total |
| UI atomique |
0.5 KB |
0.5 KB |
0 KB |
1 KB |
| SymptĂŽme |
Cause probable |
Solution |
| Ătat actif incorrect |
Logique de matching incorrecte |
Vérifier la logique de détection du pathname |
| Styles non appliqués |
CSS scoped mal configuré |
Vérifier la configuration du scoped CSS |
# Naviguer entre les pages et vérifier que le lien actif est bien mis en surbrillance
Non applicable (composant statique).
- â
Centraliser la logique de détection de la page active
- â
Utiliser le slot pour permettre la personnalisation du contenu
- â
Typer les props avec TypeScript
- â
Supporter tous les attributs HTML standard via spread operator
- â
Utiliser des éléments HTML sémantiques (
<a>)
- â
Fournir un texte descriptif pour les liens (via slot)
- â ïž AmĂ©liorer le focus visible
- â
Ăviter lâhydratation (pas dâinteraction requise)
- â
Calcul cÎté serveur (pas de JavaScript cÎté client)
- â
Mettre à jour la logique de détection si nécessaire
- â
Tester sur différentes routes
- â Logique de matching basique (pathname simple)
- â Pas de support des routes dynamiques complexes
- â Pas de mode sombre
- Documentation Astro : Components
- Documentation Astro : Slots
- Composants associés :
src/components/Header.astro
| Date |
Version |
Description |
Auteur |
| 2026-09-15 |
1.0 |
Création initiale |
Devin |