Get to know MDN better
Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.
Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis juillet 2015.
* Certaines parties de cette fonctionnalité peuvent bénéficier de prise en charge variables.
L'élément HTML <button> est un élément interactif qui peut être activé avec une souris, un clavier, un doigt, une commande vocale ou tout autre technologie d'assistance. Une fois activé, il peut déclencher une action tel qu'envoyer un formulaire ou ouvrir une boite de dialogue.
Par défaut, les boutons HTML sont présentés dans un style ressemblant à la plate-forme d'exécution de l'agent utilisateur, mais vous pouvez modifier l'apparence des boutons avec CSS.
Cet élément inclut les attributs universels.
autofocusCet attribut booléen indique que le bouton doit recevoir le focus lors du chargement de la page. Un seul élément dans un document peut avoir cet attribut.
commandDéfinit l'action à effectuer sur un élément contrôlé par un bouton <button> via l'attribut commandfor. Les valeurs possibles sont :
"show-modal"Le bouton affichera un élément <dialog> en mode modale. Si la boîte de dialogue est déjà modale, aucune action ne sera effectuée. C'est l'équivalent déclaratif de l'appel à la méthode HTMLDialogElement.showModal() sur l'élément <dialog>.
"close"Le bouton fermera un élément <dialog>. Si la boîte de dialogue est déjà fermée, aucune action ne sera effectuée. C'est l'équivalent déclaratif de l'appel à la méthode HTMLDialogElement.close() sur l'élément <dialog>. Lorsqu'il est utilisé avec l'attribut value, la valeur du bouton sera transmise comme propriété returnValue de la boîte de dialogue.
"request-close"Le bouton déclenchera un événement cancel sur un élément <dialog> pour demander au navigateur de le fermer, suivi d'un événement close. Cela diffère de la commande close car les auteur·ice·s peuvent appeler Event.preventDefault() sur l'événement cancel pour empêcher la fermeture du <dialog>. Si la boîte de dialogue est déjà fermée, aucune action ne sera effectuée. C'est l'équivalent déclaratif de l'appel à la méthode HTMLDialogElement.requestClose() sur l'élément <dialog>. Lorsqu'il est utilisé avec l'attribut value, la valeur du bouton sera transmise comme propriété returnValue de la boîte de dialogue.
"show-popover"Le bouton affichera un élément contextuel flottant (popover en anglais) caché. Si vous essayez d'afficher un élément contextuel flottant déjà affiché, aucune action ne sera effectuée. Voir l'API Popover pour plus de détails. Ceci est équivalent à la valeur show pour l'attribut popovertargetaction, et fournit également un équivalent déclaratif à l'appel de la méthode HTMLElement.showPopover() sur l'élément contextuel flottant.
"hide-popover"Le bouton masquera un élément contextuel flottant (popover en anglais) affiché. Si vous essayez de masquer un élément contextuel flottant déjà caché, aucune action ne sera effectuée. Voir l'API Popover pour plus de détails. C'est équivalent à la valeur hide pour l'attribut popovertargetaction, et fournit aussi un équivalent déclaratif à l'appel de la méthode HTMLElement.hidePopover() sur l'élément contextuel flottant.
"toggle-popover"Le bouton basculera l'affichage d'un élément contextuel flottant (popover en anglais) entre visible et caché. Si l'élément contextuel flottant est caché, il sera affiché ; s'il est affiché, il sera caché. Voir l'API Popover pour plus de détails. C'est équivalent à la valeur toggle pour l'attribut popovertargetaction, et fournit aussi un équivalent déclaratif à l'appel de la méthode HTMLElement.togglePopover() sur l'élément contextuel flottant.
Valeurs personnaliséesCet attribut peut représenter des valeurs personnalisées préfixées par deux tirets (--). Les boutons avec une valeur personnalisée déclencheront un CommandEvent sur l'élément contrôlé.
commandforTransforme un élément <button> en bouton de commande, contrôlant un élément interactif donné en émettant la commande définie dans l'attribut command du bouton. L'attribut commandfor prend comme valeur l'identifiant de l'élément à contrôler. Il s'agit d'une version plus générale de popovertarget.
disabledCet attribut booléen empêche l'utilisateur·ice d'interagir avec le bouton : il ne peut pas être pressé ni sélectionné.
formL'élément <form> auquel associer le bouton (son propriétaire de formulaire). La valeur de cet attribut doit être l'identifiant (id) d'un <form> dans le même document. (Si cet attribut n'est pas défini, le <button> est associé à son ancêtre <form>, s'il existe.)
Cet attribut permet d'associer des éléments <button> à des <form> n'importe où dans le document, pas seulement à l'intérieur d'un <form>. Il peut aussi remplacer un élément <form> ancêtre.
formactionL'URL qui traite les informations soumises par le bouton. Remplace l'attribut action du propriétaire du formulaire du bouton. Ne fait rien s'il n'y a pas de propriétaire de formulaire.
formenctypeSi le bouton est un bouton de soumission (il est à l'intérieur ou associé à un <form> et n'a pas type="button"), définit la façon dont les données du formulaire sont encodées lors de la soumission. Valeurs possibles :
Si cet attribut est défini, il remplace l'attribut enctype du formulaire rattaché au bouton.
formmethodLorsque l'attribut type possède la valeur submit (explicitement ou comme valeur par défaut), cet attribut définit la méthode HTTP qui sera utilisée pour envoyer les données au serveur. C'est un attribut à valeur contrainte qui peut prendre les valeurs suivantes :
S'il est défini, cet attribut remplace l'attribut method du formulaire rattaché au bouton.
formnovalidateSi le bouton est un bouton de soumission, cet attribut booléen indique que le formulaire ne doit pas être validé lors de sa soumission. Si cet attribut est défini, il remplace l'attribut novalidate du propriétaire du formulaire du bouton.
Cet attribut est également disponible sur les éléments <input type="image"> et <input type="submit">.
formtargetLorsque l'attribut type possède la valeur submit, cet attribut indique le contexte de navigation (onglet, fenêtre, frame) associé avec le formulaire, sa cible. Outre un attribut id valide du document, il peut prendre l'une de ces valeurs particulières:
Définit l'élément <button> comme un invocateur d'intérêt (interest invoker). Sa valeur est l'id de l'élément cible, qui sera affecté d'une manière ou d'une autre (généralement affiché ou masqué) lorsque l'intérêt est montré ou perdu sur l'élément invocateur (par exemple au survol/fin de survol ou à la sélection/perte de sélection). Voir Utilisation des invocateurs d'intérêt pour plus de détails et d'exemples.
nameLe nom du bouton, soumis en tant que paire avec la valeur (value) du bouton comme partie des données du formulaire.
popovertargetTransforme un <button> en un élément de contrôle d'un élément contextuel flottant (popover en anglais) ; il prend comme valeur id de l'élément élément contextuel flottant à contrôler. Voir la page sur l'API Popover pour plus de détails.
popovertargetactionDéfinit l'action à effectuer sur l'élément contextuel flottant (popover en anglais) cible lorsqu'un bouton est activé. Les valeurs possibles sont :
"hide"Le bouton masquera l'élément contextuel flottant cible. Si l'élément contextuel flottant cible est déjà masqué, rien ne se passera.
"show"Le bouton affichera l'élément contextuel flottant cible. Si l'élément contextuel flottant cible est déjà affiché, rien ne se passera.
"toggle"Le bouton affichera l'élément contextuel flottant cible s'il est masqué, ou le masquera s'il est affiché. Si popovertargetaction n'est pas défini, le bouton se comportera comme s'il avait la valeur "toggle".
typeLe comportement par défaut du bouton. Les valeurs possibles sont :
Définit la valeur associée au name du bouton lorsqu'il est soumis avec les données du formulaire. Cette valeur est transmise au serveur en paramètres lorsque le formulaire est soumis. Lorsqu'il est utilisé avec les commandes close ou request-close, l'attribut value définit le returnValue de l'élément <dialog> contrôlé.
Un bouton de soumission avec l'attribut formaction défini, mais sans formulaire associé ne fait rien. Vous devez définir un formulaire rattaché, soit en l'enveloppant dans un <form>, soit en définissant la valeur de l'attribut form avec l'identifiant du formulaire.
Les éléments <button> sont beaucoup plus faciles à mettre en forme que les éléments <input>. Vous pouvez ajouter du contenu HTML interne (pensez à <i>, <br>, ou même <img>), et utiliser les pseudo-éléments ::after et ::before pour un rendu complexe.
Si vos boutons ne servent pas à soumettre des données de formulaire à un serveur, assurez-vous de définir leur attribut type à button. Sinon, ils tenteront de soumettre des données de formulaire et de charger la réponse (inexistante), détruisant éventuellement l'état actuel du document.
Bien que <button type="button"> n'ait pas de comportement par défaut, on peut utiliser des gestionnaires d'évènements scriptés pour déclencher certaines actions. Un bouton pourra déclencher des actions grâce à JavaScript, par exemple pour retirer un élément d'une liste.
Par défaut, les agents utilisateurs appliquent le style display: flow-root aux boutons, ce qui établit un contexte de formatage de bloc et centre les enfants du bouton horizontalement et verticalement tant qu'ils ne débordent pas. Si le bouton est défini comme conteneur flex ou grid, ses enfants se comporteront comme des éléments flex ou grid. Un bouton avec display: inline sera stylisé comme si la valeur était display: inline-block.
Les boutons qui reposent uniquement sur une icône pour représenter une fonctionnalité n'ont pas de nom accessible. Un nom accessible permet à un outil d'assistance (un lecteur d'écran par exemple) de générer un arbre d'accessibilité correct lors de l'analyse du document. Les outils d'assistance utilisent cet arbre d'accessibilité pour permettre aux utilisateur·ice·s de naviguer et d'utiliser le contenu de la page.
Pour fournir un nom accessible à un bouton icône, il faut placer un texte dans l'élément <button> qui décrit de façon concise la fonctionnalité offerte par le bouton.
Si vous souhaitez masquer visuellement le texte du bouton, il existe une méthode accessible qui consiste à utiliser une combinaison de propriétés CSS (angl.) pour le retirer visuellement de l'écran tout en le laissant accessible aux technologies d'assistance.
Cependant, il est important de noter que laisser le texte du bouton visible peut aider les personnes qui ne sont pas familières avec la signification de l'icône ou qui ne comprennent pas la fonction du bouton. Cela est particulièrement important pour les personnes peu technophiles ou dont la culture apporte une autre interprétation à l'icône utilisée.
Les éléments interactifs tels que les boutons doivent fournir une surface suffisamment grande pour qu'il soit facile de les activer. Cela facilitera la tâche à une variété de personnes : celles qui ont des problèmes moteurs, celles qui utilisent des dispositifs de pointage peu précis (doigt ou stylet). La taille interactive minimale recommandée est de 44×44 pixels CSS.
De grandes quantités de contenu interactif — y compris les boutons — placées à proximité visuelle les unes des autres doivent être séparées par de l'espace. Cet espacement est bénéfique pour les personnes ayant des problèmes de contrôle moteur, qui pourraient activer accidentellement le mauvais contenu interactif.
L'espacement peut être créé à l'aide de propriétés CSS telles que margin.
Pour décrire l'état d'un bouton, l'attribut ARIA correct à utiliser est aria-pressed et non aria-checked ou aria-selected. Pour en savoir plus, lisez les informations sur le rôle ARIA de bouton.
Il est préférable de ne pas surcharger l'anneau de sélection par défaut pour les éléments qui reçoivent la sélection. Si les styles de bouton sont modifiés, il est important de s'assurer que l'état de sélection présente un contraste suffisant pour que les personnes malvoyantes puissent le percevoir et que les personnes ayant des différences cognitives puissent le comprendre.
La pseudo-classe :focus-visible peut être utilisée pour appliquer des styles à un élément qui a :focus uniquement lorsque les heuristiques de l'agent utilisateur déterminent que le focus doit être mis en évidence, par exemple lorsqu'un <button> reçoit le focus au clavier. Voir :focus contre :focus-visible pour plus d'informations.
Le ratio de contraste des couleurs est déterminé en comparant la luminosité des valeurs de couleur du texte du bouton et de l'arrière-plan avec l'arrière-plan sur lequel le bouton est placé. Pour respecter les Règles pour l'accessibilité des contenus Web (WCAG) (angl.), un ratio de 4,5:1 est requis pour le contenu textuel et de 3:1 pour les grands textes. (Un grand texte est défini comme un texte de 18,66px et bold ou plus, ou de 24px ou plus.)
Le fait de cliquer sur un <button> ou sur un bouton <input> peut, selon le navigateur et l'OS, lui donner la sélection par défaut. La plupart des navigateurs donnent la sélection à un bouton cliqué, mais Safari ne le fait pas, par conception (angl.).
Cet exemple crée un bouton cliquable. L'attribut type="button" garantit que le bouton n'a pas de comportement par défaut. Vous pouvez rendre ce bouton interactif en utilisant JavaScript ou des attributs comme command et commandfor.
La boîte de dialogue dans cet exemple comporte deux boutons radio qui contrôlent la possibilité de fermer ou non la boîte de dialogue. Sélectionnez Oui ou Non, puis cliquez sur Demander la fermeture pour tenter de fermer la boîte de dialogue. Si Oui est sélectionné, la boîte de dialogue se ferme ; si Non est sélectionné, la boîte de dialogue reste ouverte et affiche un message à la place.
Le bouton Ouvrir la boîte de dialogue ouvre l'élément <dialog> en utilisant command="show-modal".
Le bouton Demander la fermeture a command="request-close", qui cible l'élément <dialog> en utilisant l'attribut commandfor="mydialog". Lorsqu'il est cliqué, il demande au <dialog> s'il peut être fermé (contrairement à l'attribut command="close", qui fermerait immédiatement le <dialog>). Cela vérifie si le <dialog> est cancelable en utilisant un événement cancel.
Lorsque l'événement est cancelable, la valeur des boutons radio est vérifiée :
Cet exemple montre comment utiliser l'attribut value d'un bouton avec la commande close pour remplir la propriété returnValue d'un dialogue.
Lorsque le bouton Annuler ou Supprimer est cliqué, le dialogue se ferme et définit sa returnValue sur l'attribut value du bouton. Le gestionnaire d'évènements close vérifie dialog.returnValue pour déterminer quelle action l'utilisateur a choisie et affiche le résultat à l'écran.
Le HTML définit d'abord un bouton Supprimer l'enregistrement qui utilise l'attribut commandfor pour définir le dialogue à ouvrir.
Dans le dialogue, les boutons Annuler et Supprimer utilisent l'attribut commandfor pour indiquer qu'ils s'appliquent au dialogue actuel. Ils définissent également l'attribut command sur "close" et l'attribut value sur "cancel" et "delete" respectivement — la valeur du bouton sélectionné est automatiquement copiée dans la propriété returnValue du dialogue lorsque le bouton est cliqué.
The code uses a close event listener to log the dialog's returnValue.
| Contenu de flux, contenu phrasé, contenu interactif, listable, étiquetable, soumettable, associé aux formulaires et contenu tangible. |
| Contenu phrasé mais sans contenu interactif. |
| Aucune omission de balise possible. |
| Tout élément acceptant du contenu phrasé. |
| button |
| checkbox, combobox, link, menuitem, menuitemcheckbox, menuitemradio, option, radio, switch, tab |
| HTMLButtonElement |
| HTML # the-button-element |
Activez JavaScript pour afficher ce tableau de compatibilité des navigateurs.
Cette page a été modifiée le 25 avr. 2026 par les contributeur·ice·s du MDN.
Votre modèle pour un internet meilleur.
Visitez la société mère à but non lucratif de Mozilla Corporation, la Fondation Mozilla.
Certaines parties de ce contenu sont protégées par le droit d'auteur ©1998—2026 des contributeurs individuels de mozilla.org. Contenu disponible sous une licence Creative Commons.