我正在制作一个通知系统。我希望这个通知显示为一个会转动的盒子,有点像 iOS 中的一些通知,屏幕顶部会像立方体一样旋转。
现在,立方体的正面和背面应该是透明的/与背景颜色相同。当它转动时,一个阴影应该落在不平行于观察者正面的侧面上,就好像有一盏灯照在盒子上。这可以做到吗?
更清楚一点:由于盒子的正面和背面与背景颜色相同,所以当转动盒子时,它看起来不像是一个盒子转动,而是一张旋转到位的纸。所以我想要的是立方体的面根据它们的角度而不是观察者得到阴影。
例如,一旦正面(因为它与背景颜色的颜色相同,您无法真正看到)旋转 1 度,它应该会变得更暗/更亮。另一个学位,多一点。这样只有在与用户直接平行时才会显示脸部的真实颜色。这将产生有一个盒子而不是一张纸的错觉。
我在立方体上使用本教程:http: //desandro.github.io/3dtransforms/docs/cube.html
这是一个小提琴:http: //jsfiddle.net/BqJMW/3/
另一个问题是,如果你明白我的意思,目前的文本似乎有点牵强。通常情况下transform: translateZ(-25px);
(见下面的代码)#cube
应该可以解决这个问题,但它似乎仍然不成比例。
CSS
body {
background: #ebebeb;
}
.container {
width: 200px;
height: 50px;
position: relative;
-webkit-perspective: 1000px;
perspective: 1000px;
}
#cube {
width: 100%;
height: 100%;
position: absolute;
-webkit-transform-style: preserve-3d;
transform-style: preserve-3d;
-webkit-transition: -webkit-transform 1s;
transition: transform 1s;
-webkit-transform: translateZ(-25px);
transform: tranlateZ(-25px);
}
#cube figure {
margin:0;
display: block;
position: absolute;
width: 100%;
height: 100%;
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
}
#cube .front {
background: transparant;
-webkit-transform: translateZ(25px);
transform: translateZ(25px);
}
#cube .top {
background: green;
-webkit-transform: rotateX(-90deg) translateZ(25px);
transform: rotateX(-90deg);
}
#cube .back {
background: transparant;
-webkit-transform: rotateX(180deg) translateZ(25px);
transform: rotate(180deg);
}
#cube.show-front {
-webkit-transform:translateZ(-25px);
tranform: translateZ(-25px);
}
#cube.show-top {
-webkit-transform: translateZ(-25px);
transform: translateZ(-25px);
-webkit-transform: rotateX(90deg);
transform: rotateX(90deg);
}
#cube.show-back {
-webkit-transform: translateZ(-25px);
transform: translateZ(-25px);
-webkit-transform: rotateX(180deg);
transform: rotateX(180deg);
}
HTML
<section class="container">
<div id="cube">
<figure class="front">Front</figure>
<figure class="top">Your notification</figure>
<figure class="back">Back</figure>
</div>
</section>