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

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

ただいまの
回答率

87.61%

iframeがfooterの下に潜り込んでしまいます(JS使用)

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 1,131
退会済みユーザー

退会済みユーザー

現在、Tumblrのテーマをカスタマイズしています。
(esten theme:http://esten-theme.tumblr.com/ )

このテーマにメールフォームをつけたく、
倉庫として使っているレンタルサーバにPHPのメールフォーム(レスポンシブ)を設置。
Tumblr側で「メール」というページを作り、そこにiframeで呼び出しています。

そしてiframe-resizerを使い、iframeの内容によって高さが可変するようにしています。
(iframe-resizer:https://github.com/frontainer/iframe-resizer )

高さはたしかに可変しているようなのですが、メールフォームがfooterの下に潜り込んでしまうんです。
(ウィンドウサイズを変更すると反映されます)
フッターは内容によって高さが変わるので決め打ちできず、フッター分を
marginなどで確保する、ということができません。
いろいろ見てみたところ、

*幅によって(?)JSで.stickedというクラスが追加されるようになっている
*stickedの内容は「width: 100%;  position: fixed; bottom: 0」
*footerにz-index:2

とありました。

該当のソースコード

footer {
  width: 100%;
  background-color: #444;
  color: #dfdfdf;
  position: relative;
  z-index: 2;
  box-shadow: 0 -1px 3px 0 rgba(0, 0, 0, .15)
}
footer.sticked {
  width: 100%;
  position: fixed;
  bottom: 0
}
! function (e) {
  e.fn.estentheme = function (t) {
    function s() {
      setTimeout(function () {
        e(".like_button").each(function () {
          var t = e(this);
          t.is(".liked") ? t.parent().addClass("liked") : t.parent().removeClass("liked")
        }), s()
      }, 500)
    }

    function i() {
      Q = !0;
      var e = j.eq(L),
        t = j.eq(B);
      e.removeClass("active"), t.addClass("active"), D.eq(L).removeClass("active"), D.eq(B).addClass("active"), L = B, B = L >= j.length - 1 ? 0 : L + 1, Q = !1
    }

    function n() {
      H = setTimeout(function () {
        i(), n()
      }, f)
    }

    function a() {
      E.on("click", function () {
        for (var t = e(this), s = t.parent(), i = s.children(), n = i.index(t), a = 0; a < i.length; a++) {
          var o = e(i[a]),
            l = o.html(),
            d = i.index(o);
          d != n ? o.toggleClass("hidden") : (l == F ? o.text("<<") : o.text(F), o.toggleClass("pressed"))
        }
      })
    }

    function o(e) {
      for (q = 0; V > q; q++) M.eq(q + e * V).addClass("show")
    }

    function l() {
      Y++;
      var t = e("<div/>").load("?page=" + Y + " #posts", function () {
        X = t.find(".post"), E = t.find(".share-button"), X.length <= 1 && W.hide()
      })
    }

    function d() {
      var t = e(window).scrollTop(),
        s = e(window).height();
      Z.is(".full-width") && (t > 200 ? e(".top-menu").addClass("show-background") : e(".top-menu").removeClass("show-background")), ee.height() < s ? (te.addClass("sticked"), se.hide()) : te.is(".sticked") && ee.height() >= s && (te.removeClass("sticked"), se.show())
    }
    var r = {
        disqusID: "",
        sliderDelay: 7e3
      },
      h = e.extend(r, t),
      c = h.disqusID,
      f = h.sliderDelay;
    s();
    var u = window.location.pathname,
      g = e("#posts"),
      p = !1;
    if (g.hasClass("permalink-page") && (p = !0, -1 == u.indexOf("/post"))) {
      var v = g.children(),
        m = v.find(".post-header"),
        C = v.find(".post-title");
      v.addClass("single-page"), m.append("<span>" + C.html() + "</span>"), C.remove()
    }
    var b = e(".about-me-picture"),
      w = b.attr("href");
    if (w && -1 !== w.indexOf("x.gif")) {
      var k = b.parent();
      k.remove()
    }
    var x = e(".links-container"),
      T = x.children("a");
    if (T.length)
      for (var q = 0; q < T.length; q++) {
        var y = e(T[q]),
          O = y.attr("href"); - 1 == O.indexOf("http://") && -1 == O.indexOf("https://") && y.attr("href", "http://" + O)
      }
    for (var D, I = e(".elise-slider"), _ = e('<ul class="slider-nav" />').appendTo(I).addClass("circle"), j = I.find(".slide"), L = 0, B = 1, H = null, Q = !1, q = 0; q < j.length; q++) {
      var S = j.eq(q),
        $ = S.css("background-image"); - 1 != $.indexOf("x.gif") && S.remove()
    }
    j = I.find(".slide"), j.length < 2 && _.addClass("disabled");
    for (var q = 0; q < j.length; q++) _.append(e("<li/>"));
    D = _.children("li"), D.first().addClass("active"), D.on("click", function () {
      var e = D.index(this);
      e != L && Q === !1 && (clearTimeout(H), B = e, i(), n())
    }), j.length > 1 && n();
    var z, A = e(".menu-toggle");
    A.on("click", function () {
      var t = e(this),
        s = t.siblings("ul"),
        i = t.parent(),
        n = i.parent(),
        a = e(window).height();
      t.toggleClass("pressed"), s.stop(!0), clearTimeout(z), s.is(".scrollable") && s.css({
        "max-height": a - 80
      }), i.toggleClass("showed"), s.is(".parent") && n.toggleClass("showed"), s.is(".hidden") ? s.css({
        height: "100%",
        padding: 5
      }).toggleClass("hidden showed") : (s.toggleClass("hidden showed"), s.is(".nodelay") ? s.css({
        height: 0,
        padding: ""
      }) : z = setTimeout(function () {
        s.css({
          height: 0,
          padding: ""
        })
      }, 450))
    }), e(function () {
      e("a[href*=#]:not([href=#])").click(function () {
        if (location.pathname.replace(/^\//, "") == this.pathname.replace(/^\//, "") && location.hostname == this.hostname) {
          var t = e(this.hash);
          if (t = t.length ? t : e("[name=" + this.hash.slice(1) + "]"), t.length) {
            var s;
            return s = e(this).is("#scroll-down-button") ? t.offset().top : t.offset().top - 75, e("html,body").animate({
              scrollTop: s
            }, 1e3), !1
          }
        }
      })
    });
    var E = e(".share-button"),
      F = E.html();
    a();
    var G, J = e("#blogroll"),
      K = J.children("ul"),
      M = K.children("li"),
      N = M.outerHeight(),
      P = J.find(".br-next"),
      R = J.find(".br-previous"),
      U = 0,
      V = 12;
    G = parseInt(M.length / V), M % V !== 0 && G++, J.css({
      width: 4 * N,
      height: 3 * N
    }), o(0), P.on("click", function () {
      M.removeClass("show"), G - 1 > U ? (U++, o(U)) : (U = 0, o(U))
    }), R.on("click", function () {
      M.removeClass("show"), U > 0 ? (U--, o(U)) : (U = G - 1, o(U))
    }), e.fn.digits = function () {
      return this.each(function () {
        e(this).text(e(this).text().replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,"))
      })
    }, e(".notes-number").digits();
    var g = e("#posts"),
      W = e("#more-posts"),
      X = [],
      Y = 1;
    l(), W.on("click", function () {
      X.appendTo(g), msnry.addItems(X), a(), Tumblr.LikeButton.get_status_by_page(Y), l(), void 0 !== c && e.getScript("http://" + c + ".disqus.com/count.js"), e(".notes-number").digits(), scLoad()
    });
    var Z = e("header"),
      ee = e("body"),
      te = e("footer"),
      se = e("#top-button");
    setTimeout(function () {
      d()
    }, 100)
  }
}(jQuery);
}

初回にページを見てもきちんとiframeの高さ自動が反映するようにする、というのを叶える方法はないでしょうか?
どうぞよろしくお願いいたします。

試したこと

*stickedのpositionを変える
*CSSから.stickedを削除する
*iframeやiframeが入っているボックスにfooterと同じz-indexを指定

JSはまったくわからないため、JSの該当部分の削除や書き換えはできていません。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kei344

    2019/02/05 09:35

    問題が起きるサイトのURL、もしくは状況の再現が可能なHTML/CSSを質問文に追記ください。

    キャンセル

  • 退会済みユーザー

    退会済みユーザー

    2019/02/05 10:39 編集

    問題が起きているサイトのURL(このサイトのMAILというページです)
    https://theme-test99.tumblr.com/

    Chrome、Vivaldで見ると上記のような状態ですが、EdgeでMAILページに行くと反映されているようです。

    キャンセル

回答 1

checkベストアンサー

0

masonryが高さを指定してしまうことが問題につながっているようなので、そのページだけ外すか、そのページだけに効くようにCSSを書くようにするとかどうでしょう。

/* たとえばbody要素や包括する要素にid="mailpage"などをつける */
#mailpage .posts {
    height: auto;
}
#mailpage footer.sticked {
    position: static;
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/02/07 12:27 編集

    調べてみて、以下のようなスクリプトを見つけたので使ってみました。

    <script>
    $(window).bind("load", function(){
    var url = location.href;
    if(url == "https://theme-test99.tumblr.com/mail"){
    $('body').addClass('mailpage');
    }

    });
    </script>

    教えていただいたのはIDですが、addClassとあったので
    .mailpage として以下のように書きました。

    .mailpage .posts {
    height: auto!important;
    }
    .mailpage footer.sticked {
    position: static!important;
    }

    imporantがない状態では表示は変わらず(潜り込んだままです)
    書くとfooterが上に上がってきてStickyにならなくなってしまいました。
    mailページにのみクラスを適用、というのはできています。

    キャンセル

  • 2019/02/07 13:36

    とりあえずこれも追加ですね。
    .mailpage .post {
    position: static!important;
    }
    このページでStickyである必要性をそこまで感じなかったため外していますが、Stickyを使うなら、static指定せず、JavaScriptでfooter.stickedの高さを検出して.blog-contentのpadding-bottomにそれを設定したりする必要があります。

    キャンセル

  • 2019/02/07 18:48

    書いてくださったものを追記したところ、目的の表示にすることができたみたいです。いろいろと勉強にもなりました。本当にありがとうございます。

    キャンセル

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

  • ただいまの回答率 87.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る