\n\n\n\n```\n\n```css\n/* ====== ナビゲーションバー全体 ====== */\nbody {\n margin: 0;\n padding-top: 60px; /* navbar 高さ分 */\n}\n\n/* ====== Nikkyou Sans フォント読み込み ====== */\n@font-face {\n font-family: 'NikkyouSans';\n src: url('../fonts/NikkyouSans-mLKax.ttf') format('truetype');\n font-weight: normal;\n font-style: normal;\n}\n\n/* ====== ナビゲーションバー ====== */\n.navbar {\n display: flex;\n align-items: center;\n justify-content: center; /* 真ん中寄せ */\n background: #E6E6E6;\n padding: 0 20px;\n height: 60px;\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n z-index: 1000;\n}\n\n/* ====== TOPアイコン ====== */\n.logo {\n position: absolute;\n left: 20px;\n}\n.logo img {\n height: 40px;\n width: auto;\n display: block;\n}\n\n/* ====== メニューリスト ====== */\n.nav-links {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n justify-content: center;\n gap: 40px;\n width: 100%; /* 真ん中寄せのために追加 */\n}\n\n/* ====== メニューリンク ====== */\n.nav-item {\n font-family: 'NikkyouSans', sans-serif;\n text-decoration: none;\n color: #575757; /* デフォルト色 */\n font-weight: 700;\n font-size: 16px;\n letter-spacing: 2px;\n transition: color 0.3s;\n}\n.nav-item:hover {\n color: #3D9EBF; /* ホバー時 */\n}\n\n/*-- 付与するcurrentクラスのスタイル --*/\n.nav-item.current {\n color: #3D9EBF;\n}\n\n\n/* ====== ハンバーガーメニュー ====== */\n.menu-toggle {\n display: none;\n}\n.menu-icon {\n display: none;\n font-size: 28px;\n curso\n\n```\n\n### 試したこと・調べたこと\n- [x] teratailやGoogle等で検索した\n- [x] ソースコードを自分なりに変更した\n- [x] 知人に聞いた\n- [ ] その他\n\n##### 上記の詳細・結果\njavascriptやcssで今開いているページと同じメニュー項目の文字色、画像を変える方法を様々試した結果、メニューリストのズレが起き、自身でmagin:centerなど試したがどんどん形式が崩れて行ってしまった。\n\njavascript、css参考先\nhttps://lpeg.info/html/js_addclass.html\n\n```JS\n// JS\nwindow.addEventListener(\"DOMContentLoaded\", () => {\n const path = window.location.pathname; // 現在のページURL\n if (path.includes(\"index.html\")) {\n document.getElementById(\"home\").classList.add(\"active\");\n } else if (path.includes(\"about.html\")) {\n document.getElementById(\"about\").classList.add(\"active\");\n } else if (path.includes(\"contact.html\")) {\n document.getElementById(\"contact\").classList.add(\"active\");\n }\n});\n```\n```JS\ndocument.querySelectorAll('.nav-item').forEach(link => {\n if(link.pathname === window.location.pathname){\n link.classList.add('current');\n const img = link.querySelector('img');\n if(img){\n // 画像をアクティブ版に差し替え\n img.src = img.src.replace('_gray.png', '_active.png');\n }\n }\n});\n```\n```CSS\n.nav-item.character {\n background: url(\"image/char_gray.png\") no-repeat center top;\n}\n.nav-item.movie {\n background: url(\"image/movie_gray.png\") no-repeat center top;\n}\n\n/* currentが付いた時 */\n.nav-item.character.current {\n background: url(\"image/char_active.png\") no-repeat center top;\n}\n.nav-item.movie.current {\n background: url(\"image/movie_active.png\") no-repeat center top;\n}\n\n```\n\n### 補足\n特になし","answerCount":2,"upvoteCount":0,"datePublished":"2025-09-01T06:49:33.683Z","dateModified":"2025-09-05T11:04:09.000Z","acceptedAnswer":{"@type":"Answer","text":"スクリプト内容を変更したら解決しました。\n\n```css\t\t/* 現在ページのリンクに色を付ける */ \n\t\t.nav-links a.current { color: #3D9EBF; } \n\t\t.Hamburger-links a.current { color: #3D9EBF; }\n```\n\n```\n\n```","dateModified":"2025-09-05T11:04:10.000Z","datePublished":"2025-09-05T02:04:09.930Z","upvoteCount":0,"url":"https://teratail.com/questions/u6zsqr78ey53ly#reply-ks6a4tm1uspnra"},"suggestedAnswer":[{"@type":"Answer","text":"とりあえず\n> ckass=\"nav-links\"\n```\nclass=\"nav-links\"\n```\n\n処理的にはulのpaddingを消したうえでjustify-contentはspace-aroundかspace-evenlyがよいかと\n```html\n\n
\n \n\n
\n```\n\nあとは、ハンバーガーメニューがページ内リンクか外部リンクかによります。\nHTMLの通り外部リンクだとすると自ページを判断して「active」クラスを付加するなどが楽かも\n```html\n\n\n\n
\n \n\n
\n```","dateModified":"2025-09-01T09:38:57.930Z","datePublished":"2025-09-01T07:20:19.125Z","upvoteCount":0,"url":"https://teratail.com/questions/u6zsqr78ey53ly#reply-ao6chc0r2z2uhz","comment":[{"@type":"Comment","text":"自己解決いたしました。\n教えていただきありがとうございました。","datePublished":"2025-09-05T02:02:41.162Z","dateModified":"2025-09-05T02:02:41.162Z"}]}],"breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"item":{"@id":"https://teratail.com","name":"トップ"}},{"@type":"ListItem","position":2,"item":{"@id":"https://teratail.com/tags/JavaScript","name":"JavaScriptに関する質問"}},{"@type":"ListItem","position":3,"item":{"@id":"https://teratail.com/questions/u6zsqr78ey53ly","name":"メニューバーの配置、開いてるページと該当したメニュー文字色変更について"}}]}}}
質問するログイン新規登録

Q&A

解決済

2回答

446閲覧

メニューバーの配置、開いてるページと該当したメニュー文字色変更について

tst456

総合スコア1

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2025/09/01 06:49

編集2025/09/01 06:51

0

0

実現したいこと

・今開いているページと同じメニュー項目の文字色、画像を変える
・文字をメニューバーの中心に等間隔で配置したい
・文字を横並びにしたい、・を消したい

イメージ説明

発生している問題・分からないこと

・コードに誤りがあるのか、他の何かが邪魔しているのか動作しない
・ list-style: none; justify-content: center;を使用しているが・が消えない、中央等間隔配置、横並びにならない

該当のソースコード

html

1<html> 2<head> 3 <meta charset="UTF-8"> 4 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 5 <title>メニュー</title> 6 <link rel="stylesheet" href="css/menu.css"> 7</head> 8 9<body> 10<nav class="navbar"> 11 <!-- 左側 TOP アイコン --> 12 <a href="index.html" class="logo"> 13 <img id="top-logo" src="image/top1.png" alt="TOP"> 14 </a> 15 16 <!-- ハンバーガーメニューのトグル --> 17 <input type="checkbox" id="menu-toggle" class="menu-toggle"> 18 <label for="menu-toggle" class="menu-icon">&#9776;</label> 19 20 <!-- リンク部分 --> 21<div ckass="nav-links"> 22 <ul> 23 <li><a class="nav-item"href="character.html">CHARACTER</a></li> 24 <li><a class="nav-item"href="movie.html">MOVIE</a></li> 25 <li><a class="nav-item"href="gallery.html">GALLERY</a></li> 26 </ul> 27</nav> 28</div> 29 30<script> 31document.addEventListener('DOMContentLoaded', () => { 32 // 現在のページのURLを取得 33 const currentUrl = window.location.href; 34 const logoImage = document.getElementById('top-logo'); 35 36 // トップページの場合、ロゴ画像をtop2.pngに切り替える 37 if (currentUrl.endsWith('index.html') || currentUrl.endsWith('/')) { 38 logoImage.src = 'image/top2.png'; 39 } 40 41 // ナビゲーションリンクにcurrentクラスを付与 42 document.querySelectorAll('.nav-item').forEach(link => { 43 if(link.href === currentUrl){ 44 link.classList.add('current'); 45 } 46 }); 47}); 48</script> 49</body> 50</html> 51

css

1/* ====== ナビゲーションバー全体 ====== */ 2body { 3 margin: 0; 4 padding-top: 60px; /* navbar 高さ分 */ 5} 6 7/* ====== Nikkyou Sans フォント読み込み ====== */ 8@font-face { 9 font-family: 'NikkyouSans'; 10 src: url('../fonts/NikkyouSans-mLKax.ttf') format('truetype'); 11 font-weight: normal; 12 font-style: normal; 13} 14 15/* ====== ナビゲーションバー ====== */ 16.navbar { 17 display: flex; 18 align-items: center; 19 justify-content: center; /* 真ん中寄せ */ 20 background: #E6E6E6; 21 padding: 0 20px; 22 height: 60px; 23 position: fixed; 24 top: 0; 25 left: 0; 26 width: 100%; 27 z-index: 1000; 28} 29 30/* ====== TOPアイコン ====== */ 31.logo { 32 position: absolute; 33 left: 20px; 34} 35.logo img { 36 height: 40px; 37 width: auto; 38 display: block; 39} 40 41/* ====== メニューリスト ====== */ 42.nav-links { 43 list-style: none; 44 margin: 0; 45 padding: 0; 46 display: flex; 47 justify-content: center; 48 gap: 40px; 49 width: 100%; /* 真ん中寄せのために追加 */ 50} 51 52/* ====== メニューリンク ====== */ 53.nav-item { 54 font-family: 'NikkyouSans', sans-serif; 55 text-decoration: none; 56 color: #575757; /* デフォルト色 */ 57 font-weight: 700; 58 font-size: 16px; 59 letter-spacing: 2px; 60 transition: color 0.3s; 61} 62.nav-item:hover { 63 color: #3D9EBF; /* ホバー時 */ 64} 65 66/*-- 付与するcurrentクラスのスタイル --*/ 67.nav-item.current { 68 color: #3D9EBF; 69} 70 71 72/* ====== ハンバーガーメニュー ====== */ 73.menu-toggle { 74 display: none; 75} 76.menu-icon { 77 display: none; 78 font-size: 28px; 79 curso 80

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

javascriptやcssで今開いているページと同じメニュー項目の文字色、画像を変える方法を様々試した結果、メニューリストのズレが起き、自身でmagin:centerなど試したがどんどん形式が崩れて行ってしまった。

javascript、css参考先
https://lpeg.info/html/js_addclass.html

JS

1// JS 2window.addEventListener("DOMContentLoaded", () => { 3 const path = window.location.pathname; // 現在のページURL 4 if (path.includes("index.html")) { 5 document.getElementById("home").classList.add("active"); 6 } else if (path.includes("about.html")) { 7 document.getElementById("about").classList.add("active"); 8 } else if (path.includes("contact.html")) { 9 document.getElementById("contact").classList.add("active"); 10 } 11});

JS

1document.querySelectorAll('.nav-item').forEach(link => { 2 if(link.pathname === window.location.pathname){ 3 link.classList.add('current'); 4 const img = link.querySelector('img'); 5 if(img){ 6 // 画像をアクティブ版に差し替え 7 img.src = img.src.replace('_gray.png', '_active.png'); 8 } 9 } 10});

CSS

1.nav-item.character { 2 background: url("image/char_gray.png") no-repeat center top; 3} 4.nav-item.movie { 5 background: url("image/movie_gray.png") no-repeat center top; 6} 7 8/* currentが付いた時 */ 9.nav-item.character.current { 10 background: url("image/char_active.png") no-repeat center top; 11} 12.nav-item.movie.current { 13 background: url("image/movie_active.png") no-repeat center top; 14} 15

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2025/09/01 07:17

「menu about contact」なのか「charactor movie gallery」なのか明確にしてください
tst456

2025/09/01 08:28

画像は選択時の見本として作ったのもなので、実際の内容はcharactor movie galleryになります。
yambejp

2025/09/01 08:51

>実際の内容はcharactor movie galleryになります。 なるほど、ではHTMLを元に処理してよいのですね? それを前提に回答はしてあるので確認ください
tst456

2025/09/01 09:08

確認した所メニューの文字は中心に来ました。 ありがとうございます。 今は文字がメニューバーの中心で各単語の余白が無い状態です。
yambejp

2025/09/01 09:39

回答みて想定と違うところがあればご指摘ください
tst456

2025/09/01 12:05

・charactor movie galleryの単語同士に余白がない(liにmargin入れてみましたが反応なし) ・今開いているページと同じメニュー項目の文字色に色が付かない(index.htmlは未選択時文字色#E6E6E6 それ以外では黒文字で表示される。どのページを選んでもメニュー文字の色が変わらない) といった状態です。
tst456

2025/09/01 12:37

・charactor movie galleryの単語同士に余白がない(liにmargin入れてみましたが反応なし) ↑こちらについて 自分のパソコンから確認した際は余白がなかったのですが、他の方のパソコンからでは余白の確認が取れました メニューの文字については先程お伝えした通りです
yambejp

2025/09/02 00:03

コメントで補足をつけるのではなく回答の方を御覧ください
tst456

2025/09/02 04:02

回答みて想定と違うところをご回答したのですが、どのように回答したらよろしかったでしょうか? 回答をもとに htmlを修正後確認した結果をお送りいたしました。
yambejp

2025/09/02 04:34

回答にコメントしてください・・・ということです
guest

回答2

0

自己解決

スクリプト内容を変更したら解決しました。

css

1 .nav-links a.current { color: #3D9EBF; } 2 .Hamburger-links a.current { color: #3D9EBF; }
<script> // まず fetch を使って、menu.html の中身を読み込む fetch("./menu.html") .then(res => res.text()) // 読み込んだファイルの内容をテキストとして取得 .then(data => { // 取得したテキスト(menu.html の中身)を // このページの #menu という id の要素に入れる document.getElementById("menu").innerHTML = data; // ここからは「現在開いているページに応じてメニューをハイライト」する処理 // location.pathname で今見ているページのパスを取得 // 例: "C:/website/character1.html" → "character1.html" だけ取り出す const currentFile = location.pathname.split("/").pop(); // 読み込んだ menu.html の中の .nav-item を全部取り出す document.querySelectorAll("#menu .nav-item").forEach(link => { // それぞれのリンクの href を取り出す // 例: href="character.html" → "character.html" const hrefFile = link.getAttribute("href").split("/").pop(); // ".html" を消してベース名だけにする // 例: "character.html" → "character" const baseName = hrefFile.replace(".html", ""); // 今見ているページ名がリンクのベース名で始まっているかチェック // 例: currentFile = "character1.html" // baseName = "character" // → "character1.html".startsWith("character") → true if (currentFile.startsWith(baseName)) { // 条件に合ったリンクに "current" クラスを追加 // CSSで色を変えたり装飾できる link.classList.add("current"); } }); }); </script>

投稿2025/09/05 02:04

tst456

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

とりあえず

ckass="nav-links"

class="nav-links"

処理的にはulのpaddingを消したうえでjustify-contentはspace-aroundかspace-evenlyがよいかと

html

1<style> 2.nav-links ul{ 3list-style:none; 4display:flex; 5padding:0; 6 justify-content:space-evenly; 7} 8</style> 9<div class="nav-links"> 10 <ul> 11 <li><a class="nav-item" href="character.html">CHARACTER</a></li> 12 <li><a class="nav-item" href="movie.html">MOVIE</a></li> 13 <li><a class="nav-item" href="gallery.html">GALLERY</a></li> 14 </ul> 15</nav> 16</div>

あとは、ハンバーガーメニューがページ内リンクか外部リンクかによります。
HTMLの通り外部リンクだとすると自ページを判断して「active」クラスを付加するなどが楽かも

html

1 2<script> 3window.addEventListener('DOMContentLoaded', ()=>{ 4 document.querySelectorAll('.nav-links .nav-item').forEach(x=>{ 5 const reg=new RegExp(x.getAttribute('href').replace(/\./,'\\.')); 6 if(reg.test(location.href)) x.classList.add('active') 7 }); 8}); 9</script> 10<style> 11.nav-item{ 12color:black; 13} 14.active{ 15color:red; 16} 17.nav-links ul{ 18list-style:none; 19display:flex; 20padding:0; 21 justify-content:space-evenly; 22} 23</style> 24<div class="nav-links"> 25 <ul> 26 <li><a class="nav-item" href="character.html">CHARACTER</a></li> 27 <li><a class="nav-item" href="movie.html">MOVIE</a></li> 28 <li><a class="nav-item" href="gallery.html">GALLERY</a></li> 29 </ul> 30</nav> 31</div>

投稿2025/09/01 07:20

編集2025/09/01 09:38
yambejp

総合スコア118162

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tst456

2025/09/05 02:02

自己解決いたしました。 教えていただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問