アクセシビリティを意識したHTMLフォーム送信ボタンの選び方: <input type="submit"> と <button> の違いとは?
HTMLにおける <input type="submit"> と <button> タグ: 詳細比較とアクセシビリティガイド
HTMLフォームにおいて、ユーザー入力を送信するためのボタンは必須要素です。一般的に <input type="submit">
と <button>
の2つのタグが用いられますが、それぞれ異なる特性とアクセシビリティ上の考慮事項が存在します。本記事では、この2つのタグの詳細な比較と、アクセシビリティを念頭に置いた適切な使い分けについて解説します。
<input type="submit">
タグは、HTMLフォームを送信するための専用ボタンとして設計されています。主な特徴は以下の通りです。
- 送信ボタンとして自動的に認識: ブラウザは
<input type="submit">
タグを自動的に送信ボタンとして認識し、デフォルトの送信動作を実行します。 - シンプルなマークアップ:
<input type="submit">
タグは単独で動作するため、複雑なマークアップを必要としません。 - 古いブラウザとの互換性:
<input type="submit">
タグは古いブラウザを含め、幅広いブラウザでサポートされています。
一方、以下の点に注意する必要があります。
- コンテンツ非表示:
<input type="submit">
タグは内部にコンテンツを含められないため、ボタンのラベルのみが表示されます。 - スタイルの制限: ブラウザデフォルトのスタイルが適用されるため、デザインの自由度が低くなります。
- アクセシビリティ上の懸念: スクリーンリーダーによっては、ボタンの目的が正しく認識されない場合があります。
<button>
タグは、より汎用性の高いボタンとして近年広く利用されています。主な特徴は以下の通りです。
- 柔軟なコンテンツ:
<button>
タグ内部には、テキストだけでなく画像やHTML要素などを含めることができます。 - 高度なスタイル設定: CSSを用いてデザインを自由にカスタマイズすることができます。
- JavaScriptによる操作: JavaScriptを用いて、ボタンクリック時のアクションを詳細に制御できます。
- 明示的な送信属性: フォームを送信するには、
type="submit"
属性を明示的に指定する必要があります。 - アクセシビリティ対策: 適切なラベル付けと、
aria-label
属性の利用が重要になります。
アクセシビリティを考慮した使い分け
アクセシビリティの観点から、以下のガイドラインに従って <input type="submit">
と <button>
タグを使い分けることを推奨します。
- シンプルな送信ボタン: フォーム送信のみを目的としたシンプルなボタンには、
<input type="submit">
タグが適しています。 - コンテンツ豊富なボタン: ボタンにラベルだけでなく画像やアイコンなどを含めたい場合は、
<button>
タグを使用します。 - 高度な操作が必要なボタン: ボタンクリック時にJavaScriptによる複雑な処理を実行する場合は、
<button>
タグが適しています。
その他の考慮事項
- 古いブラウザとの互換性: 古いブラウザとの互換性が重要となる場合は、
<input type="submit">
タグの方が無難です。 - デザインの自由度: デザインの自由度を重視する場合は、
<button>
タグが適しています。 - 開発者の慣習: 開発チーム内で統一されたルールを設け、状況に応じて適切なタグを選択することが重要です。
まとめ
<input type="submit">
と <button>
タグは、それぞれ異なる特性と利点を持っています。アクセシビリティと開発効率のバランスを考慮しながら、それぞれのタグを適切に使い分けることが重要です。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>input type="submit" vs button サンプル</title>
</head>
<body>
<h2>input type="submit"</h2>
<form action="#">
<label for="submit-button">送信</label>
<input type="submit" id="submit-button" value="送信">
</form>
<h2>button type="submit"</h2>
<form action="#">
<label for="button-submit">送信</label>
<button type="submit" id="button-submit">送信</button>
</form>
<h2>button (JavaScriptで送信)</h2>
<form action="#">
<label for="js-button">送信</label>
<button type="button" id="js-button">送信</button>
</form>
<script>
const jsButton = document.getElementById('js-button');
jsButton.addEventListener('click', () => {
alert('送信されました!');
// 実際の送信処理はこのあたりで行う
});
</script>
</body>
</html>
- <input type="submit">: シンプルな送信ボタンです。ブラウザデフォルトのスタイルが適用されます。
- <button type="submit">: コンテンツを含むボタンです。CSSでデザインを自由にカスタマイズできます。
- <button type="button">: JavaScriptで送信処理を行うボタンです。高度な操作に対応できます。
各ボタンの動作を確認し、それぞれの特性を理解することで、状況に応じて適切なボタンを選択することができます。
HTMLフォーム送信における代替手段
JavaScriptによる送信
<button type="button">
タグとJavaScriptを組み合わせることで、ボタンクリック時にフォームを送信することができます。この方法では、ボタンのデザインや動作を自由にカスタマイズできるという利点があります。
<form action="#">
<label for="js-button">送信</label>
<button type="button" id="js-button">送信</button>
</form>
<script>
const jsButton = document.getElementById('js-button');
jsButton.addEventListener('click', () => {
const form = document.querySelector('form');
form.submit(); // フォームを送信
});
</script>
画像による送信
<input type="image">
タグを用いることで、画像をクリックした際にフォームを送信することができます。画像を用いたボタンを作成したい場合に有効な手段です。
<form action="#">
<label for="submit-image">
<img src="submit.png" alt="送信" width="100" height="30">
</label>
<input type="image" id="submit-image" src="submit.png">
</form>
Ajaxによる非同期送信
Ajaxを用いることで、ページをリロードせずに非同期的にフォームを送信することができます。送信処理の軽量化やユーザー体験の向上に効果的です。
<form action="#">
<label for="ajax-button">送信</label>
<button type="button" id="ajax-button">送信</button>
</form>
<script>
const ajaxButton = document.getElementById('ajax-button');
ajaxButton.addEventListener('click', () => {
const form = document.querySelector('form');
const formData = new FormData(form);
const xhr = new XMLHttpRequest();
xhr.open('POST', form.action);
xhr.onload = () => {
if (xhr.status === 200) {
console.log('送信成功!');
} else {
console.error('送信失敗...');
}
};
xhr.send(formData);
});
</script>
その他の方法
上記以外にも、Webサービスやフレームワークによっては、独自の送信方法を提供している場合があります。状況に応じて適切な方法を選択することが重要です。
アクセシビリティの観点
いずれの方法を選択する場合も、アクセシビリティを考慮した設計が重要です。特に、以下のような点に注意する必要があります。
- スクリーンリーダーユーザー向け: ボタンの目的を明確に伝えるために、適切なラベルと
aria-label
属性を設定する必要があります。 - キーボード操作: キーボードのみで操作できるように、すべてのボタンに
tabindex
属性を設定する必要があります。 - 視覚障害者向け: 画像を用いたボタンの場合は、代替テキスト (
alt
属性) を設定する必要があります。
HTMLフォームを送信するには、従来の <input type="submit">
と <button type="submit">
タグ以外にも、様々な方法が存在します。状況や目的に応じて適切な方法を選択し、アクセシビリティにも配慮した設計を心がけることが重要です。
html accessibility w3c