使子元素不受父元素旋转的影响
Make child element unaffected by rotation of parent element
我有两个 div 元素:一个旋转的父元素和一个我需要不受父元素旋转影响的子元素。
为此,我尝试将子元素沿与父元素相反的方向旋转。这在某些情况下有效。例如,如果我像这样旋转元素 ...
.parent {
transform: rotate(30deg);
}
.child {
transform: rotate(-30deg);
}
...子元素将显示为笔直且不失真。但是如果我用 rotateX ...
旋转它们
.parent {
transform: rotateX(30deg);
}
.child {
transform: rotateX(-30deg);
}
...子元素看起来还是有点变形
实际代码同时使用了 rotateX 和 rotateZ 以使父元素显示为等距。目前看起来像这样:
.happy_parent {
width: 100px;
height: 100px;
background-color: green;
transform: rotate(30deg);
}
.happy_child {
width: 50px;
height: 50px;
background-color: yellow;
transform: rotate(-30deg);
}
.sad_parent {
width: 100px;
height: 100px;
background-color: green;
transform: rotateX(-60deg) rotateZ(45deg);
}
.sad_child {
width: 50px;
height: 50px;
background-color: yellow;
transform: rotateX(60deg) rotateZ(45deg);
}
<div class="happy_parent">
<div class="happy_child"></div>
</div>
<div class="sad_parent">
<div class="sad_child"></div>
</div>
请注意上面的 div 都正确渲染了,但是下面的子 div 仍然变形了。
我在这里错过了什么?
innerElement
(childElement
) 在 3D 旋转时无法通过在 -ve
deg
中旋转回来保持初始状态。
二维旋转时有效
但是您可以尝试 transform-style: preserve-3d
以查看 3D
中的形状,当使用 Z
坐标旋转时效果也保持形状而不是仅显示在 [=19 中=].
在3D旋转中你也必须颠倒旋转顺序
You can try to remove the transform-style: preserve-3d
and see the effect
.happy_parent {
width: 100px;
height: 100px;
background-color: green;
transform: rotate(30deg);
}
.happy_child {
width: 50px;
height: 50px;
background-color: yellow;
transform: rotate(-30deg);
}
.sad_parent {
width: 100px;
height: 100px;
background-color: green;
transform: rotateX(-60deg) rotateZ(45deg);
transform-style: preserve-3d;
}
.sad_child {
width: 50px;
height: 50px;
background-color: yellow;
transform: rotateZ(-45deg) rotateX(60deg);
}
<div class="happy_parent">
<div class="happy_child"></div>
</div>
<br><br><br><br>
<div class="sad_parent">
<div class="sad_child"></div>
</div>
我有两个 div 元素:一个旋转的父元素和一个我需要不受父元素旋转影响的子元素。
为此,我尝试将子元素沿与父元素相反的方向旋转。这在某些情况下有效。例如,如果我像这样旋转元素 ...
.parent {
transform: rotate(30deg);
}
.child {
transform: rotate(-30deg);
}
...子元素将显示为笔直且不失真。但是如果我用 rotateX ...
旋转它们.parent {
transform: rotateX(30deg);
}
.child {
transform: rotateX(-30deg);
}
...子元素看起来还是有点变形
实际代码同时使用了 rotateX 和 rotateZ 以使父元素显示为等距。目前看起来像这样:
.happy_parent {
width: 100px;
height: 100px;
background-color: green;
transform: rotate(30deg);
}
.happy_child {
width: 50px;
height: 50px;
background-color: yellow;
transform: rotate(-30deg);
}
.sad_parent {
width: 100px;
height: 100px;
background-color: green;
transform: rotateX(-60deg) rotateZ(45deg);
}
.sad_child {
width: 50px;
height: 50px;
background-color: yellow;
transform: rotateX(60deg) rotateZ(45deg);
}
<div class="happy_parent">
<div class="happy_child"></div>
</div>
<div class="sad_parent">
<div class="sad_child"></div>
</div>
请注意上面的 div 都正确渲染了,但是下面的子 div 仍然变形了。
我在这里错过了什么?
innerElement
(childElement
) 在 3D 旋转时无法通过在 -ve
deg
中旋转回来保持初始状态。
二维旋转时有效
但是您可以尝试 transform-style: preserve-3d
以查看 3D
中的形状,当使用 Z
坐标旋转时效果也保持形状而不是仅显示在 [=19 中=].
在3D旋转中你也必须颠倒旋转顺序
You can try to remove the
transform-style: preserve-3d
and see the effect
.happy_parent {
width: 100px;
height: 100px;
background-color: green;
transform: rotate(30deg);
}
.happy_child {
width: 50px;
height: 50px;
background-color: yellow;
transform: rotate(-30deg);
}
.sad_parent {
width: 100px;
height: 100px;
background-color: green;
transform: rotateX(-60deg) rotateZ(45deg);
transform-style: preserve-3d;
}
.sad_child {
width: 50px;
height: 50px;
background-color: yellow;
transform: rotateZ(-45deg) rotateX(60deg);
}
<div class="happy_parent">
<div class="happy_child"></div>
</div>
<br><br><br><br>
<div class="sad_parent">
<div class="sad_child"></div>
</div>