1. ホーム
  2. html

[解決済み] transform3d」がposition: fixed childrenで動作しない。

2022-05-08 16:10:42

質問

通常のCSSでは、固定divは指定された場所に配置されるのですが( top:0px , left:0px ).

これは、translate3d トランスフォームを持つ親がある場合、尊重されないようです。私は何かを見ていないのでしょうか?他の webkit-transform の style や transform origin オプションを試しましたが、うまくいきませんでした。

を添付しました。 JSFiddle 黄色いボックスがコンテナ要素の中ではなく、ページの上隅にあると予想される例です。

以下に、このフィドルの簡易版を掲載します。

#outer {
    position:relative; 
    -webkit-transform:translate3d(0px, 20px , 0px); 
    height: 300px; 
    border: 1px solid #5511FF; 
    padding: 10px;
    background: rgba(100,180,250, .8); 
    width: 80%;
}
#middle{
    position:relative; 
    border: 1px dotted #445511; 
    height: 300px; 
    padding: 5px;
    background: rgba(250,10,255, .6);
}
#inner {
    position: fixed; 
    top: 0px;
    box-shadow: 3px 3px 3px #333; 
    height: 20px; 
    left: 0px;
    background: rgba(200,180,80, .8); 
    margin: 5px; 
    padding: 5px;
}
<div id="container">
    Blue: Outer, <br>
    Purple: Middle<br>
    Yellow: Inner<br>
    <div id="outer"> 
        <div id="middle">
            <div id="inner">
                Inner block
            </div>
        </div>
    </div>
</div>

どうすれば translate3d を固定された位置の子で動作させることができますか?

解決方法は?

これは transform のように、新しいローカル座標系を作成します。 W3C仕様 :

HTML 名前空間において none を指定すると、スタッキングコンテキストとコンテナブロックの両方が作成されます。オブジェクトは、固定配置された子孫のための包含ブロックとして機能します。

これは、固定位置がビューポートではなく、変換された要素に固定されるようになることを意味します。

私が知る限りでは、現在のところ回避策はありません。

Eric Meyerの記事にも記載されています。 CSS Transformsによる固定要素の固定解除 .