HTML

The <input type="search"> in HTML is a specialized text input field designed to make it easier for users to enter search keywords, with some browsers offering additional features like a clear button to enhance usability.

<input type="search">

HTML5で導入された <input type="search"> は、検索フォームに特化した入力フィールドです。従来の <input type="text"> と同様にテキスト入力が可能ですが、ブラウザによっては検索に適したUI(クリアボタンなど)や、ユーザー体験を向上させるための機能が追加されています。

基本的な使い方

基本構文

<input type="search"> は以下のように記述します。

HTML

<form action="/search" method="get">
	<label for="search-input">検索:</label>
	<input type="search" id="search-input" name="q" placeholder="キーワードを入力">
	<button type="submit">検索</button>
</form>
action属性
検索結果を表示するサーバーサイドのURLを指定します。
method属性
通常はGETメソッドを使用し、検索クエリをURLパラメータとして送信します。
label要素
アクセシビリティ向上のため、ラベルと入力フィールドを関連付けます。
placeholder属性
入力フィールドにヒントテキストを表示し、ユーザーに何を入力すればよいかを示します。

入力値の初期設定

value 属性を用いて、初期値を設定することも可能です。

HTML

<input type="search" id="search-input" name="q" value="初期検索キーワード">

<input type="search"><input type="text"> の違い

ブラウザ固有のUIの違い

クリアボタンの表示
多くのモダンブラウザでは、検索フィールド内に入力内容をすばやくクリアするためのボタンが自動で追加されます。これによりユーザーは手動でテキストを消去する手間が省けます。
入力補助
一部のブラウザは、検索専用のキーボードレイアウトやオートコンプリート機能を提供する場合があります。

ユーザーエクスペリエンスの向上

意味付け
<input type="search"> は、単なるテキスト入力ではなく「検索」という目的を明確に示します。これにより、スクリーンリーダーなどの支援技術は適切な振る舞いを提供できます。

カスタマイズとスタイリング

CSSによるカスタマイズ

<input type="search"> は通常の入力フィールドと同様にCSSでスタイルを調整できます。例えば、クリアボタンをカスタマイズする場合や、フォーカス時のスタイル変更を行うことができます。

CSS

/* 基本スタイル */
input[type="search"] {
	width: 100%;
	padding: 8px;
	border: 1px solid #ccc;
	border-radius: 4px;
}

/* フォーカス時のスタイル */
input[type="search"]:focus {
	outline: none;
	border-color: #66afe9;
	box-shadow: 0 0 5px rgba(102,175,233,0.6);
}

ブラウザ固有のスタイル調整

一部のブラウザはデフォルトで特定のスタイルを付与しているため、リセットCSSやベンダープレフィックスを用いることで一貫した表示を実現することが可能です。

CSS

/* WebKit系ブラウザ向け:検索キャンセルボタンの非表示 */
input[type="search"]::-webkit-search-cancel-button {
	-webkit-appearance: none;
}

JavaScriptとの連携

入力イベントのハンドリング

ユーザーが検索ワードを入力している際に、リアルタイムで候補を表示するなどのインタラクティブな機能を実装することができます。以下は、入力内容を監視する例です。

JavaScript

document.getElementById('search-input').addEventListener('input', function(event) {
	let query = event.target.value;
	// 入力内容に基づく処理(例:オートコンプリート候補の表示)
	console.log("現在の検索キーワード: " + query);
});

フォーム送信時のカスタム処理

検索フォームの送信前に入力内容の検証や、Ajaxを利用した非同期検索を行う場合の実装例です。

JavaScript

document.querySelector('form').addEventListener('submit', function(event) {
	event.preventDefault(); // 通常のフォーム送信を防ぐ
	let query = document.getElementById('search-input').value;
	// Ajaxリクエストやカスタム処理を実行
	console.log("送信された検索キーワード: " + query);
	// 例:fetch APIを利用して非同期で検索結果を取得
});

アクセシビリティの考慮

適切なラベルの設定

支援技術を利用するユーザーに向けて、必ず <label> 要素と id 属性を用いて入力フィールドとラベルを関連付けます。

HTML

<label for="search-input">検索:</label>
<input type="search" id="search-input" name="q" placeholder="キーワードを入力">

ARIA属性の活用

場合によっては、さらに詳細な情報を支援技術に伝えるために ARIA 属性を活用することも有用です。例えば、検索結果のライブリージョン(動的な更新領域)を設定する場合:

HTML

<div id="search-results" aria-live="polite"></div>

ブラウザ対応と実装上の注意点

対応ブラウザの違い

モダンブラウザ
最新のChrome、Firefox、Safari、Edgeでは <input type="search"> の機能が十分にサポートされています。
古いブラウザ
一部の旧バージョンのブラウザや特殊な環境では、 <input type="search"> は単なるテキスト入力として扱われる場合があります。クロスブラウザ対応を考慮して、スタイルやJavaScriptの実装時にフォールバックを検討してください。

ユーザー体験の一貫性

ユーザーが異なるデバイスやブラウザで同じ体験を得られるよう、入力フィールドのサイズやレスポンシブデザインにも注意を払いましょう。特に、モバイルデバイスでは、検索専用キーボードが表示されることで入力が容易になる点を考慮し、適切なタッチターゲットのサイズに設定します。

応用テクニックとSEOへの影響

入力補完機能の強化

ブラウザが提供するオートコンプリート機能を活用しつつ、サーバーサイドやJavaScriptで動的な候補表示を行うことで、ユーザーの検索体験を大幅に向上させることができます。

SEOと構造化データ

検索フォーム自体が直接SEOに大きく影響するわけではありませんが、ユーザーエンゲージメントを高めることで間接的に評価が向上する可能性があります。また、検索結果ページで構造化データ(Schema.orgなど)を利用して、検索エンジンにコンテンツの内容を正確に伝える工夫も重要です。

実践例:オートコンプリート検索フォーム

以下は、実際にオートコンプリート機能を実装した例です。ユーザーが入力するたびに候補リストを更新するシンプルな実装です。

HTML

<form id="search-form">
	<label for="search-input">検索:</label>
	<input type="search" id="search-input" name="q" placeholder="キーワードを入力">
	<button type="submit">検索</button>
</form>
<ul id="suggestions"></ul>
<script>
	<!-- JavaScript code here -->
</script>

JavaScript

const suggestions = [
	"JavaScript",
	"HTML5",
	"CSS3",
	"Web開発",
	"プログラミング",
	"フロントエンド",
	"バックエンド"
];

const searchInput = document.getElementById('search-input');
const suggestionsList = document.getElementById('suggestions');

searchInput.addEventListener('input', function() {
	const query = searchInput.value.toLowerCase();
	suggestionsList.innerHTML = '';
	if (query) {
		const filtered = suggestions.filter(item => item.toLowerCase().includes(query));
		filtered.forEach(item => {
			const li = document.createElement('li');
			li.textContent = item;
			li.addEventListener('click', () => {
				searchInput.value = item;
				suggestionsList.innerHTML = '';
			});
			suggestionsList.appendChild(li);
		});
	}
});

CSS

#suggestions {
	border: 1px solid #ccc;
	max-width: 300px;
	margin-top: 0;
	list-style: none;
	padding-left: 0;
}
#suggestions li {
	padding: 5px;
	cursor: pointer;
}
#suggestions li:hover {
	background-color: #eee;
}

この例では、ユーザーが入力するたびに候補リストが動的に更新され、クリックするとその値が検索フィールドにセットされる仕組みを実現しています。実際のアプリケーションでは、サーバーサイドとの連携やAjaxリクエストによる動的なデータ取得を組み合わせることで、より高度な機能を実装することができます。

まとめ

HTMLの <input type="search"> は、ユーザーにとって直感的かつ効率的な検索体験を提供するための強力なツールです。

初心者の方へ
基本の使い方やラベル、placeholderの利用方法を理解し、フォーム全体のアクセシビリティを意識してください。
中・上級者の方へ
CSSやJavaScriptによるカスタマイズ、ブラウザごとの実装上の注意点、オートコンプリートや動的候補表示の実装など、より洗練されたユーザー体験を提供するための手法を検討してください。

Sample

以下は、ユーザーが検索キーワードを入力し、送信ボタンをクリックすると、そのキーワードを「検索結果」として表示する最もシンプルなHTMLとJavaScriptのサンプルコードです。

HTML

<form id="searchForm">
	<input type="search" id="searchInput" name="q" placeholder="検索キーワードを入力">
	<button type="submit">検索</button>
</form>
<div id="results"></div>

<script>
	document.getElementById('searchForm').addEventListener('submit', function(e) {
		e.preventDefault(); // フォーム送信時のページリロードを防止
		var query = document.getElementById('searchInput').value;
		document.getElementById('results').innerText = '検索結果: ' + query;
	});
</script>

このコードは、フォームの送信イベントをキャッチして、入力された検索キーワードを「検索結果」としてページ上に表示します。