2022.08.28

HTML・CSS

親要素にtransformが設定されている場合のposition: fixed;

通常、position: fixed;でtop: 0;left: 0;の場合、画面の左上が基準位置になります。しかし、親要素(先祖を含む)にtransformが設定されている場合、子要素のposition: fixed;は親要素からの相対位置になってしまいます。
デモページはこちら

以下のhtml構造で確認します。

<p>transform設定あり</p>
<div class="div-parent-01">
  <div class="div-child"></div>
</div>
<p>transform設定なし</p>
<div class="div-parent-02">
  <div class="div-child"></div>
</div>

CSSは以下になります。クラス名div-parent-01の方にだけ、transform: translate(0);を設定します。結果、position: fixed;を設定した子要素が親要素からの相対位置で配置されます。

.div-parent-01 {
  min-height: 100px;
  margin: 0 0 1em;
  background-color: #fff;
  transform: translate(0);
}
.div-parent-02 {
  min-height: 100px;
  margin: 0 0 1em;
  background-color: #fff;
}
.div-child {
  position: fixed;
  top: 0;
  left: 0;
  width: 80px;
  height: 40px;
}
.div-parent-01 .div-child {
  background-color: red;
}
.div-parent-02 .div-child {
  background-color: blue;
}

この問題を解決するには、以下のどちらかで実装します。

1. 親要素のtransformを外す
2. 子要素のposition: fixed;を親要素の外に出す

position: fixed;で表示したい要素はhtmlのどこに記述されていても大して変わらないので、親要素のtransformが外せない場合は「2」で実装します。

最悪bodyタグにtransformが設定されていて外せない場合は、bodyタグの外側(bodyの閉じタグの後)にposition: fixed;の要素を記述します。

関連記事

2022.05.14

HTML・CSS

positionプロパティのstickyの使い方

positionプロパティのstickyの使い方と注意点です。divタグに以下のCSSを適用して動作を確認します。 デモページはこちら positionプロパテ…

2024.09.21

HTML・CSS

mask-imageを利用したSVGの画像切り抜き

CSSのmask-imageプロパティを利用して、SVGで画像を切り抜きます。デモページはこちら まず、以下をmask.svgとして保存します。 共通のCSSは…

2025.08.14

HTML・CSS

1行のテキストの均等割りについて

デザイン上テキストが1行に限定されている場合のテキストの均等割りを確認します。デモページはこちら 以下のhtml構造で確認します。 CSSは以下になります。te…

2020.10.10

HTML・CSS

CSSのflexbox使用時の注意点

デモページはこちら CSSのflexbox使用時の注意点をまとめました。flexboxは使い方によってレイアウトに表示崩れが発生するパターンがあります。 fle…

2020.10.14

HTML・CSS

CSSのtransformプロパティによるsvgの反転

デモページはこちら CSSのtransformプロパティでsvgを反転します。以下のsvgをオリジナルとし、複製してidを付与してCSSを適用します。svg以外…

上に戻る