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;の要素を記述します。

関連記事

2021.07.06

HTML・CSS

Photoshopのドロップシャドウをbox-shadowプロパティで適用

Photoshopのレイヤースタイルで作成したドロップシャドウを、box-shadowプロパティで適用します。デモページはこちら box-shadowプロパティ…

2024.09.22

HTML・CSS

linear-gradientで作る格子模様と市松模様

background-imageプロパティのlinear-gradientで、1pxの線のみの格子模様と塗りと塗り無しの市松模様を作成します。デモページはこちら…

2025.05.08

HTML・CSS

text-decorationを利用した文字の下線

text-decorationプロパティを利用して複数行の文字に下線を引きます。複数行に対応させるため、inline要素に適用します。デモページはこちら 以下の…

2025.08.14

HTML・CSS

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

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

2024.09.02

HTML・CSS

box-shadowとfilter: drop-shadowの違い

box-shadowプロパティとfilterプロパティのdrop-shadowを比較して違いを確認します。デモページはこちら filter: drop-shad…

上に戻る