CSS 3D 变换与元素大小无关?

CSS 3D transform independent of element size?

是否可以定义一个 CSS 3D 变换,使其独立于变换元素的大小进行相同的变形?理想情况下,当元素 arbitrarily/fluidly 调整大小时会保留的内容。

我用 perspectivetransform: rotateY 进行了简单的转换。我看到随着变换后的元素改变大小,倾斜量也会改变(它似乎绕 Y 轴旋转得更多):

.perspective {
  perspective: 2000px;
}

.xform {
  transform: rotateY(45deg);
}

.xsmall {
  width: 100px;
}

.small {
  width: 200px;
}

.medium {
  width: 400px;
}

.large {
  width: 800px;
}
<div class="perspective">
  <img src="https://loremflickr.com/50/50" class="xsmall xform" />
</div>
<div class="perspective">
  <img src="https://loremflickr.com/50/50" class="small xform" />
</div>
<div class="perspective">
  <img src="https://loremflickr.com/50/50" class="medium xform" />
</div>
<div class="perspective">
  <img src="https://loremflickr.com/50/50" class="large xform" />
</div>

考虑到 perspective 的含义,这在物理上是有意义的,但我想要的是对任何大小的对象进行相同的转换。 (我的用例是将屏幕截图叠加在旋转设备框架的 PNG 上,并保持响应)。这可能吗?

您可以通过使用缩放变换调整大小来获得一致的变换效果,从而使整个图像变小以适合您想要的输出。

注意:放大可能会引入不必要的像素化。因此,只需在 medium-large 屏幕上通过旋转获得转换后的输出,然后添加媒体查询以缩小它。

这是你的例子:

.perspective {
  perspective: 2000px;
}

.xform {
  width: 100px;
  transform: rotateY(45deg);
}

.xsmall {
  transform: rotateY(45deg);
}

.small {
  margin-top: 150px;
  transform: rotateY(45deg) scale(2);
}

.medium {
  margin-top: 300px;
  transform: rotateY(45deg) scale(4);
}

.large {
  margin-top: 650px;
  transform: rotateY(45deg) scale(8);
}
<div class="perspective">
  <img src="https://loremflickr.com/50/50" class="xsmall xform" />
</div>
<div class="perspective">
  <img src="https://loremflickr.com/50/50" class="small xform" />
</div>
<div class="perspective">
  <img src="https://loremflickr.com/50/50" class="medium xform" />
</div>
<div class="perspective">
  <img src="https://loremflickr.com/50/50" class="large xform" />
</div>