CSSでドロップダウン付きのレスポンシブナビゲーションバーを作成する方法
CSSと少量のJavaScriptを組み合わせることで、デスクトップ・モバイルの両方で快適に使える、ドロップダウンメニュー付きのレスポンシブナビゲーションバーを作成できます。
この記事では、画面幅が880px以下になるとリンクが非表示になり、代わりにハンバーガーアイコン(☰)が表示されるナビゲーションバーを実装します。ハンバーガーをクリックすると全リンクが縦並びで展開され、さらに「Open」ボタンにホバーするとサブメニューがドロップダウン表示される仕組みです。
コード例
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<style>
*,*::after,*::before{
box-sizing: border-box;
}
.menu-btn {
font-size: 18px;
font-weight: bold;
display: inline-block;
text-align: center;
background-color: #040008;
color: white;
padding: 20px;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
border: none;
width: 100%;
}
.dropdown-menu {
position: relative;
display: inline-block;
}
.menu-content {
display: none;
position: absolute;
width: 100%;
background-color: #017575;
min-width: 160px;
z-index: 1;
}
nav{
background-color: #017575;
width: 100%;
}
.links,.links-hidden{
display: inline-block;
color: rgb(255, 255, 255);
text-decoration: none;
font-size: 18px;
font-weight: bold;
padding: 20px;
}
.links-hidden:hover,.links:hover {
background-color: rgb(8, 107, 46);
}
.dropdown-menu:hover .menu-content {
display: block;
}
.dropdown-menu:hover .menu-btn {
background-color: #3e8e41;
}
.hamburger {
color: white;
font-weight: bolder;
display: none;
}
@media screen and (max-width: 880px) {
nav a:not(:first-child) {
display: none;
}
nav a.hamburger {
float: right;
display: block;
padding: 12px;
}
.dropdown-menu{
display: none;
}
nav.openNav a.hamburger {
position: relative;
}
nav.openNav a {
float: none;
display: block;
text-align: center;
}
}
nav.openNav div.dropdown-menu{
display: block;
width: 100%;
}
</style>
</head>
<body>
<nav>
<a class="links" href="#">HOME</a>
<a class="links" href="#">EMPLOYEES</a>
<a class="links" href="#">CAREER</a>
<a class="links" href="#">Our History</a>
<a class="links" href="#">Fund Us</a>
<a class="links" href="#">More Info</a>
<div class="dropdown-menu">
<button class="menu-btn">Open <</button>
<div class="menu-content">
<a class="links-hidden" href="#">Contact Us</a>
<a class="links-hidden" href="#">Visit Us</a>
<a class="links-hidden" href="#">About Us</a>
</div>
</div>
<a class="hamburger">☰</a>
</nav>
<script>
var x = document.getElementsByTagName("nav")[0];
function toggleNav() {
if (x.className === "") {
x.className = " openNav";
} else {
x.className = "";
}
}
document.querySelector(".hamburger").addEventListener("click", toggleNav);
</script>
</body>
</html>
実装のポイント
- レスポンシブ切り替え: メディアクエリ
@media screen and (max-width: 880px)を使うことで、画面幅が880px以下のときに通常のリンクを非表示にし、ハンバーガーアイコンを表示させます。 - ドロップダウンメニュー:
.dropdown-menu:hover .menu-content { display: block; }のセレクタにより、ボタンにマウスを乗せたときだけサブメニューが展開されます。JavaScript不要で実現できるのがCSSならではのメリットです。 - ハンバーガーメニューの開閉: JavaScriptでnav要素に「openNav」クラスを付け外しすることで、モバイル表示時のメニュー開閉をシンプルに制御しています。
出力結果
上記のコードを実行すると、次のような表示になります。

ウィンドウ幅を880px以下にリサイズすると、以下のように表示が切り替わります。

ハンバーガーメニューを開き、さらにドロップダウンを展開した状態はこちらです。

-
CSSでレスポンシブなブログレイアウトを作成する方法【完全なコード例付き】
CSSを使ってレスポンシブなブログレイアウトを作成するには、viewportメタタグの設定と、デバイスの画面幅に応じて柔軟に調整されるレイアウト構造の定義がポイントになります。以下に、ナビゲーションバー・ブログ本文・サイドリンク・フッターを備えた、ブログサイトの完全なコード例を紹介します。 コード例 <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1" /> <
-
CSSで作る!スクロール時に画面上部へ固定されるナビゲーションバーの実装方法
CSSでスクロール時に固定されるナビゲーションバーを作成する方法Webサイトでページをスクロールしても画面上部に固定され続けるナビゲーションバーは、メニューへのアクセス性を保ち、ユーザビリティを大きく向上させる定番のUIテクニックです。CSSのpositionプロパティとJavaScriptを組み合わせることで、誰でも簡単に実装できます。この記事では、スクロールするとナビゲーションバーが画面上部にピタッと固定される仕組みを、実際のコード例とともにわかりやすく解説します。positionプロパティの基本構文CSSにおけるpositionプロパティの基本構文は次のとおりです。セレクタ {