【问题标题】:Change CSS transform rotation axis?改变CSS变换旋转轴?
【发布时间】:2013-06-28 14:42:31
【问题描述】:

我花了很长时间和 SO 的大量帮助来构建这个立方体并获得 Z:0 的面,因此正好是 200x200 像素。我希望它旋转,以便所有面都是 200x200 并且在相同的位置。

小提琴:http://jsfiddle.net/scottbeeson/phJpS/7/

相对 CSS:

.itemView {
    -webkit-perspective:2000;
    -webkit-margin-start: 0 !important;
    -webkit-margin-before: 0 !important;
    -webkit-margin-end: 0 !important;
    -webkit-margin-after: 0 !important;
}

.cube {
    position: absolute;
    -webkit-transform-style: preserve-3d;
    -webkit-transition: -webkit-transform 1s;
}

.cube figure {
    display: block;
    position: absolute;
    width: 198px;
    height: 198px;
    border: 0px solid black;
    color: white;
    margin: 0px;
    padding: 0px;
}

.cube.panels-backface-invisible figure {
    -webkit-backface-visibility: hidden;
}

.cube .front  {     
    background-color: #555;
    border: 1px solid #ccc; 
}
.cube .back   {
    background-color: #555;
    border: 1px solid #ccc;
}
.cube .right  { 
    background-color: #555;
    border: 1px solid #ccc;
}
.cube .left   { 
    background-color: #555;
    border: 1px solid #ccc;
    }
.cube .top    {
    background-color: #555;
    border: 1px solid #ccc;
    }
.cube .bottom { 
    background-color: #555;
    border: 1px solid #ccc;
    }

.cube .front  {
    -webkit-transform: translateZ(0px );
}
.cube .back   {
    -webkit-transform: rotateX( -180deg ) translateZ( 200px );
}
.cube .right {
    -webkit-transform: rotateY(   90deg ) translateZ( 100px ) translateX(100px);
}
.cube .left {
    -webkit-transform: rotateY(  -90deg ) translateZ( 100px) translateX(-100px);
}
.cube .top {
    -webkit-transform: rotateX(   90deg ) translateZ( 100px ) translateY(-100px);
}
.cube .bottom {
    -webkit-transform: rotateX(  -90deg ) translateZ( 100px ) translateY(100px);
}

.cube.show-front {
    -webkit-transform: translateZ( 0px );
}
.cube.show-back {
    -webkit-transform: rotateX( -180deg );
}
.cube.show-right {
    -webkit-transform: rotateY(  -90deg );
}
.cube.show-left {
    -webkit-transform: rotateY(   90deg );
}
.cube.show-top {
    -webkit-transform: rotateX(  -90deg );
}
.cube.show-bottom {
    -webkit-transform: rotateX(   90deg );
}

【问题讨论】:

  • 我也真的不知道为什么观点不是“正面”在小提琴中。它与我在本地使用的 CSS 相同,看起来不错。

标签: css 3d transform


【解决方案1】:

你没有给我时间回答另一个问题:-)

我的意思是在立方体下添加另一个级别,名为 base。并在 Z 平面上应用一个运动:

.base {
     width: 100%;
     height: 100%;
     position: absolute;
     -webkit-transform-style: preserve-3d;
        -moz-transform-style: preserve-3d;
          -o-transform-style: preserve-3d;
             transform-style: preserve-3d;
     -webkit-transform: translateZ(-100px );
}

这样,演示的所有其余部分都可以正常工作,并且您可以轻松地将立方体移动到您想要的位置。

New demo

【讨论】:

  • 我添加了一个网格,类似于我在我的应用程序中的网格,它在小提琴中几乎是完美的:jsfiddle.net/scottbeeson/phJpS/10 但由于某种原因它仍然在我的应用程序中“放大”了一点,比如20 像素关闭。我已经完全从小提琴中复制了 CSS。它一定是我在界面中更高的东西,但我不知道是什么:(
  • 我是个白痴。我在 HTML 中将类名更改为 .cubeBase,但在 CSS 中没有。工作很棒。非常感谢您的帮助!!!
【解决方案2】:

所以我通过应用以下翻译来破解它,这些翻译基本上只是在立方体在错误的轴上旋转时移动它。它最终会出现在应有的位置,如果必须,我会使用它,但如果其他人可以提供帮助,我宁愿它正确旋转。

.cube.show-front {
    -webkit-transform: translateZ( 0px );
}
.cube.show-back {
    -webkit-transform: rotateX( -180deg ) translateZ(200px) translateY(-200px);
}
.cube.show-right {
    -webkit-transform: rotateY(  -90deg ) translateX(-200px);
}
.cube.show-left {
    -webkit-transform: rotateY(   90deg ) translateZ(200px);
}
.cube.show-top {
    -webkit-transform: rotateX(  -90deg ) translateZ(200px);
}
.cube.show-bottom {
    -webkit-transform: rotateX(   90deg ) translateY(-200px);
}

更新小提琴:http://jsfiddle.net/scottbeeson/phJpS/8/

【讨论】:

    猜你喜欢
    • 2018-03-28
    • 2022-01-26
    • 1970-01-01
    • 2019-01-10
    • 1970-01-01
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多