<button>要素
Technical Summary
button要素は、その子孫の内容をlabelとするボタンを表します。Flow content、phrasing content、interactive contentに属し、listed・labelable・submittableなform-associated elementでもあります。
typeはenumerated attributeです。submit、reset、buttonの状態を選び、値がない場合または無効な値の場合はAuto状態になります。Auto状態は、command / commandforや親要素などの条件とともにsubmit buttonかどうかを決めます。
Definition / Categories
| 項目 | 仕様上の整理 | 確認点 |
|---|---|---|
| 意味 | 子孫の内容をlabelとするbutton | テキスト・画像・その他のphrasing contentで目的を伝える |
| Category | flow、phrasing、interactive、palpable | フォーム関連のcategoryは下記のform-associated列で確認する |
| Form-associated | listed、labelable、submittable、autocapitalize-and-autocorrect inheriting | form owner、送信対象、labelとの関係を分けて扱う |
| Interface | HTMLButtonElement | type、form、validity、labelsなどのIDL APIを持つ |
Structure / Content model
通常のbuttonのcontent modelはphrasing contentですが、interactive contentの子孫や、tabindex属性を指定した子孫を含められません。ボタンの中に別のボタンやリンクを入れる構造は、意味上の重複した操作対象を作ります。
<!-- 子孫に別の操作対象を入れない -->
<button type="button">
<span>メニューを開く</span>
</button>
現在のHTML Standardには、selectの最初の子として使われるbuttonとselectedcontentに関する特別な規則もあります。通常のページ上のbuttonと同じ前提で一括りにしないことが重要です。
type状態とsubmit button判定
| Keyword | State | 主な処理 |
|---|---|---|
submit | Submit Button | form ownerのform submissionを開始する |
reset | Reset Button | form ownerをresetする |
button | Button | 通常のform submit/resetを選ばず、ページ上の操作に使う |
| 省略・無効値 | Auto | command / commandfor、親がselectかどうか、submit条件と合わせて判定する |
仕様上のsubmit button判定は、単純な「typeがないなら常にsubmit」という説明では不十分です。Auto状態でcommandとcommandforがなく、親がselectでない場合など、条件を合わせて確認します。
Activation behavior
buttonのactivation behaviorは、まずdisabled状態とdocumentのactive状態を確認します。form ownerがある場合、submit buttonならformをsubmitし、Reset Buttonならformをresetします。Auto状態で処理が残る場合は、commandforの対象とcommandに関する処理へ進みます。
if button is disabled:
return
if button has a form owner:
if button is a submit button:
submit the form
return
if button is in the Reset Button state:
reset the form
return
process commandfor / command or popover targeting
このモデルでは、すべてのbuttonを「クリックイベントにJavaScriptを付けるだけの要素」として扱いません。フォーム、disabled、command、popoverなどがactivationの分岐になります。
Form association / Submission
form属性はbuttonとform ownerを明示的に関連付けます。nameはフォーム送信とform.elements APIで使う名前を表し、valueは送信時の値を表します。ただし、buttonとそのvalueは、そのbutton自身が送信を開始した場合にだけform submissionへ含まれます。
| 属性 | 適用範囲 | 境界 |
|---|---|---|
form | form ownerの明示的な関連付け | buttonをformの外に置く構造と関係する |
formaction / formmethod | 送信先URL・methodの上書き | submit buttonでない場合は指定しない |
formnovalidate | そのsubmit操作でconstraint validationを回避 | フォーム全体の検証仕様とは別に扱う |
disabled | コントロールを非対話化し、valueの送信を防ぐ | 見た目の無効化だけでなくactivationと送信に影響する |
Commands / Popover boundary
button要素はcommandを定義できます。commandforで同じtree内の対象要素を指定し、commandでpopoverの表示・非表示やdialogのcloseなど、仕様で定義された操作を選べます。--で始まるcustom commandは、対象要素へcommand eventを配送するための拡張点です。
<button type="button"
commandfor="help-popover"
command="show-popover">
ヘルプを表示
</button>
<div id="help-popover" popover>ヘルプ本文</div>
この領域はbutton単体の説明だけで完結せず、popover、dialog、CommandEvent、target側のcommand stepsとのCross-Spec関係を含みます。
DOM Interface
button要素はHTMLButtonElementとして公開されます。type、disabled、form、name、valueに加え、willValidate、validity、validationMessage、checkValidity()、reportValidity()、setCustomValidity()、labelsなどが関係します。
const button = document.querySelector('button');
button.type;
button.form;
button.disabled;
button.labels;
button.checkValidity();
Fact / Evidence(主張 / 根拠)
主要Factを、適用条件・確認状態・仕様上の根拠位置と対応付けています。未完了の範囲は下のCoverage / Open Issuesに残しています。
| 種別 | Fact / 主張 | 条件・範囲 | 状態 | 根拠 |
|---|---|---|---|---|
| SPEC | buttonは子孫の内容をlabelとするbuttonを表します。 | HTMLのbutton elementとして処理される場合。 | 確認済み | HTML Standard: the button element |
| SPEC | typeはsubmit、reset、buttonの状態を選び、省略・無効値はAuto状態になります。 | typeがenumerated attributeとして評価される場合。 | 確認済み | HTML Standard: type states |
| SPEC | buttonのcontent modelではinteractive contentの子孫を許可しません。 | 通常のbutton content model。select内の特別な分岐は別途考慮。 | 確認済み | HTML Standard: content model |
| SPEC | disabledなbuttonのactivationは停止し、submit/resetはform ownerとtype状態に応じて分岐します。 | activation behaviorが実行される場合。 | 確認済み | HTML Standard: button activation behavior |
| SPEC | buttonのvalueは、そのbuttonが送信を開始した場合にform submissionへ含まれます。 | buttonにform ownerがあり、そのbuttonがsubmitterである場合。 | 確認済み | HTML Standard: value and form submission |
| SPEC | command / commandforはpopoverやdialogなどのtargetに対するcommand処理と関係します。 | 対象要素、command state、target側のcommand stepsが適用される場合。 | 確認済み | HTML Standard: button commands |
Evidence
- HTML Standard: The button element — categories、content model、type、form attributes、activation behavior、DOM interface
- HTML Standard: Using the button element to define a command — commandのlabel、disabled state、action
- HTML Standard: Implicit submission — formのdefault buttonと暗黙送信
- HTML Standard: Form submission algorithm — submitterとform submissionの処理境界
Implementation Evidence
仕様上の主張とは別に、ブラウザー実装・WPT・アクセシビリティ観測を記録します。未実施の項目は確認済みとは扱いません。
共通fixture / 記録: <form id="evidence-form" method="get">内に、type省略のinput、for/idによる明示関連、label内inputの暗黙関連、required、disabled、submitとtype省略のbuttonを配置しました。環境: Chrome 152.0.0.0(Windows NT 10.0) / 確認日 2026-09-12。
| 種別 | 再現確認の範囲 | 記録する条件 | 状態 |
|---|---|---|---|
| IMPL | typeの既定値、form owner、disabled state | 共通fixtureをChrome 152.0.0.0 / Windows NT 10.0で確認。type="submit"とtype省略のbuttonはともにsubmit、submit buttonのform ownerはevidence-form、disabled buttonは:disabledに一致しました。 | 確認済み(Chrome 1台) |
| WPT | button state、validation、activation、eventsに関係するテストとの対応 | 対応候補: button-type.html、button-labels.html、button-validation.html、button-events.html。2026-09-15 / Chrome 152.0.0.0 / Windows NT 10.0 / wpt.liveで4件を実行し18/18 pass。選定外のWPTと他ブラウザーは未評価 | 部分実行(18/18 pass) |
| AAM | button role、accessible name、disabled stateのブラウザーAX観測 | 同じfixtureのAccessibility treeで、SaveとDefault submitがbutton roleと名前付きで表示され、Disabled saveはdisabled状態で表示されました。 | 観測済み(Chrome AX) |
WPTの対応付けにはWPTリポジトリ、アクセシビリティの基準にはHTML-AAMを参照します。
Coverage / Open Issues
- 確認済みbuttonの意味、category、content model、type状態、基本的なactivation、form association、主要DOM API
- 確認済みcommand / commandforとpopover・dialogに関する仕様上の入口
- 未完了form submission algorithm全体、successful controls、entry list、implicit submissionの全分岐
- 未完了HTML-AAM、platform accessibility mapping、支援技術ごとの観測
- 未完了ブラウザー別実装結果、WPT、歴史的変更、互換性データ、Expert-gap Review
このページは初期Coverageです。確認済みの範囲を示すものであり、button要素全体の検証完了や、すべての実装差の解消を主張しません。
Related surface
初心者向けのtypeの選び方、フォーム例、リンクとの使い分けはYugienのbutton要素ページを参照してください。dialogを開閉するbuttonとの関係はAtlasのdialog要素、リンクの条件とactivation behaviorはAtlasのa要素、フォームコントロールのtype状態はAtlasのinput要素で確認できます。