为什么 z-index 会受到 transform 的影响?

Why is z-index affected by transform?

所以我有一个图标,当你点击卡片时你可以翻转它。图标是卡片的一个元素 div.

它们在翻转时有相同的动画(见下面的代码)。

fiddle中,点击左卡有transformY,右卡根本没有transform。出于展示目的,我将动画和过渡的持续时间设置为 2 秒,这样您就可以看到左侧卡片中出了什么问题。 z-index 和右边卡片中的图标完全不同。

我很想听听你们的意见为什么会发生这种情况,我很想听听我应该怎么做才能让它正常工作。谢谢!

/* FRONTFLIP */

@-webkit-keyframes frontFlip {
  0% {
    z-index: -1;
    -webkit-transform: translate(-50%, -25%) rotateX(-180deg);
    transform: translate(-50%, -25%) rotateX(-180deg);
  }
  50% {
    -webkit-transform: translate(-50%, -75%) rotateX(-270deg);
    transform: translate(-50%, -75%) rotateX(-270deg);
  }
  100% {
    z-index: 1;
    -webkit-transform: translate(-50%, -50%) rotateX(-360deg);
    transform: translate(-50%, -50%) rotateX(-360deg);
  }
}


/* BACKFLIP */

@-webkit-keyframes backFlip {
  0% {
    z-index: 1;
    -webkit-transform: translate(-50%, -50%) rotateX(-360deg);
    transform: translate(-50%, -50%) rotateX(-360deg);
  }
  50% {
    z-index: -1;
    -webkit-transform: translate(-50%, -75%) rotateX(-270deg);
    transform: translate(-50%, -75%) rotateX(-270deg);
  }
  100% {
    z-index: -1;
    -webkit-transform: translate(-50%, -25%) rotateX(-180deg);
    transform: translate(-50%, -25%) rotateX(-180deg);
  }
}

这是因为规范描述了不同于值 none 的转换应该创建一个新的 stacking context.

在 MDN 上:

If the property has a value different than none, a stacking context will be created. In that case the object will act as a containing block for position: fixed elements that it contains.