Bouton
Le bouton déclenche une action. Il est l'élément interactif le plus courant de l'interface. Son variant, sa taille et son état communiquent son niveau de priorité et sa disponibilité.
Variants
Chaque variant correspond à un niveau de hiérarchie. Un seul bouton
default par zone d'action, les autres jouent un rôle secondaire.
<twig:Button variant="default">Valider</twig:Button>
<twig:Button variant="secondary">Annuler</twig:Button>
<twig:Button variant="destructive">Supprimer</twig:Button>
<twig:Button variant="ghost">En savoir plus</twig:Button>
Styles
Le style outline allège visuellement le bouton tout en
conservant son variant. À utiliser sur des fonds colorés ou pour
une action secondaire qui doit rester visible.
<twig:Button variant="outline">Action</twig:Button>
<twig:Button variant="outline-primary">Valider</twig:Button>
<twig:Button variant="outline-secondary">Annuler</twig:Button>
<twig:Button variant="outline-destructive">Supprimer</twig:Button>
Lien
Le variant link ressemble à un lien texte mais déclenche une action.
Utiliser as="a" + href pour la navigation entre pages.
button par défaut.
as="a" + href.
<twig:Button variant="link">Action contextuelle</twig:Button>
<twig:Button variant="link" as="a" href="/...">Navigation</twig:Button>
Tailles
Quatre tailles disponibles, plus un mode pleine largeur. La taille
default est celle par défaut, ne pas la spécifier si elle convient.
<twig:Button size="xs">Xs</twig:Button>
<twig:Button size="sm">Small</twig:Button>
<twig:Button>Default</twig:Button>
<twig:Button size="lg">Large</twig:Button>
Pleine largeur
Passer class="w-full" pour étirer le bouton sur toute la largeur
de son conteneur. Réservé aux formulaires en colonne étroite (connexion, inscription).
<twig:Button class="w-full">Se connecter</twig:Button>
Avec icône
Les icônes renforcent la lisibilité de l'action. Elles peuvent être placées à gauche (défaut) ou à droite. On utilise toujours une icône cohérente avec l'action, jamais décorative.
<twig:Button><twig:ux:icon name="bi:plus-circle"/> Ajouter</twig:Button>
<twig:Button>Télécharger <twig:ux:icon name="bi:download"/></twig:Button>
<twig:Button variant="secondary"><twig:ux:icon name="bi:pencil"/> Modifier</twig:Button>
<twig:Button variant="destructive"><twig:ux:icon name="bi:trash"/> Supprimer</twig:Button>
Les icônes utilisent le système UX Icons. Préfixe bi: pour Bootstrap Icons,
material-symbols: pour Material. Voir la liste complète sur
ux.symfony.com/icons.
États
L'état du bouton communique la disponibilité de l'action à l'utilisateur. Il ne doit jamais être simulé par du CSS inline, toujours passer par les props.
aria-busy="true".
disabled.
<twig:Button>Normal</twig:Button>
<twig:Button disabled aria-busy="true"><twig:Spinner /> Chargement</twig:Button>
<twig:Button disabled>Désactivé</twig:Button>
API du composant
Toutes les props disponibles pour <twig:Button>.
| Prop | Type | Défaut | Valeurs acceptées | Description |
|---|---|---|---|---|
variant |
string | 'default' |
default secondary destructive outline outline-primary outline-secondary outline-destructive ghost link |
Hiérarchie et couleur de l'action. |
size |
string | 'default' |
xs sm default lg icon icon-xs icon-sm icon-lg |
Taille du bouton. |
as |
string | 'button' |
Tout tag HTML valide (button, a, div…) |
Tag HTML rendu. Utiliser as="a" pour un lien stylé en bouton. |
contenu |
block | Texte, icône {{ ux_icon(...) }}, ou les deux |
Contenu passé entre les balises ouvrante et fermante du composant. | |
disabled |
attr HTML | attribut booléen | Désactive le bouton (opacité 50 %, pointeur interdit). Passé via {{ attributes }}. |
|
type |
attr HTML | 'button' |
button submit reset |
Attribut HTML type. Passé via {{ attributes }}. |
Do & Don't
-
Un seul bouton
defaultpar zone d'action -
Utiliser
destructivepour toute action irréversible -
Passer
disabled aria-busy="true"+<twig:Spinner />lors d'un appel asynchrone -
Utiliser
type="submit"dans les formulaires - Choisir une icône cohérente avec l'action déclenchée
-
Mettre plusieurs
defaultcôte à côte -
Simuler le disabled avec
opacity: 0.5en CSS inline -
Utiliser un
<a>stylé en bouton pour déclencher une action -
Ajouter des classes Bootstrap
btn-*en dehors du composant -
Utiliser
destructivepour attirer l'attention sans intention destructrice
Règles
Toujours utiliser <twig:Button>. Ne jamais écrire
un <button> manuellement avec des classes ds-btn-*.
Un contenu textuel est obligatoire. Même si une icône suffit visuellement,
le texte reste nécessaire pour l'accessibilité (ou utiliser aria-label).
En état de chargement, toujours passer disabled aria-busy="true"
pour éviter les doubles soumissions.
Le variant destructive impose une confirmation avant exécution
(modale ou message d'avertissement).