検索ボックスに文字を入力すると、候補が自動的に表示される「オートコンプリート機能」。GoogleやAmazonなどの大手サイトでも採用されており、ユーザーの入力をサポートすることで利便性を大きく高めています。この記事では、HTML・CSS・JavaScriptを使って、シンプルながらも実用的な検索候補オートコンプリート機能を実装する方法を解説します。基本的な仕組みからコード例、デザインの工夫、応用的な機能追加まで順を追って学べる内容です。フロントエンド学習者や自作サイトに便利な検索機能を追加したい方におすすめです。
オートコンプリートとは、入力中の文字列に基づいて候補を提示する仕組みです。たとえば「ap」と入力すれば「apple」「application」「april」といった候補がリアルタイムで表示されます。
Webサイトに導入するだけでユーザーに「使いやすいサイトだ」と思ってもらえるため、集客やCVR向上にもつながります。
まずは土台となるHTMLを用意します。検索ボックスと候補を表示するための要素を作りましょう。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>オートコンプリート検索</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="search-container">
<input type="text" id="search-box" placeholder="検索ワードを入力...">
<ul id="suggestions"></ul>
</div>
<script src="script.js"></script>
</body>
</html>
ここでは、input
タグで検索ボックスを作り、候補を表示するためのul
タグを用意しています。
次に、候補リストが見やすいようにCSSでスタイルを整えます。
/* style.css */body {
font-family: Arial, sans-serif;
display: flex;
justify-content: center;
margin-top: 50px;
}
.search-container {
width: 300px;
position: relative;
}
#search-box {
width: 100%;
padding: 10px;
font-size: 16px;
}
#suggestions {
list-style: none;
margin: 0;
padding: 0;
border: 1px solid #ccc;
border-top: none;
position: absolute;
width: 100%;
background: #fff;
z-index: 10;
display: none;
}
#suggestions li {
padding: 8px;
cursor: pointer;
}
#suggestions li:hover {
background-color: #f0f0f0;
}
ポイントは、ul
を検索ボックスのすぐ下に重ねることです。候補リストは通常非表示にし、必要なときだけ表示されるようにします。
続いて、JavaScriptでオートコンプリートの処理を書きます。入力イベントを監視して、入力値に応じた候補を表示させます。
// script.js
const searchBox = document.getElementById("search-box");
const suggestions = document.getElementById("suggestions");
const keywords = [
"apple", "application", "april",
"banana", "book", "browser",
"cat", "car", "camera",
"dog", "door", "design"
];
searchBox.addEventListener("input", () => {
const input = searchBox.value.toLowerCase();
suggestions.innerHTML = "";
if (input) {
const filtered = keywords.filter(word => word.startsWith(input));
if (filtered.length > 0) {
suggestions.style.display = "block";
filtered.forEach(word => {
const li = document.createElement("li");
li.textContent = word;
li.addEventListener("click", () => {
searchBox.value = word;
suggestions.style.display = "none";
});
suggestions.appendChild(li);
});
} else {
suggestions.style.display = "none";
}
} else {
suggestions.style.display = "none";
}
});
このコードでは、ユーザーが入力した文字に一致する単語をfilter
で抽出し、リストに表示します。候補をクリックすると検索ボックスに反映され、リストは非表示になります。
下記インプットボックスのaやbを入力してみてください。検索候補が表示されます。
実際の運用で役立つ工夫をいくつか紹介します。
const filtered = keywords.filter(word => word.includes(input));
toLowerCase()
を使っていますが、候補データ側も同様に処理すれば表記ゆれに強くなります。静的な配列では候補が限られるため、実用的にはサーバー側から候補を取得する仕組みが必要です。
async function fetchSuggestions(query) {
const response = await fetch(`/api/suggest?query=${query}`);
const data = await response.json();
return data;
}
searchBox.addEventListener("input", async () => {
const input = searchBox.value.trim();
suggestions.innerHTML = "";
if (input) {
const filtered = await fetchSuggestions(input);
if (filtered.length > 0) {
suggestions.style.display = "block";
filtered.forEach(word => {
const li = document.createElement("li");
li.textContent = word;
li.addEventListener("click", () => {
searchBox.value = word;
suggestions.style.display = "none";
});
suggestions.appendChild(li);
});
} else {
suggestions.style.display = "none";
}
} else {
suggestions.style.display = "none";
}
});
このようにすれば、候補は常に最新のデータに基づいて表示され、商品検索や記事検索にも活用できます。
ユーザー体験を高めるためには、見た目も重要です。
これらを追加すれば、より直感的に操作できるオートコンプリートになります。
この記事では、HTML・CSS・JavaScriptを使った検索候補オートコンプリート機能の実装方法を解説しました。
シンプルな実装から始めて、必要に応じて機能を拡張していくのがおすすめです。実際に自分のサイトに組み込めば、ユーザー体験を大幅に向上させられるでしょう。