position: sticky を設定したが、枠がスクロールに追従しない - CSS

Webページでスタイルにposition: sticky;を瀬ってしたにもかかわらず、枠がスクロールに追尾しない現象について紹介します。

現象の確認

現象を確認します。以下のコードを準備します。
not-set-top-wrong.css
.header {
  background-color: #adcfe8;
  height: 64px;
}

.footer {
  background-color: #b3bfc7;
  height: 680px;
}

.container {
  display: flex;
}

.LeftColumn {
  flex: 1;
  background-color: #e2d588;
  height: 1200px;
}

.CenterColumn {
  flex: 2;
  background-color: #dec05d;
  height: 1200px;
}

.RightColumn {
  flex: 1;
  background-color: #e1ad65;
  position: sticky;
  height: 180px;
}
not-set-top-wrong.html
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <title></title>
  <link rel="stylesheet" href="not-set-top-wrong.css" />
</head>
<body>
  <div class="header">
    ヘッダです。
  </div>
  <div class="container">
    <div class="LeftColumn">
      左カラムです。<br />
      A<br />
      B<br />
      C<br />
      D<br />
      E<br />
      F<br />
      G<br />
      H<br />
      I<br />
      J<br />
    </div>
    <div class="CenterColumn">
      中央カラムです<br />
      あ<br />
      い<br />
      う<br />
      え<br />
      お<br />
    </div>
    <div class="RightColumn">
      右カラムです。<br />
      1<br />
      2<br />
      3<br />
      4<br />
      5<br />
    </div>
  </div>
  <div class="footer">
    フッタです。
  </div>
</body>
</html>

上記のページをWebブラウザで表示します。下図のページが表示されます。


ページをスクロールします。右側の枠はposition: sticky; が設定されていますが、スクロールアウトしてしまいます。


さらにスクロールすると枠がすべてスクロールアウトしてしまいます。

原因

右側の position: sticky; が指定されている枠に top プロパティが設定されていないためです。
top プロパティを指定しない場合、sticky が設定されていてもスクロールアウトしてしまいます。

対処法

topプロパティを設定します。
not-set-top-wrong.css RightColumnクラス 変更前
.RightColumn {
  flex: 1;
  background-color: #e1ad65;
  position: sticky;
  height: 180px;
}
not-set-top-wrong.css RightColumnクラス 変更後
.RightColumn {
  flex: 1;
  background-color: #e1ad65;
  position: sticky;
  top:16px;
  height: 180px;
}

修正後Webページを表示しスクロールします。右側の枠が追従してスクロールすることが確認できます。


著者
iPentecのメインデザイナー
Webページ、Webクリエイティブのデザインを担当。PhotoshopやIllustratorの作業もする。
掲載日: 2021-04-29
iPentec all rights reserverd.