【发布时间】:2013-06-23 21:46:39
【问题描述】:
所以我的目标是将这些立方体放在一个网格上,并让它们排列整齐、可拖动和可捕捉。我根据this example 让立方体运行良好,但我没有完全理解一些机制,因此遇到了一些问题。
立方体一开始就比它旋转后的大。要查看这一点,只需单击应用“show-front”类的“1”,而您仍在正面。它会立即缩小。 固定
立方体轴没有居中,所以当它旋转时,它会在不同的 xy 坐标处结束。
在 CSS 中,我将大小设置为 200x200(或任何 25 倍),但由于 Z 变换,它并不完全正确。 这个大部分是固定的,请参阅底部的更新。
我该如何解决这三个问题?
这里是小提琴:http://jsfiddle.net/scottbeeson/phJpS/
这里是 CSS 的重要部分:
.itemView {
width: 200px;
height: 200px;
/*position: relative;*/
/*margin: 0 auto 40px;*/
/*border: 1px solid #CCC;*/
-webkit-perspective: 1000px;
-moz-perspective: 1000px;
-o-perspective: 1000px;
perspective: 1000px;
-webkit-margin-start: 0 !important;
-webkit-margin-before: 0 !important;
-webkit-margin-end: 0 !important;
-webkit-margin-after: 0 !important;
}
.cube {
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-transition: -webkit-transform 1s;
-moz-transition: -moz-transform 1s;
-o-transition: -o-transform 1s;
transition: transform 1s;
}
.cube figure {
display: block;
position: absolute;
width: 196px;
height: 196px;
border: 2px solid black;
color: white;
}
.cube.panels-backface-invisible figure {
-webkit-backface-visibility: hidden;
-moz-backface-visibility: hidden;
-o-backface-visibility: hidden;
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: cornflowerblue;
border: 1px solid #ccc;
}
.cube .bottom {
background-color: #555;
border: 1px solid #ccc;
}
.cube .front {
-webkit-transform: translateZ( 99px );
}
.cube .back {
-webkit-transform: rotateX( -180deg ) translateZ( 99px );
}
.cube .right {
-webkit-transform: rotateY( 90deg ) translateZ( 99px );
}
.cube .left {
-webkit-transform: rotateY( -90deg ) translateZ( 99px );
}
.cube .top {
-webkit-transform: rotateX( 90deg ) translateZ( 99px );
}
.cube .bottom {
-webkit-transform: rotateX( -90deg ) translateZ( 99px );
}
.cube.show-front {
-webkit-transform: translateZ( -99px );
}
.cube.show-back {
-webkit-transform: translateZ( -99px ) rotateX( -180deg );
}
.cube.show-right {
-webkit-transform: translateZ( -99px ) rotateY( -90deg );
}
.cube.show-left {
-webkit-transform: translateZ( -99px ) rotateY( 90deg );
}
.cube.show-top {
-webkit-transform: translateZ( -99px ) rotateX( -90deg );
}
.cube.show-bottom {
-webkit-transform: translateZ( -99px ) rotateX( 90deg );
}
.itemHandle {
position: absolute;
top: 0px;
left: 0px;
right: 0px;
cursor: move;
white-space: nowrap;
background-color: cornflowerblue;
text-align: left;
/*border-top-right-radius: 15px;*/
}
另外,如果有人觉得这些问题应该是单独的问题,那也没关系。我只是认为它们都是同一个“问题”的一部分,这比发布相同的小提琴 3 次要容易。
更新 #1、#3 (updated fiddle)
我能够将正面的 transformZ 更改为 0 并调整其余的变换,以基本上使立方体的正面与“workArea”位于同一平面上。这要好得多,但视角有点偏离,就好像你没有正面看立方体一样。除非脸是半透明的,否则不明显。这是更新后的 CSS:
.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);
}
【问题讨论】:
-
我删除了除 Chrome 供应商特定之外的所有 CSS,因为这是我正在调试的内容。太混乱了。
-
在我的回答中添加了示例,希望这是你想要的