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.
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
属性method
属性label
要素placeholder
属性value
属性を用いて、初期値を設定することも可能です。
HTML
<input type="search" id="search-input" name="q" value="初期検索キーワード">
<input type="search">
と <input type="text">
の違い<input type="search">
は、単なるテキスト入力ではなく「検索」という目的を明確に示します。これにより、スクリーンリーダーなどの支援技術は適切な振る舞いを提供できます。<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
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 属性を活用することも有用です。例えば、検索結果のライブリージョン(動的な更新領域)を設定する場合:
HTML
<div id="search-results" aria-live="polite"></div>
<input type="search">
の機能が十分にサポートされています。<input type="search">
は単なるテキスト入力として扱われる場合があります。クロスブラウザ対応を考慮して、スタイルやJavaScriptの実装時にフォールバックを検討してください。ユーザーが異なるデバイスやブラウザで同じ体験を得られるよう、入力フィールドのサイズやレスポンシブデザインにも注意を払いましょう。特に、モバイルデバイスでは、検索専用キーボードが表示されることで入力が容易になる点を考慮し、適切なタッチターゲットのサイズに設定します。
ブラウザが提供するオートコンプリート機能を活用しつつ、サーバーサイドやJavaScriptで動的な候補表示を行うことで、ユーザーの検索体験を大幅に向上させることができます。
検索フォーム自体が直接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
の利用方法を理解し、フォーム全体のアクセシビリティを意識してください。以下は、ユーザーが検索キーワードを入力し、送信ボタンをクリックすると、そのキーワードを「検索結果」として表示する最もシンプルな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>
このコードは、フォームの送信イベントをキャッチして、入力された検索キーワードを「検索結果」としてページ上に表示します。