Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015年7月.
* Some parts of this feature may have varying levels of support.
<button> は HTML の要素で、マウス、キーボード、指、音声コマンド、その他の支援技術で起動することができる操作可能要素です。起動すると、フォームを送信したりダイアログを開いたりといった操作を実行します。
デフォルトでは、HTML のボタンはユーザーエージェントが実行されているホストのプラットフォームのスタイルと似ていますが、 CSS を使用してボタンの外見を変更することができます。
この要素にはグローバル属性があります。
autofocus論理属性で、ページ読み込み時にこのボタンが入力フォーカスを持つべきであることを指定します。この属性を設定することができるのは、文書中の要素一つだけです。
command制御ボタンの <button> によって制御される、 commandfor 属性で指定した要素に対して実行するアクションを指定します。実現可能な値は次のとおりです。
"show-modal"このボタンは、 <dialog> をモーダルとして表示させます。ダイアログがすでにモーダルである場合は、何もしません。これは、 HTMLDialogElement.showModal() メソッドを <dialog> 要素で呼び出すことと同じ意味の宣言的な方法です。
"close"このボタンは、 <dialog> 要素を閉じます。 ダイアログがすでに閉じられている場合、何もしません。 これは、 HTMLDialogElement.close() メソッドを <dialog> 要素で呼び出すことと同じ意味の宣言的な方法です。 value 属性を指定した場合、ボタンの値はダイアログの returnValue プロパティとして渡されます。
"request-close"このボタンは、 cancel イベントを <dialog> 要素上で発行し、ブラウザーにダイアログを閉じるよう要求し、続いて close イベントを発行します。 これは close コマンドとは異なり、作成者は Event.preventDefault() を cancel イベントに対して呼び出すことで <dialog> が閉じるのを防ぐことができます。 ダイアログが既に閉じられている場合は、何も行われません。 これは、 HTMLDialogElement.requestClose() メソッドを <dialog> 要素に対して呼び出すことと同等の宣言的な方法です。 ボタンの value 属性を指定した場合、その値がダイアログの returnValue プロパティとして渡されます。
"show-popover"このボタンは、非表示のポップオーバーを表示します。すでに表示されているポップオーバーを表示しようとすると、何もしません。詳細については、ポップオーバー API を参照してください。これは、 show の値を popovertargetaction 属性に設定することに相当し、ポップオーバー要素に対して HTMLElement.showPopover() メソッドを呼び出すことと同じ意味の宣言的な方法です。
"hide-popover"このボタンは、表示されているポップオーバーを非表示にします。すでに非表示になっているポップオーバーを非表示にしようとすると、何もしません。詳細については、ポップオーバー API を参照してください。これは、 hide の値を popovertargetaction 属性に設定することに相当し、ポップオーバー要素で HTMLElement.hidePopover() メソッドを呼び出すことと同じ意味の宣言的な方法です。
"toggle-popover"このボタンは、ポップオーバーの表示と非表示を切り替えます。ポップオーバーが非表示の場合は表示され、ポップオーバーが表示されている場合は非表示になります。詳細については、ポップオーバー API を参照してください。これは、 toggle の値を popovertargetaction 属性に設定することに相当し、ポップオーバー要素で HTMLElement.togglePopover() メソッドを呼び出すことと同じ意味の宣言的な方法です。
カスタム値この属性は、 2 つのハイフン文字 (--) を接頭辞として付加したカスタム値を表します。カスタム値を持つボタンは、制御される要素で CommandEvent を配信します。
commandfor<button> 要素をコマンドボタンに変換し、ボタンに指定された command 属性で定義されたコマンドを発行することで、指定された対話要素を制御します。 commandfor 属性は、制御対象となる要素の ID を値として取ります。これは popovertarget のより汎用的なバージョンです。
disabledこれは論理属性で、ユーザーがボタンを操作することを抑止します。押したりフォーカスを受けたりすることができなくなります。
formボタンに関連付けられた <form> 要素(フォームオーナー)です。この属性の値は、同一文書内の <form> 要素の id 属性と同一でなければなりません。(この属性を設定しなかった場合、 <button> は祖先に <form> 要素が存在すれば、その要素に関連付けられます。)
この属性によって <button> 要素が <form> の中になくても、同一文書内にある任意の <form> 要素に関連付けることが可能になりました。また、祖先の <form> 要素を上書きすることができます。
formactionこのボタンによって送信された情報を処理する URL です。このボタンのフォームオーナーの action 属性よりも優先されます。フォームオーナーがない場合は何もしません。
formenctypeこのボタンが送信ボタンである場合(<form> の中にあるか関連付けられており、 type="button" が設定されていない場合)、送信されるフォームデータのエンコード方法を指定します。指定可能な値は以下の通りです。
この属性が指定された場合、そのボタンのフォームオーナーの enctype 属性より優先されます。
formmethodこのボタンが送信ボタンである場合(<form> の中にあるか関連付けられており、 type="button" が設定されていない場合)、この属性はこのフォームを送信するのに使用される HTTP メソッドを指定します。指定可能な値は以下の通りです。
指定された場合、この属性はボタンのフォームオーナーの method 属性より優先して使用されます。
formnovalidate論理属性で、ボタンが送信ボタンである場合に、フォームデータ送信時に内容を検証しないように指定するものです。この属性が指定された場合、ボタンの属するフォームオーナーの novalidate 属性より優先して使用されます。
この属性は <input type="image"> および <input type="submit"> 要素でも使用できます。
formtargetボタンが送信ボタンである場合、フォームの送信後に受信するレスポンスを表示する場所を示すユーザー定義の名前、もしくはアンダースコアから始まる標準化されたキーワードです。これは、閲覧コンテキスト(タブ、ウィンドウ、<iframe>)の name またはそれを表すキーワードです。この属性が指定された場合、ボタンのフォームオーナーの target 属性より優先されます。以下のキーワードは特別な意味を持ちます。
この <button> 要素を関心インボーカーとして定義します。その値は対象要素の id であり、インボーカー要素に対して関心が向けられたり失われたりした際(例えば、ホバーやホバー解除、フォーカスやフォーカス解除など)、この対象要素に何らかの影響(通常は表示または非表示)が及ぶようになります。詳細や例については、関心インボーカーの使用をご覧ください。
nameこのボタンの名前で、フォームデータの一部としてこのボタンの value との組み合わせで送信されます。
popovertarget<button> 要素をポップオーバーの制御ボタンに変換します。制御するポップオーバー要素の ID を値として受け取ります。 popovertarget 属性を指定してポップオーバーとその呼び出し元ボタンとの関連付けを設定すると、2 つの有益な効果が追加されます。
制御用 <button> によって制御されているポップオーバー要素に対して実行される動作を指定します。使用可能な値は以下の通りです。
"hide"このボタンは、表示されているポップオーバーを非表示にします。非表示になっているポップオーバーを非表示にしようとした場合、何も行われません。
"show"このボタンは、非表示のポップオーバーを表示します。すでに表示されているポップオーバーを表示しようとしても、何の動作も起こりません。
"toggle"ポップオーバーの表示・非表示を切り替えるボタンです。ポップオーバーが非表示の場合は表示され、ポップオーバーが表示されている場合は非表示になります。popovertargetaction が省略された場合、"toggle" がこのコントロールボタンによって実行されるデフォルトの動作です。
typeこのボタンのデフォルトの動作です。以下の値が指定可能です。
フォームのデータと一緒に送信される際に、ボタンの name に結び付けられる値を定義します。 この値は、フォームに送信する際にサーバーに引数として渡されます。 close または request-close コマンドで使用した場合、value 属性は、制御対象の <dialog> 要素の returnValue を設定します。
送信ボタンに formaction 属性が設定されていても、関連付けられたフォームがない場合は何もしません。ボタンを <form> で囲むか、 form でフォームの id を設定するかしてフォームオーナーを設定する必要があります。
<button> 要素は <input> 要素よりもずっと簡単にスタイル付けできます。内部に HTML コンテンツを(<i>、 <br> や <img> さえも)追加できますし、複雑な描画のために ::after や ::before 擬似要素を使用することもできます。
ボタンがサーバーにデータを送信するためのものでない場合は、 type 属性を button に設定することを忘れないでください。さもないと、フォームデータを送信して(存在しない)レスポンスを読み込み、文書の現在の状態を破棄してしまうおそれがあります。
<button type="button"> にはデフォルトの動作がありませんが、イベントハンドラーを記述して動作を起動することができます。起動されたボタンは JavaScript を用いてプログラム可能なアクションを実行することができます。例えばアイテムをリストから削除するなどです。
デフォルトでは、ユーザーエージェントはボタンを display: flow-root としてスタイル設定します。これにより、新しいブロック整形コンテキストが確立され、ボタンがオーバーフローしない限り、ボタンの中の子要素が水平方向と垂直方向の両方で中央に配置されます。ボタンがフレックスまたはグリッドコンテナーとして定義されている場合、子要素はフレックスまたはグリッドアイテムとして動作します。 display: inline に設定されたボタンは、値が display: inline-block に設定されているかのようにスタイル設定されます。
アイコンのみを使って機能を表現するボタンは、アクセシブル名を持ちません。アクセシブル名はスクリーンリーダーのような支援技術で文書を解析し、アクセシビリティツリーを生成するときに、アクセスするためのプログラム的なフックを提供します。そのため、支援技術や移動やページコンテンツの操作にアクセシビリティツリーを使用します。
アイコンボタンにアクセシブル名を与えるには、 <button> 要素でボタンの機能を簡潔に説明するテキスト文字列を提供してください。
ボタンのテキストを、アクセス可能な方法で視覚的に隠したい場合は、CSS プロパティの組み合わせを使用して画面から削除し、支援技術からは解析可能のままにします。
しかし、ボタンのテキストを視覚的に見えるようにしておけば、アイコンの意味に慣れていない人がボタンの目的を理解できるようになります。これは特に、技術的に慣れていない人や、アイコンボタンが使用するアイコンの文化的解釈が異なる人に適しています。
ボタンなどの操作可能な要素は、容易にアクティブ化させることができるだけの大きさで提供するようにしてください。これは、動きが不自由な人、スタイラスや指のような正確性の低い形の入力を使用している人など、様々な人に役立ちます。44×44 CSS ピクセル以上の操作のための大きさが推奨されています。
たくさんの操作可能なコンテンツ — ボタンを含む — が互いに視覚的に接近して配置されるときは、それを隔てるために間隔を置いてください。間隔を置くことは、動きが不自由で誤った操作可能なコンテンツを有効化してしまうことがある人にとって有益です。
間隔は margin などの CSS プロパティを使用して作成することができます。
ボタンの状態を記述するために使用する正しい ARIA 属性は aria-pressed であり、aria-checked や aria-selected ではありません。詳しくは、 ARIA button ロールについての情報をご覧ください。
フォーカスを持つ要素のデフォルトのフォーカスリングは上書きしないことが望ましいです。ボタンスタイルが上書きされる場合、視覚障碍のあるユーザーが認識でき、認知能力に違いのあるユーザーも理解できるように、フォーカス状態のコントラストが十分であることを保証することが重要です。
:focus-visible 擬似クラスを使用すると、ユーザーエージェントのヒューリスティックがフォーカスを強調表示すべきであると判断した場合(たとえば、<button> がキーボードのフォーカスを受け取った場合など)にのみ、 :focus を保有する要素にスタイルを適用することができます。詳細については、:focus と :focus-visible を参照してください。
色のコントラスト比は、テキスト及び背景色の明度の値を比較することで決定されます。現在のウェブコンテンツアクセシビリティガイドライン (Web Content Accessibility Guidelines, WCAG) によれば、文字列コンテンツで 4.5:1 以上、大きめの文字列で 3:1 以上のコントラスト比が求められています。 (大きめの文字列とは、 bold の 18.66px 以上、または 24px 以上と定義されています。)
<button> や <input> のボタン型をクリックしたときに(デフォルトで)フォーカスを得るかは、ブラウザーおよび OS により異なります。多くのブラウザーはクリックされているボタンにフォーカスを与えますが、Safari は設計上そうなりません。
この例では、クリック可能なボタンを作成します。 type="button" 属性により、ボタンにデフォルトの動作が設定されないようになります。 JavaScript や command、commandfor などの属性を使用することで、このボタンを操作可能にすることができます。
この例では、ダイアログを閉じることができるかどうかを制御する2つのラジオボタンがあります。 はいまたはいいえを選択し、閉じるをクリックして、ダイアログを閉じようとしてみてください。 はいが選択された場合、ダイアログは閉じられます。いいえが選択された場合、ダイアログは開いたままになり、代わりにメッセージが表示されます。
ダイアログを開く ボタンを押すと、<dialog> 要素を command="show-modal" で開きます。
閉じるリクエスト ボタンには command="request-close" が設定されており、commandfor="mydialog" 属性でこの <dialog> 要素を対象にしています。クリックされると、 クリックされると、<dialog> に閉じることができるか問い合わせます(<dialog> を即座に閉じる command="close" 属性とは異なります)。 これは、<dialog> が cancel イベントを使用して cancelable であるかどうかを調べます。
イベントが cancelable である場合、ラジオボタンの値が調べられます。
この例では、ボタンの value 属性に close コマンドをつけて、ダイアログの returnValue プロパティの値を設定する方法を示しています。
キャンセル または 削除 ボタンがクリックされると、ダイアログが閉じられ、その returnValue がボタンの value 属性に設定されます。 close イベントのリスナーは、dialog.returnValue を調べ、ユーザーがどの操作を選択したかを判断し、その結果を画面にログ出力します。
HTML ではまず、commandfor 属性を使用して開くためのダイアログを指定するレコードを削除ボタンを定義します。
ダイアログ内のキャンセルおよび削除ボタンでは、commandfor 属性を使用して、それらが現在のダイアログに適用されることを示します。 同時に、command 属性を "close" に設定し、value 属性をそれぞれ "cancel" および "delete" に設定します。ボタンがクリックされると、選択されたボタンの値が自動的にダイアログの returnValue にコピーされます。
このコードでは、close イベントリスナーを使用して、ダイアログの returnValue をログ出力します。
| フローコンテンツ、 記述コンテンツ、 対話型コンテンツ、 リスト化、 ラベル付け可能、 送信可能 な フォーム関連要素、知覚可能コンテンツ |
| 記述コンテンツ、但し対話型コンテンツがあってはならない。この <button> がカスタマイズ可能な select 要素の最初の子である場合、0 個または 1 個の <selectedcontent> 要素も含むことができる。 |
| なし。開始タグと終了タグの両方が必須です。 |
| 記述コンテンツを受け入れるすべての要素。 |
| button |
| checkbox, combobox, link, menuitem, menuitemcheckbox, menuitemradio, option, radio, switch, tab |
| HTMLButtonElement |
| HTML # the-button-element |
Enable JavaScript to view this browser compatibility table.
This page was last modified on 2026年5月6日 by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.