CSS 渲染平面

标签 css css-transforms

我有一个可以在这里查看的简单示例:

.card {
  position: absolute;
  width: 200px;
  height: 200px;
  background-color: tomato;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  transform-style: preserve-3d;
  perspective: 700px;
}

.plane {
  position: absolute;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  padding: 15px;
  background: #ee8c25;
  transition: transform 1000ms linear;
  box-sizing: border-box;
}

.plane:first-child {
  /*transform: rotateY(180deg);*/
}

.plane:last-child {
  /*transform: rotateY(180deg);*/
  background: #d14730;
  backface-visibility: visible;
}
<div class="card">
  <div class="plane">First Plane</div>
  <div class="plane">Second Plane</div>
</div>

有问题的代码是这个

.plane:first-child {
  /*transform: rotateY(180deg);*/
}

.plane:last-child {
/*   transform: rotateY(180deg); */
  background: #d14730;
  backface-visibility: visible;
}

它包含两个绝对定位的元素,它们占据了父元素的整个空间。第二个平面显示在第一个平面上方的原因是因为它在源代码中位于后面,我明白了。

我不明白的是,为什么当第二个 .plane 元素旋转 180 度时,它不再位于前一个元素的前面,而是转到“后面”。但是如果第一个 .plane 旋转而第二个没有旋转,第一个仍然在前面,它不会像第二个元素那样后退。

这是怎么回事?

最佳答案

如果您删除 transform-style: preserve-3d; 它会在同一平面上完成。我猜这是有道理的,因为它在第一个 .plane 之前转换。

我不确定您是否可以在保留 3d 空间的同时进行变换并使其在第一个 .plane 上方完成。因为如果元素在 Y 轴上旋转 180 度,并在 3D 空间中渲染,那么这意味着它们将远离一切。该元素的样式将与从正面看起来完全相同,但在背面相反。 Z 轴本质上就像一面镜子。

enter image description here

查看下面的代码(删除了 transform-style: preserve-3d;)并查看上面显示激活 transform: rotateY(180deg) css 时的结果的 gif通过控制台。

.card {
  position: absolute;
  width: 200px;
  height: 200px;
  background-color: tomato;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  /*transform-style: preserve-3d;*/
  perspective: 700px;
}

.plane {
  position: absolute;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  padding: 15px;
  background: #ee8c25;
  transition: transform 1000ms linear;
  box-sizing: border-box;
}

.plane:first-child {
  /*transform: rotateY(180deg);*/
}

.plane:last-child {
  /*transform: rotateY(180deg);*/
  background: #d14730;
  backface-visibility: visible;
}
<div class="card">
  <div class="plane">First Plane</div>
  <div class="plane">Second Plane</div>
</div>

enter image description here

关于CSS 渲染平面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51800336/

相关文章:

html - 二维变换过渡不适用于 IE11 中的 VW 和 VH 单元

css - JSF加载资源为静态资源

html - CSS3 旋转在具有 2 个嵌套旋转的 Firefox 和 IE 中不起作用

javascript - 如何将div的高度设置为浏览器的垂直空间

javascript - 指定字体名称的一部分

css - 如何更改 css transform-origin 但保留转换

wordpress - 让超链接在矩形框中以#3D 变换方式垂直滚动

html - 创建 CSS Skew 以触摸左右 Angular

javascript - 当鼠标悬停在另一个 div 上时,使用淡入淡出等任何效果更改 div 中的图像

jquery - 尝试获得更平滑的视差滚动速度和/或深度感知