ホームページ > ウェブフロントエンド > CSSチュートリアル > なぜ `transform:rotate()` が `z-index` をキャンセルするのでしょうか?

なぜ `transform:rotate()` が `z-index` をキャンセルするのでしょうか?

Mary-Kate Olsen
リリース: 2024-12-23 20:43:14
オリジナル
431 人が閲覧しました

Why Does `transform: rotate()` Cancel Out `z-index`?

Transform(rotate) によって Z インデックスがキャンセルされる

動作を理解する

CSS では、transform プロパティを使用して新しい「スタッキング コンテキスト」を作成できます" 要素上で。これは、要素とその子がレンダリング プロセスで別のレイヤーを形成することを意味します。さらに、デフォルト以外の z-index 値を持つ要素も独自のスタッキング コンテキストを作成します。

問題の説明

提供されたコードでは、.test 要素にtransform:rotate(10deg);,これにより、スタッキングコンテキストが作成されます。次に、.test:after 疑似要素に z-index: -1 が割り当てられます。ただし、これは .test.

Reason

Z-index の背後に配置されるわけではなく、スタッキング コンテキスト内で動作します。 .test に -webkit-transform を設定すると、要素とその子の新しいスタッキング コンテキストが作成されます。結果として、.test:after の z-index: -1 は、.test スタッキング コンテキスト内の位置にのみ影響します。

解決策

この問題を解決するには、.test と.test:after は同じスタッキング コンテキストを共有します。これを実現する 1 つの方法は、ラッピング コンテナーに .test を配置し、代わりにコンテナーを回転させることです。

更新されたコードは次のとおりです:

.wrapper {
  -webkit-transform: rotate(10deg);
}

.test {
  width: 150px;
  height: 40px;
  margin: 30px;
  line-height: 40px;
  position: relative;
  background: white;
}

.test:after {
  width: 100px;
  height: 35px;
  content: "";
  position: absolute;
  top: 0;
  right: 2px;
  -webkit-box-shadow: 0 5px 5px #999;
  -webkit-transform: rotate(3deg);
  transform: rotate(3deg);
  z-index: -1;
}

<div class="wrapper">
  <div class="test">z-index is canceled.</div>
</div>
ログイン後にコピー

この例ではを実行すると、変換回転が .wrapper コンテナに適用され、.test と .test:after の両方に単一のスタッキング コンテキストが作成されます。これにより、.test:after の z-index: -1 が期待どおりに有効になります。

以上がなぜ `transform:rotate()` が `z-index` をキャンセルするのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート