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

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

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

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

HTML5

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

jQuery

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

Q&A

解決済

1回答

302閲覧

SPの下に固定要素を配置するときにフッターの下を自動でズラす処理でPC時は無効にする

nanashissss

総合スコア60

CSS3

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

HTML5

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

jQuery

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

0グッド

0クリップ

投稿2022/11/11 05:46

現状ブラウザでスマホサイズからPCサイズになるとsetCta()メソッドのbodyの下にpadding-bottomが入るのですが
こちら画面幅767以上の時にはbodyの下にpadding-bottomがなくなるようにしたいです。

おこなったことで、matchMediaなどで画面幅767以下の場合function内処理実行すると書いてみたのですが
うまくいかず。
レクチャーいただけますと幸いです。

HTML

<div class="fixed-btn"> <div class="fixed-btn_area"> <div class="fixed-btn_body"><a target="_blank" rel="noopener noreferrer" href="/">hoge/a> </div> <div class="fixed-btn_body"><a href="/"><i class="fa-solid fa-phone"></i>hoge2</a> </div> </div> </div>

css

.fixed-btn { position: fixed; right: 0; top: 50%; bottom: initial; transform: translate(0, -50%); width: 100%; max-width: 7rem; writing-mode: vertical-rl; padding: initial; } .fixed-btn_area .fixed-btn_body:nth-of-type(2){ display: none; } .fixed-btn_body { padding: 2rem 0 0; text-align: center; display: flex; justify-content: center; } .fixed-btn p{ padding: 1rem 0; width: 80%; } .fixed-btn a{ color:#fff; padding: 4rem 1.2rem; background-color:#00B0EC; } .fixed-btn a:hover{ opacity: .8; color:#fff; text-decoration:none !important; } @media (max-width:767px) { .fixed-btn { position: fixed; width: 100%; bottom: 0px; top: initial; z-index: 99; writing-mode:initial; max-width: initial; transform:none; } .fixed-btn_area{ display: flex; } .fixed-btn_area .fixed-btn_body{ width: calc(100% / 2); } .fixed-btn_body{ padding: initial; } .fixed-btn a{ width: 100%; padding:2rem; border: #fff 1px solid; } .fa-solid{ display: inline-block; padding-right: 1rem; } .fixed-btn_area .fixed-btn_body:nth-of-type(2) { display: flex; } .fixed-btn a:hover{ opacity: initial; } }

js

const callback = function(){ if (window.matchMedia( '(max-width: 767px)' ).matches) { if( $('.fixed-btn') ){ $(window).on({ 'load': setCta, 'resize': setCta }); function setCta(){ $('body').css('padding-bottom', $('.fixed-btn').outerHeight()); } }; const fixedBtn = $('.fixed-btn'); fixedBtn.hide(); $(window).scroll(function () { if ($(this).scrollTop() > 100) { fixedBtn.fadeIn(); } else { fixedBtn.fadeOut(); } }); } } window.addEventListener('DOMContentLoaded', callback ); window.addEventListener('resize', callback );

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

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

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

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

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

guest

回答1

0

ベストアンサー

window.matchMedia の使い方を間違ってますね。下記を参照してください。

JSのレスポンシブ対応をresizeからmatchMediaに移行した

イベントを入れ子にしているのもおかしいですね。
下記でどうでしょう。

JavaScript/jQuery

1const fixedBtn = $('.fixed-btn'); 2fixedBtn.hide(); 3 4$(window).scroll(function () { 5 if ($(this).scrollTop() > 100) { 6 fixedBtn.fadeIn(); 7 } else { 8 fixedBtn.fadeOut(); 9 } 10}); 11 12const mediaQueryList = window.matchMedia('(max-width: 767px)'); 13 14const listener = (event) => { 15 if (event.matches) { 16 $('body').css('padding-bottom', fixedBtn.outerHeight()); 17 } else { 18 $('body').css('padding-bottom', 0); 19 } 20}; 21mediaQueryList.addEventListener("change", listener); 22listener(mediaQueryList);

ただ、window.matchMedia を使わなくても、CSSのメディアクエリで実現できます。

css

1@media (max-width: 767px) { 2 body {padding-bottom: 3rem;} /* 追加 */ 3 4/* 略 */ 5}

投稿2022/11/11 14:30

hatena19

総合スコア33699

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

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

nanashissss

2022/11/14 05:18

ありがとうございます。 max-width: 767px以上の時は style="padding-bottom: 0px;"とはいるのですが、 767px以下の時にbodyの高さが取れない感じです scrollイベントもしてない状態で。。
nanashissss

2022/11/14 10:35

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問