🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
HTML

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

CSS

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

Q&A

解決済

1回答

4248閲覧

positionのfixedで、bottomだけが効かない原因についてヒントを頂きたいです。

nomura02

総合スコア133

HTML

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

CSS

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

0グッド

0クリップ

投稿2021/01/25 12:59

編集2021/01/25 13:09

前提・実現したいこと

ナビゲーションバーを、このように配置したいです。
理想

positionを使った理由

最初、高さを100vhに設定し、flexboxで上下に配置したのですが、
そうすると、画面全体をナビゲーションバーが覆ってしまい、スマホverの時に、中のコンテンツが何もclick出来ないという事態になってしまったので、

LOGOとmenuを、それぞれposition:fixedで設定しました。(ソースコード後述)
スマホバージョンにしたときは、menuだけが右下にくるので、

CSS

1@media (max-width: 667px) { 2 .global-navi .menu { 3 bottom: 0%; 4 right: 0%; 5 } 6}

にすればいいな、と思い上記のように設定しました。

起こっている問題

なぜか

イメージ説明

効きません。
しかも、なぜか、全部試してみたのですが、この、スマホバージョンの、menuだけに効きません。
原因を探しましたが、今日は見つけることが、出来ませんでした。

苦肉の策で、原因は分からないまま、

CSS

1@media (max-width: 667px) { 2 .global-navi .menu { 3 top:80% 4 right: 0%; 5 } 6}

はきくので、今はこのようにしましたが、釈然としません。

高さを決めてないから、bottom では動かないのだろうかと思ったのですが、高さを設定してしまうと、中のコンテンツが押せなくなってしまう…と思いました。

HTML

1<header> 2 <nav class="global-navi"> 3 <div class="logo"> 4 <p>LOGO</p> 5 </div> 6 <div class="menu"> 7 <ul>                        ↓これは、ページ遷移のアニメーションです。 8 <li class="li"><a href="index.html" class="animsition-link">TOP</a></li> 9 <li class="li"><a href="commitment.html" class="animsition-link">COMMITMENT</a></li> 10 </ul> 11 </div> 12 </nav> 13 </header>

CSS

1/*---header---*/ 2/*---グローバルナビ---*/ 3header { 4 position: relative; 5 mix-blend-mode: multiply; 6 z-index: 2; 7} 8 9.global-navi { 10 display: none;  11 /*初期状態:非表示*/ 12} 13 14.global-navi .logo p { 15 font-size: 1.40625vw; 16 font-family: "playfair-display", serif; 17 font-style: normal; 18 font-weight: 900; 19 line-height: 1em; 20 color: #6d0d11; 21 padding: 2% 1%; 22 position: fixed; 23 top: 0%; ←自分の思い通りに、移動させられます 24 left: 0%; ←自分の思い通りに、移動させられます 25} 26 27@media (max-width: 667px) { 28 .global-navi .logo p { 29 font-size: 18px; 30 margin-top: 5%; 31 } 32} 33 34.global-navi .menu { 35 padding: 2% 3%; 36 position: fixed; 37 top: 0%; ←自分の思い通りに、移動させられます 38 right: 0%; ←自分の思い通りに、移動させられます 39} 40 41@media (max-width: 667px) { 42 .global-navi .menu { 43 top: 80%; ← ←自分の思い通りに、移動させられません 44 right: 0%; ←自分の思い通りに、移動させられます 45 } 46} 47 48.global-navi .menu a { 49 font-size: 20px; 50 font-family: "din-1451-lt-pro-engschrift", sans-serif; 51 font-style: normal; 52 font-weight: 400; 53 color: #eae2db; 54 line-height: 1.75em; 55 color: #6d0d11; 56 display: block; 57 -webkit-box-align: end; 58 -ms-flex-align: end; 59 align-items: flex-end; 60} 61 62@media (max-width: 667px) { 63 .global-navi .menu a { 64 font-size: 15px; 65 } 66}

試したこと

  • ページ遷移の、JS側で何か起こっているのだろうか?と思い色々探したところ、

position: fixedが効かない場合の対処法
親要素のtransformを外せばokです。という記事を発見しました。
JSはこちらです。

JS

1 $(function(){ 2 //表示するスクロール量(px) 3 var scrollPoint = 600; 4 $(window).scroll(function(){ 5 if($(this).scrollTop() > scrollPoint){ 6 $('.global-navi').fadeIn(); 7 }else{ 8 $('.global-navi').fadeOut(); 9 } 10 }); 11}); 12

なので、試しに

CSS

1@media (max-width: 667px) { 2 .global-navi .menu ul { 3 bottom: 0%; 4 right: 0%; 5 -webkit-transform: none !important; 6 transform: none !important; 7 } 8}

としてみました。⇒失敗しました。

  • topもぜろにする必要があるような記事を発見したので、そうしてみました。

CSS

1@media (max-width: 667px) { 2 .global-navi .menu { 3 top: 0%; 4 bottom: 0%; 5 right: 0%; 6 } 7}

⇒失敗しました。

  • ulまで指定して、詳細度を上げる必要があるのだろうか、と思いました

CSS

1@media (max-width: 667px) { 2 .global-navi .menu ul { 3 top: 0%; 4 bottom: 0%; 5 right: 0%; 6 } 7}

⇒失敗しました。


そのまま、top 80%のままなら、動くっちゃ動くのですが
どうして、こうなったのか、分かりません…おそらく何か、勉強不足のものが、ありそうな…
top 80%にするのが正解なのでしょうか?高さを設定できないパターンだから、という理由で。
だとしたらしょうがないからこれが正解、ということでしょうか?

お忙しいところ、大変恐縮ですが、何かヒントを頂けましたら幸いです。
宜しくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

提示されていないところでtopが指定されているのであれば、
top: auto; では。

【top - CSS: カスケーディングスタイルシート | MDN】
https://developer.mozilla.org/ja/docs/Web/CSS/top#values

投稿2021/01/25 19:06

kei344

総合スコア69596

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

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

nomura02

2021/01/26 00:34

ご回答、ありがとうございます! MDNを、まず全部目を通したほうがよいですね… パソコンバージョンで、topを指定し、 スマホバージョン(@media)でbottomを指定したとしても、 top:autoが効いていて、MDNに書いているとおり、「top プロパティが優先されて bottom プロパティは無視され」るという理解で正しいでしょうか。
kei344

2021/01/26 04:49

>topを指定し、 > top:autoが効いていて、 なんのことでしょう。 「無視される」ではなくtopに数値での指定値があってbottomにもある場合両方適用されるだけだと思います。
nomura02

2021/01/26 06:34

ご返答、ありがとうございます。 すみません、大変恐縮なのですが、もう少しお聞きしてもよろしいでしょうか パソコンバージョンの時は、 top:0% right:0% で、 スマホの時は、 bottom:0% right:0% としたかったのに、これが効かないのは、 top:0% bottom:0% right:0% と、こう両方きいてしまっているというかパソコンバージョンで設定したtopが継承されてしまってるから、という意味でしょうか?? ならば効くのは top: auto; bottom: 0%; right: 0%; とすればいいんじゃないですかっていう、意味だったでしょうか?? ↑ちなみにこれを今理解して試してみたら上手くいったのですがこの解釈で正しいでしょうか…
nomura02

2021/01/26 06:39

topに0%という数値での指定値があって、スマホバージョンでもbottomに0%という指定値もある場合、両方適用されるだけ という理解であっていますでしょうか。
kei344

2021/01/26 06:58

理解や解釈はあなたの頭の中の出来事なので、正しいかどうかを聞かれてもわかりません。 CSSは「指定の上書き」ができるので、どのようなときにどのような挙動をするのかを地道に確認しましょう。 【ChromeデベロッパーツールでCSSをチェックする方法 | なんでものびるWEB】 https://nandemo-nobiru.com/2944/
nomura02

2021/01/26 09:19

はい、確認します。 ご丁寧に、ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問