【发布时间】:2011-06-24 16:42:56
【问题描述】:
我正在尝试使用 webkit 对 CSS3 transform: matrix3d(<matrix>) 的支持来创建“掉落卡片”效果。 (此输出的唯一目标是 Chrome)
最终效果应该通过下面的 4 个阶段过渡,最终变成一条水平线:
这是我现在拥有的 CSS:
#test {
margin: auto auto;
height: 200px;
width: 200px;
border:1px solid black;
background-color: lightblue;
-webkit-perspective: 1000;
-webkit-transform-origin: 50% 100%;
-webkit-transform-style: preserve-3d;
-webkit-animation-name: flip-card;
-webkit-animation-duration: 1s;
-webkit-animation-iteration-count: infinite;
-webkit-animation-timing-function: linear;
-webkit-box-shadow: 0px 5px 20px rgba(0, 0, 0, 0.5);
}
@-webkit-keyframes flip-card {
0% {-webkit-transform: ;}
100% {-webkit-transform:
matrix3d(1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 0, 0,
0, 0, 0.001, 1);}
}
HTML 易于测试:
<body>
<div id="test">this div should fall forward...</div>
</body>
上面的 matrix3d 是基于读取 this SO question,但它会产生一个缩小的正方形,该正方形围绕由初始框底部定义的 x 轴翻转。
我知道 CSS 2d 矩阵只能通过盒子的变换来生成矩形和平行四边形,不规则的形状需要 matrix3d 变换操作(this 有助于刷新我衰落的线性代数!),但我似乎只是能够产生矩形和平行四边形。
我查看了一些标记为matrix 和transformation 的SO 问题。它们中的大多数都不是基于 CSS 的,我无法获得我想要的转换。
【问题讨论】:
-
我在这里创建了一个工具来摆弄 css 转换值:duopixel.com/stack/webkitmatrix,但恐怕我无法用 Chrome 生成梯形。试一试。
-
@Duopixel:这是一个很棒的工具。我可以在 Safari 中制作梯形...但通过移动第 1 行、第 4 列滑块(右上角的滑块)在 Y 轴而不是 X 轴上倾斜。在 Chrome 中,相同的滑块会创建一个平行四边形。我的理解是我应该移动第 4 行,第 3 列滑块来创建 X 轴平行四边形,但它在 Safari 或 Chrome 中没有效果。
-
这个CoffeeScript fiddle 可能有用。它嵌入的博客页面也有一些有用的解释。