1. ホーム
  2. css

[解決済み] 私の位置:フレックスボックスを使用すると、スティッキー要素がスティッキーにならない

2022-04-24 22:06:50

質問

ちょっと引っかかったので、これをシェアしておこうと思います。 position: sticky + フレックスボックスの不具合。

粘着性のある div は、ビューをフレックス ボックス コンテナに切り替えるまでは正常に動作していましたが、フレックス ボックス親でラップすると突然 div が粘着しなくなりました。

.flexbox-wrapper {
  display: flex;
  height: 600px;
}
.regular {
  background-color: blue;
}
.sticky {
  position: -webkit-sticky;
  position: sticky;
  top: 0;
  background-color: red;
}
<div class="flexbox-wrapper">
  <div class="regular">
    This is the regular box
  </div>
  <div class="sticky">
    This is the sticky box
  </div>
</div>

問題を示すJSFiddle

どのように解決するのですか?

フレックスボックス要素のデフォルトは stretch のように、すべての要素の高さが同じであるため、スクロールさせることができません。

追加 align-self: flex-start をsticky要素に追加すると、heightがautoになり、スクロールが可能になり、修正されました。

現在、これは 対応 は、すべての主要なブラウザで利用可能ですが、Safariはまだ -webkit- の接頭辞に問題があり、Firefox 以外のブラウザでは position: sticky テーブルを使用します。

.flexbox-wrapper {
  display: flex;
  overflow: auto;
  height: 200px;          /* Not necessary -- for example only */
}
.regular {
  background-color: blue; /* Not necessary -- for example only */
  height: 600px;          /* Not necessary -- for example only */
}
.sticky {
  position: -webkit-sticky; /* for Safari */
  position: sticky;
  top: 0;
  align-self: flex-start; /* <-- this is the fix */
  background-color: red;  /* Not necessary -- for example only */
}
<div class="flexbox-wrapper">
  <div class="regular">
    This is the regular box
  </div>
  <div class="sticky">
    This is the sticky box
  </div>
</div>

解決策を示すJSFiddle