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

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

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

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

534閲覧

jqueryを使用してのスクロール時のheader固定について

退会済みユーザー

退会済みユーザー

総合スコア0

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

1グッド

0クリップ

投稿2022/08/31 15:02

前提

いつもお世話になっております。
今回お聞きしたいことは、スクロールした際headerを上部に固定する方法についてです。

php、css、jqueryを使用し、現在課題をこなしているのですが、画面をスクロールした際ヘッダーを固定することができずに悩んでいます。

実現したいこと

・jqueryでスクロールにて一定の箇所までスクロールしたらヘッダーが上部に固定され、上部のheader部に戻ると元に戻る。
→jqueryで対象のヘッダーのnav要素にスクロールをしたらclassが付与され、position: fixed;を記述し適応させる。上までスクロールするとclassが取り除かれ、ヘッダーが元の位置へ戻る。

このようなことがしたいのですが、上手くいきません。

該当のソースコード

php

1<header> 2 <nav id="menus"> 3 <div id="menu_logos"> 4 <a href="#" class="menu_logo"><img src="./img/logo.png"></a> 5 </div> 6 <div class="nav_list"> 7 <a href="#" class="menu">はじめに</a> 8 <a href="#" class="menu">体験</a> 9 <a href="#" class="menu">お問合せ</a> 10 </div> 11 <div class="menu_sinin"> 12 <a href="#" class="sinin_text">サインイン</a> 13 </div> 14 </nav> 15 <div class="top_h1"> 16 <hi class="menu_toptext"><b>あなたと<br>今日を生きる</b></h1> 17 </div> 18</header>

css

1header { 2 background-image: url('./cafe/img/eyecatch.jpg'); 3 filter: opacity(80%); 4 width: 100%; 5 background-size: cover; 6 background-position: center; 7 height: 550px; 8} 9 10#menus { 11 display: flex; 12 justify-content: space-between; 13 margin: 0 auto; 14 padding-top: 15px; 15 width: 100%; 16 align-items: center; 17 flex-wrap: wrap; 18} 19 20#menu_logos { 21 flex: 25%; 22 display: flex; 23 justify-content: space-between; 24} 25 26.menu_logo img { 27 position: relative; 28 top: 3px; 29 left: 15%; 30 margin: 0 auto; 31 width: 85%; 32 height: auto; 33 filter: opacity(90%); 34} 35 36#menus a { 37 color: rgba(255, 255, 255, 0.9); 38 text-decoration: none; 39} 40 41.nav_list { 42 flex: 50%; 43 display: flex; 44 flex-wrap: wrap; 45 justify-content: center; 46} 47 48.nav_list a { 49 padding: 0 1rem; 50} 51 52.menu_toptext { 53 position: relative; 54 width: 90%; 55 top: 150px; 56 left: 30px; 57 font-size: 64px; 58 color: rgba(255, 255, 255, 0.85); 59 line-height: 85%; 60} 61 62.menu_sinin { 63 position: relative; 64 right: 5%; 65 display: flex; 66 flex: 25%; 67 justify-content: flex-end; 68} 69 70.tennki { 71 color: aqua; 72} 73

jquery

1$(function () { 2 var scroll_text = $(#menus).offset().top; 3 $(window).scroll(function(){ 4 if($(this).scrollTop() > scroll_text){ 5 $("#menus").addClass('lord_menu'); 6 } else { 7 $("#menus").removeClass('lord_menu'); 8 } 9 }); 10}); 11

試したこと

css内に以下のことを記述しましたが、適応されないようです。

#menus .lord_menu { position: fixed; top: 0; z-index: 10; width: 100%;

要素のcssに直接(lord_menu)のクラスを記述し、cssに記述すると色を変えたりすることが出来ますし、Googleの検証機能を使うとスクロールすることで確かにclassは付与されているようです。
1日記述を変えてみたり、そもそものjqueryを変えて見るなど、色々と考えましたが答えが出ずに1日終わってしまいました。
わかる方は教えていただきたいです。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

退会済みユーザー👍を押しています

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

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

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

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

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

guest

回答2

0

HTMLについて

タグがhiとなっている箇所があります。h1にしてください。

cssについて

#menus .lord_menu{}というようにしてしまうと id=“menus”の子要素 かつ class=“lord_menu” である要素に適用されています。
ゆえに、classをid=“menus”である要素に付与したところでcssの内容は反映されません。

id=“menus”かつclass=“lord_menu”である要素にcssをつけたい時、
#menus .lord_menu{}ではなく、#menus.lord_menu{}というようにすればいいかもです。(スペースが消えました。)

jqueryについて、

一部$(#menus)としている箇所がありました。$(“#menus”)としてください。


テストの写真も貼っておきます。(画像のurlを持っていないため、描いて代替しました。)
テスト結果です
あと気にしないのならいいのですが、英語のスペルミスが散見されます。

投稿2022/08/31 17:21

編集2022/09/01 15:04
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2022/08/31 17:25

jqueryに関しては名前しか知らなかったため、サッと調べただけなので勘違い等あればご遠慮なく言いつけてください。
退会済みユーザー

退会済みユーザー

2022/09/01 13:44

ありがとうございます。 試してみたのですがやはり動かないですね… id=menus に lord_menu を追加し、文字を大きくする、backgroundcolorを変えると反映はされるので、恐らくposition: fiexd;が上手く動いていないものかとは思うのですが… cssの書き方については、現在は 「#menus.lord_menus」 から 「.lord_manu」へ変更しています。
退会済みユーザー

退会済みユーザー

2022/09/01 13:45

.lord_menu へ変更することで、スクロールすると色が変わるので、本当にposition部だけかもしれません。
退会済みユーザー

退会済みユーザー

2022/09/01 14:03 編集

ちょっと確認してきます
退会済みユーザー

退会済みユーザー

2022/09/01 14:57

すみません。 1日触り自己解決しました。 自己解決の欄に記入しますが、原因は親要素の「filter: opacity(80%);」が邪魔をしていたようです。 どうしてかわかりませんが、これで先に進めます。 回答いただきありがとうございました。
退会済みユーザー

退会済みユーザー

2022/09/01 15:05

ありがとうございました! 一応編集しといたんでそちらもどうぞ
退会済みユーザー

退会済みユーザー

2022/09/01 15:09

お忙しい中ありがとうございます。 スペルミスは未熟な私のせいなのですがw 今回ご指摘いただいたものを参考に明日直します。 本当にありがとうございました!!
退会済みユーザー

退会済みユーザー

2022/09/01 15:16

こちらこそ終始優しく対応してくださりありがとうございました! また、俺もまだ未熟だなって気付かせてもらいました! 本当に感謝しかないです!また会った時はよろしくお願いします!
guest

0

ベストアンサー

原因は親要素の「filter: opacity(80%);」が邪魔をしていたようです。

本当によくわかりませんが、これで先に進めます。

投稿2022/09/01 14:59

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問