Type de ressource : Composant Astro (UI atomique)
Fichier source :src/components/HeaderLink.astro
Statut : Actif
1. Vue dâensemble
Section titled â1. Vue dâensembleâ1.1. Description
Section titled â1.1. Descriptionâ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.
1.2. Objectif
Section titled â1.2. Objectifâ- 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
1.3. Caractéristiques
Section titled â1.3. CaractĂ©ristiquesâ| PropriĂ©tĂ© | Valeur |
|---|---|
| Type | UI atomique |
| Hydratation | Aucune |
| Framework JS | Aucun |
| Accessibilité | Partiellement conforme |
| Responsive | Non applicable |
2. Architecture et structure
Section titled â2. Architecture et structureâ2.1. Emplacement dans lâarborescence
Section titled â2.1. Emplacement dans lâarborescenceâsrc/components/âââ BaseHead.astroâââ Header.astroâââ Footer.astroâââ FormattedDate.astroâââ HeaderLink.astro2.2. Composants dĂ©pendants
Section titled â2.2. Composants dĂ©pendantsâ| Composant parent | Fichier | Relation |
|---|---|---|
| Header | src/components/Header.astro |
Utilisation pour les liens internes |
2.3. Composants enfants utilisés
Section titled â2.3. Composants enfants utilisĂ©sâAucun composant enfant nâest utilisĂ© (composant leaf).
3. Implémentation
Section titled â3. ImplĂ©mentationâ3.1. Variante : Composant UI atomique (HTML + CSS purs)
Section titled â3.1. Variante : Composant UI atomique (HTML + CSS purs)â---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}> <slot /></a><style> a { display: inline-block; text-decoration: none; } a.active { font-weight: bolder; text-decoration: underline; }</style>3.2. Utilisation dans une page
Section titled â3.2. Utilisation dans une pageâ---import HeaderLink from '../components/HeaderLink.astro';---
<nav> <HeaderLink href="/">Home</HeaderLink> <HeaderLink href="/blog">Blog</HeaderLink> <HeaderLink href="/about">About</HeaderLink></nav>4. Props et interface
Section titled â4. Props et interfaceâ4.1. Props obligatoires
Section titled â4.1. Props obligatoiresâ| Prop | Type | Description | Exemple |
|---|---|---|---|
href |
string |
URL du lien | "/blog" |
4.2. Props optionnelles
Section titled â4.2. Props optionnellesâ| Prop | Type | Description | Valeur par dĂ©faut |
|---|---|---|---|
class |
string |
Classes CSS additionnelles | undefined |
| (toutes les autres) | HTMLAttributes<'a'> |
Attributs HTML standard | - |
4.3 Slots
Section titled â4.3 Slotsâ| Slot | Description | Obligatoire |
|---|---|---|
default |
Contenu personnalisĂ© du lien | â |
5. StratĂ©gie dâhydratation
Section titled â5. StratĂ©gie dâhydratationâ5.1. Politique dâhydratation
Section titled â5.1. Politique dâhydratationâ| Type de composant | StratĂ©gie | Rationale |
|---|---|---|
| Composant UI atomique | Aucune | HTML pur, pas dâinteraction |
5.2. Directives Astro utilisées
Section titled â5.2. Directives Astro utilisĂ©esâAucune directive nâest utilisĂ©e (composant HTML pur).
5.3. Impact sur les performances
Section titled â5.3. Impact sur les performancesâ| MĂ©trique | Sans hydratation |
|---|---|
| HTML size | +0.5 KB |
| CSS size | +0.5 KB |
| JS size | 0 KB |
| TTI | Immédiat |
6. Styles et design system
Section titled â6. Styles et design systemâ6.1. Utilisation des design tokens
Section titled â6.1. Utilisation des design tokensâNon applicable - styles inline simples.
6.2. Responsive design
Section titled â6.2. Responsive designâNon applicable - le composant est responsive par dĂ©faut.
6.3. Mode sombre
Section titled â6.3. Mode sombreâNon implĂ©mentĂ© - le composant utilise les couleurs par dĂ©faut du navigateur.
7. Accessibilité (a11y)
Section titled â7. AccessibilitĂ© (a11y)â7.1. ConformitĂ© WCAG 2.1 AA
Section titled â7.1. ConformitĂ© WCAG 2.1 AAâ| CritĂšre | ImplĂ©mentation | Statut |
|---|---|---|
| 1.3.1 Info and Relationships | Structure HTML sémantique (<a>) |
â |
| 2.4.7 Focus Visible | Non testĂ© | â ïž |
7.2. Attributs ARIA utilisés
Section titled â7.2. Attributs ARIA utilisĂ©sâAucun attribut ARIA nâest utilisĂ©.
7.3. Navigation clavier
Section titled â7.3. Navigation clavierâ| Touche | Action |
|---|---|
Tab |
Navigation vers le lien |
Enter |
Activation du lien |
7.4. Tests dâaccessibilitĂ©
Section titled â7.4. Tests dâaccessibilitĂ©â# Test avec Lighthousenpx lighthouse http://localhost:4321/ --view8. Performance et optimisation
Section titled â8. Performance et optimisationâ8.1. Optimisations appliquĂ©es
Section titled â8.1. Optimisations appliquĂ©esâ- â HTML statique par dĂ©faut
- â CSS scoped
- â Pas de JavaScript
- â DĂ©tection automatique de la page active (calcul cĂŽtĂ© serveur)
8.2. Core Web Vitals
Section titled â8.2. Core Web Vitalsâ| MĂ©trique | Objectif | StratĂ©gie |
|---|---|---|
| LCP | < 2.5s | Pas de JS bloquant |
| INP | < 200ms | Pas de JS |
| CLS | < 0.1 | Pas de layout shift |
8.3. Taille du composant
Section titled â8.3. Taille du composantâ| Type | HTML | CSS | JS (hydratĂ©) | Total |
|---|---|---|---|---|
| UI atomique | 0.5 KB | 0.5 KB | 0 KB | 1 KB |
9. Débogage et troubleshooting
Section titled â9. DĂ©bogage et troubleshootingâ9.1. ProblĂšmes courants
Section titled â9.1. ProblĂšmes courantsâ| 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 |
9.2. Tests manuels
Section titled â9.2. Tests manuelsâ# Test localnpm run dev
# Test de navigation# Naviguer entre les pages et vérifier que le lien actif est bien mis en surbrillance9.3. Logs et monitoring
Section titled â9.3. Logs et monitoringâNon applicable (composant statique).
10. Bonnes pratiques
Section titled â10. Bonnes pratiquesâ10.1. Architecture
Section titled â10.1. Architectureâ- â 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
10.2. Accessibilité
Section titled â10.2. AccessibilitĂ©â- â
Utiliser des éléments HTML sémantiques (
<a>) - â Fournir un texte descriptif pour les liens (via slot)
- â ïž AmĂ©liorer le focus visible
10.3. Performance
Section titled â10.3. Performanceâ- â Ăviter lâhydratation (pas dâinteraction requise)
- â Calcul cĂŽtĂ© serveur (pas de JavaScript cĂŽtĂ© client)
10.4. Maintenance
Section titled â10.4. Maintenanceâ- â Mettre Ă jour la logique de dĂ©tection si nĂ©cessaire
- â Tester sur diffĂ©rentes routes
11. Ăvolutions et roadmap
Section titled â11. Ăvolutions et roadmapâ11.1. AmĂ©liorations planifiĂ©es
Section titled â11.1. AmĂ©liorations planifiĂ©esâ- AmĂ©lioration du focus visible
- [] Support du mode sombre
- [ [Ăvolution 2 : ex. Ajout de variantes de style]
11.2. Limitations connues
Section titled â11.2. Limitations connuesâ- â Logique de matching basique (pathname simple)
- â Pas de support des routes dynamiques complexes
- â Pas de mode sombre
12. Ressources liées
Section titled â12. Ressources liĂ©esâ- Documentation Astro : Components
- Documentation Astro : Slots
- Composants associés :
src/components/Header.astro
13. Historique des modifications
Section titled â13. Historique des modificationsâ| Date | Version | Description | Auteur |
|---|---|---|---|
| 2026-09-15 | 1.0 | Création initiale | Devin |