CSS多维数据集,无法与网格对齐

时间:2013-06-26 16:19:12

标签: css3 3d transform

所以我的目标是将这些立方体放在网格上并使它们排成一行,可拖动并且可以弹出。我根据this example得到的立方体运行良好,但我并没有完全理解一些机制,因此我遇到了一些问题。

  1. 立方体开始比旋转后的大。要看到这一点,只需单击“1”即可应用“show-front”类,而您仍然在正面。它会立即缩小。的固定

  2. 立方体轴不居中,因此当它旋转时,它会以不同的xy坐标结束。

  3. 在CSS中,我将大小设置为200x200(或任何因子为25),但由于Z变换,它并不完全正确。 这个大部分是固定的,请参见底部的更新。

  4. 我该如何解决这三件事?

    这是小提琴: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);
    }
    

1 个答案:

答案 0 :(得分:1)

由于保证金和填充,这些数字已经关闭。

尝试:

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

添加了保证金和填充= 0

demo

我现在改变了整个坐标系。如果使立方体中心位于0 0坐标,则更容易。现在所有旋转的东西只需要旋转,这更容易弄明白。

如果您确实将前面打成z = 0平面,请在基准面设置全局偏移。