Type de ressource : Composant Astro (UI atomique)
Fichier source : src/components/Header.astro
Statut : Actif
Composant dâen-tĂȘte de navigation contenant le titre du site, les liens de navigation internes, et les liens vers les rĂ©seaux sociaux (Mastodon, Twitter, GitHub).
- Fournir une navigation cohérente sur tout le site
- Afficher le titre du site avec lien vers lâaccueil
- Permettre la navigation vers les sections principales (Home, Blog, About)
- Afficher les liens vers les réseaux sociaux
| Propriété |
Valeur |
| Type |
UI atomique |
| Hydratation |
Aucune |
| Framework JS |
Aucun |
| Accessibilité |
Partiellement conforme |
| Responsive |
Mobile-first (social links masqués sur mobile) |
âââ FormattedDate.astro
âââ HeaderLink.astro
| Composant parent |
Fichier |
Relation |
| Toutes les pages |
src/pages/*.astro |
Utilisation dans le <body> |
| Composant enfant |
Fichier |
RĂŽle |
| HeaderLink |
src/components/HeaderLink.astro |
Liens de navigation internes |
import { SITE_TITLE } from '../consts';
import HeaderLink from './HeaderLink.astro';
<h2><a href="/">{SITE_TITLE}</a></h2>
<div class="internal-links">
<HeaderLink href="/">Home</HeaderLink>
<HeaderLink href="/blog">Blog</HeaderLink>
<HeaderLink href="/about">About</HeaderLink>
<div class="social-links">
<a href="https://m.webtoo.ls/@astro" target="_blank">
<span class="sr-only">Follow Astro on Mastodon</span>
<svg viewBox="0 0 16 16" aria-hidden="true" width="32" height="32">
<path fill="currentColor" d="M11.19 12.195c2.016-.24 3.77-1.475 3.99-2.603.348-1.778.32-4.339.32-4.339 0-3.47-2.286-4.488-2.286-4.488C12.062.238 10.083.017 8.027 0h-.05C5.92.017 3.942.238 2.79.765c0 0-2.285 1.017-2.285 4.488l-.002.662c-.004.64-.007 1.35.011 2.091.083 3.394.626 6.74 3.78 7.57 1.454.383 2.703.463 3.709.408 1.823-.1 2.847-.647 2.847-.647l-.06-1.317s-1.303.41-2.767.36c-1.45-.05-2.98-.156-3.215-1.928a3.614 3.614 0 0 1-.033-.496s1.424.346 3.228.428c1.103.05 2.137-.064 3.188-.189zm1.613-2.47H11.13v-4.08c0-.859-.364-1.295-1.091-1.295-.804 0-1.207.517-1.207 1.541v2.233H7.168V5.89c0-1.024-.403-1.541-1.207-1.541-.727 0-1.091.436-1.091 1.296v4.079H3.197V5.522c0-.859.22-1.541.66-2.046.456-.505 1.052-.764 1.793-.764.856 0 1.504.328 1.933.983L8 4.39l.417-.695c.429-.655 1.077-.983 1.934-.983.74 0 1.336.259 1.791.764.442.505.661 1.187.661 2.046v4.203z" />
<a href="https://twitter.com/astrodotbuild" target="_blank">
<span class="sr-only">Follow Astro on Twitter</span>
<svg viewBox="0 0 16 16" aria-hidden="true" width="32" height="32">
<path fill="currentColor" d="M5.026 15c6.038 0 9.341-5.003 9.341-9.334 0-.14 0-.282-.006-.422A6.685 6.685 0 0 0 16 3.542a6.658 6.658 0 0 1-1.889.518 3.301 3.301 0 0 0 1.447-1.817 6.533 6.533 0 0 1-2.087.793A3.286 3.286 0 0 0 7.875 6.03a9.325 9.325 0 0 1-6.767-3.429 3.289 3.289 0 0 0 1.018 4.382A3.323 3.323 0 0 1 .64 6.575v.045a3.288 3.288 0 0 0 2.632 3.218 3.203 3.203 0 0 1-.865.115 3.23 3.23 0 0 1-.614-.057 3.283 3.283 0 0 0 3.067 2.277A6.588 6.588 0 0 1 .78 13.58a6.32 6.32 0 0 1-.78-.045A9.344 9.344 0 0 0 5.026 15z" />
<a href="https://github.com/withastro/astro" target="_blank">
<span class="sr-only">Go to Astro's GitHub repo</span>
<svg viewBox="0 0 16 16" aria-hidden="true" width="32" height="32">
<path fill="currentColor" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z" />
import Header from '../components/Header.astro';
<!-- Contenu de la page -->
Aucune prop nâest obligatoire (composant sans props).
Aucune prop nâest disponible (composant sans props).
Aucun slot nâest implĂ©mentĂ© dans ce composant.
| Type de composant |
Stratégie |
Rationale |
| Composant UI atomique |
Aucune |
HTML + CSS purs, pas dâinteraction |
Aucune directive nâest utilisĂ©e (composant HTML pur).
| Métrique |
Sans hydratation |
| HTML size |
+2 KB |
| CSS size |
+1 KB |
| JS size |
0 KB |
| TTI |
Immédiat |
/* Le composant utilise des variables CSS personnalisées */
box-shadow: 0 2px 8px rgba(var(--black), 5%);
border-bottom-color: var(--accent);
/* Mobile-first approach */
@media (max-width: 720px) {
Non implémenté - le composant utilise un fond blanc fixe.
| CritĂšre |
Implémentation |
Statut |
| 1.1.1 Non-text Content |
Alt text pour les SVG (aria-hidden) |
â
|
| 1.3.1 Info and Relationships |
Structure HTML sémantique (<header>, <nav>, <h2>) |
â
|
| 1.4.3 Contrast (Minimum) |
Non testé |
â ïž |
| 2.1.1 Keyboard |
Navigation clavier complĂšte (Tab, Enter) |
â
|
| 2.4.7 Focus Visible |
Non testé |
â ïž |
| 4.1.2 Name, Role, Value |
sr-only pour les liens sociaux |
â
|
<span class="sr-only">Follow Astro on Mastodon</span>
<svg aria-hidden="true">...</svg>
| Touche |
Action |
Tab |
Navigation vers les liens de navigation |
Enter |
Activation des liens |
npx lighthouse http://localhost:4321/ --view
- â
HTML statique par défaut
- â
CSS scoped
- â
Pas de JavaScript
- â
SVG inline (pas de requĂȘte HTTP supplĂ©mentaire)
- â
Social links masqués sur mobile (réduction DOM)
| Métrique |
Objectif |
Stratégie |
| LCP |
< 2.5s |
Pas de JS bloquant |
| INP |
< 200ms |
Pas de JS |
| CLS |
< 0.1 |
Dimensions explicites des SVG |
| Type |
HTML |
CSS |
JS (hydraté) |
Total |
| UI atomique |
2 KB |
1 KB |
0 KB |
3 KB |
| SymptĂŽme |
Cause probable |
Solution |
| HeaderLink non fonctionnel |
Import incorrect |
VĂ©rifier le chemin dâimport de HeaderLink |
| Styles cassés |
Variables CSS non définies |
Vérifier les variables CSS personnalisées |
| Social links visibles sur mobile |
Media query incorrecte |
Vérifier le breakpoint (720px) |
# Utiliser les DevTools du navigateur (mode responsive)
# Vérifier que les social links sont masqués sur mobile
Non applicable (composant statique).
- â
Séparer les liens internes (HeaderLink) des liens externes
- â
Utiliser
sr-only pour le texte alternatif des liens sociaux
- â
Utiliser
aria-hidden="true" pour les SVG décoratifs
- â
CSS scoped pour éviter les fuites de styles
- â
Utiliser des éléments HTML sémantiques (
<header>, <nav>, <h2>)
- Fournir du texte alternatif pour les liens sociaux
- â
Tester la navigation au clavier
- â ïž AmĂ©liorer le contraste des couleurs
- â ïž AmĂ©liorer le focus visible
- â
Ăviter lâhydratation (pas dâinteraction requise)
- â
SVG inline (pas de requĂȘte HTTP)
- â
Masquer les éléments non critiques sur mobile
- â
Mettre Ă jour les liens sociaux selon les besoins
- â
Vérifier la compatibilité des liens avec les réseaux sociaux
- â Navigation active non implĂ©mentĂ©e (classe
.active existe mais non utilisée)
- â Pas de mode sombre
- â Liens sociaux hardcodĂ©s (non configurables)
- â Pas de menu mobile pour les liens internes
- Documentation Astro : Components
- Documentation Astro : Islands Architecture
- DAT L2 : §4 - StratĂ©gie dâHydratation & Gestion du JavaScript
- Composants associés :
src/components/HeaderLink.astro
src/components/Footer.astro
- Constantes :
src/consts.ts (SITE_TITLE)
| Date |
Version |
Description |
Auteur |
| 2026-09-15 |
1.0 |
Création initiale |
Devin |