Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【HTML Living Standard】autofocus属性の使い方

autofocus属性の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

autofocusプロパティは、ページの読み込み時やダイアログが表示された際に、特定のHTML要素に自動的にフォーカスを当てるかどうかを制御する真偽値の属性値を保持するプロパティです。フォーカスとは、キーボード入力や操作の対象となる状態を指します。

このプロパティを要素に設定すると、ユーザーがウェブページを開いた直後や、dialog要素によってモーダルウィンドウなどが表示された瞬間に、指定した入力フィールドやボタンなどの操作可能な要素に自動的にカーソルが移動します。これにより、ユーザーはすぐに目的の入力や操作を始められ、フォーム利用の利便性が向上します。例えば、検索サイトの検索ボックスやログインフォームのユーザー名入力欄にこのプロパティを設定することで、ユーザーはすぐに文字入力を開始できます。

autofocusプロパティは、主にinputselecttextareabutton、そしてdialogといったフォーム関連の要素で利用できます。このプロパティは真偽値属性であるため、属性が存在するだけで有効になり、特定の値を設定する必要はありません。

使用上の注意点として、一つのHTMLドキュメント内でautofocusを設定できる要素は一つだけです。複数の要素に設定した場合、どの要素にフォーカスが当たるかはブラウザの挙動に依存し、予期せぬ結果となる可能性があります。また、自動フォーカスはアクセシビリティの観点から慎重な検討が必要です。ページのスクロールが必要な位置に設定すると、スクリーンリーダー利用者などが初期コンテンツを見逃す原因となる場合があるため、ユーザーエクスペリエンス全体を考慮し、適切に使用することが重要です。

公式リファレンス: HTML autofocus global attribute

構文(syntax)

1<input type="text" autofocus>

引数(parameters)

引数なし

引数はありません

戻り値(return)

戻り値なし

戻り値はありません

サンプルコード

autofocus属性で自動フォーカスする

1<!DOCTYPE html>
2<html lang="ja">
3<head>
4    <meta charset="UTF-8">
5    <meta name="viewport" content="width=device-width, initial-scale=1.0">
6    <title>autofocus属性の基本的な使用例</title>
7</head>
8<body>
9    <h1>フォーム入力フィールドへの自動フォーカス</h1>
10
11    <form>
12        <label for="username">ユーザー名:</label><br>
13        <!-- この入力フィールドはページ読み込み時に自動的にフォーカスされます。 -->
14        <input type="text" id="username" name="username" autofocus><br><br>
15        
16        <label for="email">メールアドレス:</label><br>
17        <!--
18        autofocus属性は、ページ内に複数指定されても、
19        DOMツリーで最初に出現する要素にのみ適用されます。
20        そのため、このフィールドには自動フォーカスされません。
21        -->
22        <input type="email" id="email" name="email" autofocus><br><br>
23        
24        <label for="password">パスワード:</label><br>
25        <input type="password" id="password" name="password"><br><br>
26        
27        <button type="submit">送信</button>
28    </form>
29</body>
30</html>

HTMLのautofocus属性は、ウェブページが読み込まれた際に、特定のフォーム入力フィールドやボタンなどの要素に自動的にフォーカスを当てるためのグローバル属性です。この属性を付与することで、ユーザーはページを開いてすぐにそのフィールドに入力できるようになり、操作の利便性が向上します。

この属性は引数を取らず、また特別な戻り値もありません。単に要素にautofocusと記述するだけで機能します。

提供されたサンプルコードでは、usernameという名前のテキスト入力フィールドにautofocus属性が指定されています。そのため、このHTMLページがブラウザに読み込まれると、自動的に「ユーザー名」の入力フィールドにカーソルが表示され、ユーザーはすぐに文字を入力できる状態になります。

重要な点として、autofocus属性はページ内で複数回指定されても、DOMツリー(文書構造)において最初に出現する要素にのみ適用されます。サンプルコードのemailフィールドにもautofocusが指定されていますが、usernameフィールドが先に存在するため、emailフィールドには自動フォーカスは適用されません。これは「html autofocus not working」といった状況の一般的な原因の一つであり、予期せぬ挙動を避けるために理解しておくべき点です。

この属性は、ユーザーが最初に操作することが期待される入力フィールド(例: 検索フォームの検索ボックス、ログインページのユーザー名フィールドなど)に利用すると非常に効果的です。

autofocus属性は、ページ読み込み時に指定された入力要素へ自動的にフォーカスを合わせる便利な機能です。しかし、この属性はページ内で複数指定されても、DOMツリーで最初に出現する要素にのみ適用されます。そのため、サンプルコードのメールアドレス入力欄のように、後続の要素には自動フォーカスが機能しない点に注意してください。これが「autofocus not working」と感じる主な原因の一つです。

また、自動フォーカスはユーザーの意図しない挙動を引き起こし、アクセシビリティを損なう可能性があります。特に、シングルページアプリケーション(SPA)など、動的にコンテンツがロードされる場合は予期せぬ挙動につながることがあります。ユーザー体験を考慮し、本当に必要な場合にのみ利用を検討し、慎重に使用することが重要ですし、十分なテストを行うことをお勧めします。

HTML autofocus 属性の効かない理由と動作確認

1<!DOCTYPE html>
2<html lang="ja">
3<head>
4    <meta charset="UTF-8">
5    <meta name="viewport" content="width=device-width, initial-scale=1.0">
6    <title>autofocus 属性のサンプル</title>
7    <style>
8        /* フォーム要素間の間隔を確保し、見やすくします */
9        div {
10            margin-bottom: 10px;
11        }
12    </style>
13</head>
14<body>
15    <h1>autofocus 属性の動作確認</h1>
16
17    <form>
18        <div>
19            <label for="username">ユーザー名:</label>
20            <!-- この要素に autofocus 属性が設定されているため、ページ読み込み時にここに自動的にフォーカスされます。 -->
21            <input type="text" id="username" name="username" autofocus>
22        </div>
23
24        <div>
25            <label for="password">パスワード:</label>
26            <!-- 複数の要素に autofocus が設定されている場合、HTMLの仕様により最初の1つだけが有効になります。 -->
27            <!-- そのため、このパスワード入力欄には自動ではフォーカスされません(効かないと感じる原因の一つです)。 -->
28            <input type="password" id="password" name="password" autofocus>
29        </div>
30
31        <div>
32            <label for="email">メールアドレス:</label>
33            <!-- この要素には autofocus 属性がありません。 -->
34            <input type="email" id="email" name="email">
35        </div>
36
37        <div>
38            <label for="message">メッセージ:</label>
39            <!-- textarea 要素も autofocus をサポートしますが、上記理由でこの例ではフォーカスされません。 -->
40            <textarea id="message" name="message" rows="4" autofocus></textarea>
41        </div>
42
43        <div>
44            <!-- button 要素も autofocus をサポートしますが、上記理由でこの例ではフォーカスされません。 -->
45            <button type="submit" autofocus>送信</button>
46        </div>
47    </form>
48
49    <p>
50        <strong>補足:</strong> <code>autofocus</code> 属性は、ユーザーの意図しないフォーカス移動を引き起こし、アクセシビリティを損なう可能性があります。
51        利用には慎重な検討が推奨されます。
52    </p>
53
54</body>
55</html>

HTMLのautofocus属性は、ウェブページが読み込まれた際に、特定のフォーム要素やボタンに自動的にフォーカスを当てるためのグローバル属性です。この属性には引数や戻り値がなく、要素に記述するだけで機能します。これにより、ユーザーはページが表示された直後に、指定された要素への入力を開始したり、操作を行ったりすることができます。

上記のサンプルコードでは、ユーザー名入力欄(id="username"<input>要素)にautofocus属性が設定されています。このHTMLページをブラウザで開くと、ユーザー名入力欄に自動的にカーソルが表示され、すぐに文字入力ができる状態になります。

しかし、パスワード入力欄やメッセージ入力欄、送信ボタンにもautofocus属性が指定されていますが、これらにはフォーカスされません。「autofocusが効かない」と感じる主な原因は、HTMLの仕様により、一つのドキュメント内で最初に記述されたautofocus属性を持つ要素だけが有効になるためです。このルールにより、サンプルではユーザー名入力欄が優先され、それ以降のautofocusは無視されます。

autofocus属性は便利ですが、ユーザーの意図しないフォーカス移動は、特にキーボード操作を行うユーザーやスクリーンリーダーを利用するユーザーにとってアクセシビリティを損なう可能性があります。そのため、利用する際はその影響を慎重に検討し、本当に必要な場合に限定することが推奨されます。

autofocus属性は、ページ読み込み時にフォーム要素へ自動でフォーカスを合わせる機能です。

注意点として、複数の要素にこの属性を設定しても、HTMLドキュメント内で最初に記述された要素のみが有効となります。そのため、2番目以降の要素にはフォーカスが当たらず、「効かない」と感じる原因となります。input要素以外にtextareabutton要素でも利用可能ですが、この「最初の1つのみ有効」というルールは共通です。

また、ユーザーの意図しないフォーカス移動はアクセシビリティを損なう可能性があるため、利用する際はその必要性を慎重に検討し、ユーザー体験への影響を十分に考慮してください。

関連コンテンツ

関連IT用語