transform-*
属性,和其他一些与渲染相关的属性,opacity
在 CSS 的继承含义中不会“继承”。相反,它们将视觉更改应用到整个元素,包括它的所有后代。对这些后代应用类似的东西transform: none;
并没有任何可见的效果,这只意味着这些元素不会自己转换,但它们仍然会与父元素一起转换——不是因为它们“继承”了它的样式,而是因为它们是部分的外观。
视觉上“撤消”后代的父元素转换(即使其看起来像未转换)的唯一方法是专门对其进行转换,以便从给定的角度来看,此转换的结果与它会看起来相同看起来完全没有变换。为了使这成为可能,转换后的元素本身和给定元素的所有中间祖先必须具有transform-style: preserve-3d
. 所需的“补偿”变换可以从生成的 3D 场景中计算出来,或者只是通过反复试验调整变换值来构建,例如
.items{
...
transform: translate3d(-51px, 11px, 29px) rotateX(-45deg);
transform-origin: 50% 100% 0px;
}
(见JSfiddle)。
不幸的是,这种解决方法不兼容,overlow:hidden
因为它(连同其他一些属性)有效地删除了transform-style: preserve-3d
. 因此,如果您需要剪辑转换元素的溢出部分并同时“撤消”其部分的转换,唯一适合您的解决方案是组织代码,使这部分不是后代转换后的元素了。