質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

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

CSS

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

Q&A

解決済

2回答

518閲覧

[jQuery]addClassで文字色を変えると文字がズレる

nkfn_39

総合スコア12

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

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

CSS

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

0グッド

0クリップ

投稿2022/06/23 12:30

現在サイドメニューがあるWebページを作成しております。
たとえば、ページ内のAboutが表示されている間は、メニューのAbout部分(文字とその上のバー)の色を濃く変えたいと思っています。

以下のコードで実装はできたのですが、色が濃く変わると文字だけが少し上にズレてしまいます。
大きな問題はないのですが、原因を知りたいと思い、こちらに投稿いたしました。

HTML

1 <div id="menublock1"> 2 <a href="#about"> <!--開いているときに色変更--> 3 <img class="menubar" src="img/003bar.png" alt="メニューバー" border="0"> 4 <img class="current" src="img/003bar_change.png" alt="メニューバー" border="0"> 5 <h2 class="sidemenu">About</h2></a> 6 </div>

CSS

1#menublock1 { 2 width: 18%; 3 position: fixed; 4 top: 15vw; 5 left: 3vw; 6} 7 8.menubar { 9 width: 56.8%; 10} 11 12.current{ 13display: none; 14} 15 16.current.vivid { 17 width: 56.8%; 18} 19 20a { 21 text-decoration: none; 22} 23 24.sidemenu { 25 font-family: 'Fugaz One', cursive; 26 font-weight: 400; 27 color: #ff9bcdff; 28 font-size: 2.5vw; 29 letter-spacing: 0.03em; 30 transform: rotate(-10deg); 31 line-height: 60%; 32 text-indent: 0.3em; 33} 34 35.sidemenu.vivid { 36 color: #ff007fff; 37}

jQuery

1$(function(){ 2 3 $(window).on('scroll',function(){ 4 5 $('#menublock1 .current, #menublock1 .sidemenu').each(function() { 6 let now = $(window).scrollTop(); 7 let posTop = $('#about').offset().top; 8 let posBottom = $('#about').offset().top + $('#about').outerHeight(); 9 10 if(posTop < now && now <= posBottom) { 11 $(this).addClass('vivid'); 12 $('#menublock1 .current').show(); 13 $('#menublock1 .menubar').hide(); 14 } else { 15 $(this).removeClass('vivid'); 16 $('#menublock1 .current').hide(); 17 $('#menublock1 .menubar').show(); 18 } 19 }); 20 21 }); 22 23});

003bar.pngと003bar_change.pngの画像サイズは全く同じです。

試したこと
・CSS内.sidemenu.vividに.sidemenuと同様(文字色コード以外)の記述をする
→上記コードの挙動と変わりませんでした

確認に使用しているブラウザはMicrosoft Edgeです。

原因をご存知でしたらお教えいただけますと幸いです。

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

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

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

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

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

guest

回答2

0

HTMLコードが抜粋のため、動作確認できないので、推測ですが、、、、

色が濃く変わると文字がずれるとのことですが、文字色が変わっただけでずれることはありません。

js

1 $(this).addClass('vivid'); 2 $('#menublock1 .current').show(); 3 $('#menublock1 .menubar').hide();

上記のコードの show() hide()で要素の表示、非表示をしているのが原因ではないでしょうか。
あと、

css

1.current.vivid { 2 width: 56.8%; 3}

.vivid があるときだけ幅を指定してますが、jQueryで vividの付け外しをしているので、それが原因かもしれません。

投稿2022/06/23 13:48

hatena19

総合スコア33715

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

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

nkfn_39

2022/06/24 09:29 編集

ご回答いただきありがとうございます。 前者については、show() hide() でなく全てaddClassにすることで試しましたが、挙動は変わりませんでした。 また、後者についても、.currentで先にサイズを指定しておき、vivid付与時にはdisplayを値blockで指定してみましたが、変わらず少し上にズレてしまいました。 度々申し訳ありませんが、他にやるべきことがございましたらお教えいただけますと幸いです。 【追記】 自分でも色々と検索していたのですが、とあるサイトで答えを見つけました。 .current.vividをdisplay: inlineにしたところ解決いたしました。 この度は貴重なお時間を割いていただき誠にありがとうございました。
guest

0

自己解決

CSSの.current.vividにdisplay: inline;の記述をしたところ、文字がズレませんでした。

(【追記】つまり、jQueryから$('#menublock1 .current').show(); $('#menublock1 .current').hide();は除き、currentの表示/非表示はaddClassで切り替えるようにしました)

参考にしたのはこちらのサイトです。
jQuery | display:noneから表示に戻すとレイアウトが崩れる原因と対処法

この度はお騒がせいたしました。
ご回答くださったhatena19さま、ご覧いただいた皆さま、誠にありがとうございました。

投稿2022/06/24 09:43

編集2022/06/24 10:15
nkfn_39

総合スコア12

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問