ホームページ  >  記事  >  ウェブフロントエンド  >  Position:sticky がブートストラップ フローティング レイアウトに遭遇したときの落とし穴記録

Position:sticky がブートストラップ フローティング レイアウトに遭遇したときの落とし穴記録

青灯夜游
青灯夜游転載
2018-10-10 17:41:133374ブラウズ

position:sticky 属性に初めて触れたとき、以前の多くの JS シーンがこの CSS 属性を使用して書き換えられることに気づきました。たとえば、Web サイトの右側にある多くの広告は、上にスクロールした後に修正する必要があります。これらは完全に粘着性のあるアプリケーションです。

今日お話したいのは、記事詳細ページの右側にあるディレクトリバーですが、ページが下にスライドすると、これもページ上部に固定されます。スクロールイベントをリッスンし、位置に基づいて判断するには、toggle 修正された解決策は、いくつかの理由により、スティッキーで書き直すことにしました。

これは数回のクリックで完了し、スクロール イベント リスナーを削除して、メニュー要素 .post-nav# に position:sticky; top:0 スタイルを追加しました。 ##、しかし、うまくいきません!

なんと! 困惑して、その理由を調べ始めました。これは、要素の親要素が

overflow:hidden などを追加するなど、オーバーフロー属性を処理した可能性があると書かれていましたが、調べてみるとそうではありませんでした。

そこで、ブートストラップ レイアウトに問題があるのではないか (実際には関連しているのではないか) と思い、デモを書きました。

<!DOCTYPE html>
<html>
<head>
  <title></title>
  <link href="//cdn.bootcss.com/bootstrap/4.1.1/css/bootstrap.min.css" rel="stylesheet">
  <style>
    body {font-size: 50px; font-weight: 900;}
    .main {height: 2000px; background: #eee}
    .menu {height: 200px; background: yellow}
    .ad {height: 200px; background: red; position: sticky; top: 0px;}
    .guess {height: 200px; background: blue;}
  </style>
</head>
<body>
<p class="container">
  <p class="row">
    <p class="col-md-8 main">content</p>
    <p class="col-md-4">
      <p class="menu">menu</p>
      <p class="ad">ad</p>
      <p class="guess">others</p>
    </p>
  </p>
</p>
</body>
</html>

しかし、問題はないと突然思いました。 Web サイトで使用されているブートストラップのバージョンが 3.x だったのを、バージョン 3.3.7 に変更したところ、問題が発生しました。

現時点では、4.x は flex レイアウトを使用していますが、3.x は依然として float フローティング レイアウトを使用しています。問題はここにあるはずです。

最終コード (この問題を参照):

<!DOCTYPE html>
<html>
<head>
  <title></title>
  <link href="//cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
  <style>
    body {font-size: 50px; font-weight: 900;}
    .main {height: 2000px; background: #eee}
    .side {height: 2000px;}
    .menu {height: 200px; background: yellow}
    .ad {height: 200px; background: red; position: sticky; top: 0px;}
    .guess {height: 200px; background: blue;}
  </style>
</head>
<body>
<p class="container">
  <p class="row">
    <p class="col-md-8 main">content</p>
    <p class="col-md-4 side">
      <p class="menu">menu</p>
      <p class="ad">ad</p>
      <p class="guess">others</p>
    </p>
  </p>
</p>
</body>
</html>

は最初の質問に対応します。メニューは

.col-md-3 要素に属しているため、右側の .col-md-3 は、左側の .col-md-9 と高度に一致する必要があります:

$(&#39;.side&#39;).height($(&#39;.main&#39;).height())
## というコード行を追加します。 # 左のコンテンツ領域で画像の読み込みが遅れているため、このコード行を継続的に実行する必要があります:

$(window).scroll(function() { 
 $(&#39;.side&#39;).height($(&#39;.main&#39;).height())

 // other code 
 // ...

})

要約: 上記はこの記事の全内容です。お役に立てば幸いです。誰もが学んでいます。関連チュートリアルの詳細については、

HTML ビデオ チュートリアル

をご覧ください。 関連する推奨事項:

php 公共福祉トレーニング ビデオ チュートリアル

以上がPosition:sticky がブートストラップ フローティング レイアウトに遭遇したときの落とし穴記録の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。