CSS 特效 —— 旋转木马【原理详解】

本文介绍了如何利用CSS的perspective、transform-style和rotateY()属性创建一个3D视图,通过translateZ()实现图片分隔,并结合动画或JavaScript控制旋转。关键在于理解视角转换和元素间距调整的原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

完整代码和效果见 https://demo.cssworld.cn/new/5/2-6.php

在这里插入图片描述

核心代码和原理详解

给舞台设置视距 perspective

.stage {
    perspective: 800px;
}

给容器添加3D视图声明

.container {
    transform-style: preserve-3d;
}

每个图片绝对定位,共用一个3D变换中心点

position: absolute;
left: 0; bottom: 0;

rotateY()旋转随图片下标动态计算,共9张图片,所以 360/9=40deg。

 transform: rotateY(calc(var(--index) * 40deg));

此时图片挤成一团,怎么分开呢?

在这里插入图片描述

我们可以把9张图片想象成9个人,现在这9个人站在一起分别面朝不同的方位,这9个人是不是只要每个人向前走4~5步,彼此之间的距离就拉开了?不妨想象一下夜空中礼花绽开的场景。这里的向前走4~5步的行为,就相当于应用translateZ()函数的行为,当translateZ()函数值为正值的时候,元素会向其面对的方向走去。

在这里插入图片描述
走的距离参照上图进行计算

在这里插入图片描述
为了好看,图片左右两边可以留点间距,例如20px,最终得到需要使用的translateZ()函数值为175.8+20=195.8

translateZ(195.8px)

最后,要让图片旋转起来,只要让容器每次旋转40度就可以了,这个可以使用CSS动画完成,或者使用JavaScript设置也是可以的。

container.onclick = function () {
    var index = (this.index || 0) + 1;
    this.style.transform = 'rotateY('+ index * 40 +'deg)';
    this.index = index;
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值