ドロップダウンメニュー
CoddyのHTMLジャーニー「Practical Frontend」セクションの一部 — レッスン 20/35。
ドロップダウンメニューは、ユーザーがホバーしたりフォーカスしたりしたときに追加のリンクを表示するナビゲーション項目です。ドロップダウンはJavaScriptを使用して構築することもできますが、この章では、:hover または :focus-within を使用して非表示のメニューを表示する、CSSのみのアプローチに焦点を当てます。
使用する理由:
- ナビゲーションバーのスペースを節約できます。
- インターフェースをクリーンで整理された状態に保ちます。
- 適切に調整すれば、モバイルファーストやレスポンシブデザインでうまく機能します。
HTML:
<div class="dropdown">
<button class="dropdown-button">Menu</button>
<div class="dropdown-content">
<a href="#">Option 1</a>
<a href="#">Option 2</a>
<a href="#">Option 3</a>
</div>
</div>CSS:
// .dropdown は position: relative です。
// これにより、ドロップダウンのコンテンツを position: absolute で正しく配置できるようになります。
.dropdown {
position: relative;
display: inline-block;
}//.dropdown-contentは、display: noneを使用してデフォルトで非表示になっています。
.dropdown-content {
display: none;
position: absolute;
}//ユーザーが .dropdown コンテナにホバーしたとき、
//display: block を使用して .dropdown-content が表示されます。
.dropdown:hover .dropdown-content {
display: block;
}このコードを使用すると、ドロップダウンコンテナ(ボタンを含む)の上にマウスを置いたときに、ドロップダウンの内容が表示されます。
チャレンジ
簡単ボタンに "Select Color" とラベルが付けられ、3つのオプション(Red, Green, Blue)があるドロップダウンメニューのHTMLが与えられています。
あなたのタスクは、CSSを使用してドロップダウンを次のようにスタイリングすることです:
- オプションが デフォルトで非表示 になっていること。
- ユーザーが ドロップダウンコンテナにホバーしたときに オプションが表示されること。
チートシート
ドロップダウンメニューは、ユーザーがその上にホバーしたりフォーカスしたりしたときに、より多くのリンクを表示します。隠れているメニューを表示するには、:hover または :focus-within を使用します。
HTML構造:
<div class="dropdown">
<button class="dropdown-button">Menu</button>
<div class="dropdown-content">
<a href="#">Option 1</a>
<a href="#">Option 2</a>
<a href="#">Option 3</a>
</div>
</div>CSSの実装:
.dropdown {
position: relative;
display: inline-block;
}
.dropdown-content {
display: none;
position: absolute;
}
.dropdown:hover .dropdown-content {
display: block;
}ドロップダウンコンテナは position: relative を使用しているため、ドロップダウンコンテンツを position: absolute で配置できます。コンテンツはデフォルトでは display: none で非表示になっており、ホバー時に display: block で表示されます。
自分で試してみよう
<!DOCTYPE html>
<html>
<head>
<title>Dropdown menu</title>
<style>
body {
font-family: Arial, sans-serif;
padding: 50px;
background-color: #f0f0f0;
}
.dropdown {
position: relative;
display: inline-block;
}
.dropdown-button {
padding: 10px 20px;
font-size: 16px;
cursor: pointer;
border: 1px solid #333;
border-radius: 5px;
background-color: #ffffff;
}
.dropdown-content {
position: absolute;
top: 100%;
left: 0;
background-color: #ffffff;
min-width: 160px;
border: 1px solid #ccc;
border-radius: 5px;
box-shadow: 0 2px 5px rgba(0,0,0,0.2);
z-index: 1;
}
.dropdown-content a {
display: block;
padding: 10px;
text-decoration: none;
color: #333;
}
.dropdown-content a:hover {
background-color: #f2f2f2;
}
/* Show dropdown on hover or focus */
.dropdown:hover .dropdown-content,
.dropdown:focus-within .dropdown-content {
}
</style>
</head>
<body>
<div class="dropdown">
<button class="dropdown-button">Select Color</button>
<div class="dropdown-content">
<a href="#">Red</a>
<a href="#">Green</a>
<a href="#">Blue</a>
</div>
</div>
</body>
</html>
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。