玩转CSS3的3D动画效果

13 篇文章 3 订阅
订阅专栏

效果展示

基础知识

transform-style:启用 3D 模式

要利用 CSS3 实现 3D 的效果,最主要的就是借助 transform-style 属性。transform-style 只有两个值可以选择:

// 语法:
transform-style: flat|preserve-3d;
 
transform-style: flat; // 默认,子元素将不保留其 3D 位置
transform-style: preserve-3d; // 子元素将保留其 3D 位置。

当我们指定一个容器的 transform-style 的属性值为 preserve-3d 时,容器的后代元素便会具有 3D 效果,这样说有点抽象,也就是当前父容器设置了 preserve-3d 值后,它的子元素就可以相对于父元素所在的平面,进行 3D 变形操作。

transform-origin:设置变换操作中心点

transform-origin: x-axis y-axis z-axis; 

html中的坐标轴系统

 

实现思路

两个正方体 + 动画

代码展示

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        body,
        html {
            margin: 0;
            padding: 0;
            width: 100%;
            height: 100%;
            background: #2b3a42;
            display: flex;
        }

        .cube {
            display: inline-block;
            height: 100px;
            width: 100px;
            position: absolute;
            left: 50%;
            top: 50%;
            margin: -50px 0 0 -50px;
            transform-style: preserve-3d;
            transform-origin: 50px 50px;
            transform: rotateX(-33.3deg) rotateY(45deg);
            animation: fastspin 6s ease-in-out infinite 2s;
        }

        .cube div {
            display: inline-block;
            position: absolute;
            width: 100px;
            height: 100px;
            background-color: rgba(141, 214, 249, .5);
            border: 1px solid #fff;
        }

        .cube .top {
            transform: rotateX(90deg) translateZ(50px);
        }

        .cube .bottom {
            transform: rotateX(-90deg) translateZ(50px);
        }

        .cube .front {
            transform: translateZ(50px);
        }

        .cube .back {
            transform: rotateX(180deg) translateZ(50px);
        }

        .cube .right {
            transform: rotateY(90deg) translateZ(50px);
        }

        .cube .left {
            transform: rotateY(-90deg) translateZ(50px);
        }

        .cube-inner {
            display: inline-block;
            height: 50px;
            width: 50px;
            position: absolute;
            left: 50%;
            top: 50%;
            margin: -25px 0 0 -25px;
            transform-style: preserve-3d;
            transform-origin: center center;
            transform: rotateX(-33.3deg) rotateY(45deg);
            animation: slowspin 6s ease-in-out infinite 2s;
        }

        .cube-inner div {
            display: inline-block;
            position: absolute;
            width: 50px;
            height: 50px;
            background-color: rgba(141, 214, 249, .5);
            border: 1px solid #fff;
        }

        .cube-inner .top {
            transform: rotateX(90deg) translateZ(25px);
        }

        .cube-inner .bottom {
            transform: rotateX(-90deg) translateZ(25px);
        }

        .cube-inner .front {
            transform: translateZ(25px);
        }

        .cube-inner .back {
            transform: rotateX(180deg) translateZ(25px);
        }

        .cube-inner .right {
            transform: rotateY(90deg) translateZ(25px);
        }

        .cube-inner .left {
            transform: rotateY(-90deg) translateZ(25px);
        }

        @keyframes fastspin {
            0% {
                transform: rotateX(-33.3deg) rotateY(45deg);
            }

            100% {
                transform: rotateX(-33.3deg) rotateY(405deg);
            }
        }

        @keyframes slowspin {
            0% {
                transform: rotateX(-33.3deg) rotateY(45deg);
            }

            100% {
                transform: rotateX(-33.3deg) rotateY(-315deg);
            }
        }
    </style>
</head>

<body>
    <div>
        <div class="cube">
            <div class="top"></div>
            <div class="bottom"></div>
            <div class="front"></div>
            <div class="back"></div>
            <div class="right"></div>
            <div class="left"></div>
        </div>
        <div class="cube-inner">
            <div class="top"></div>
            <div class="bottom"></div>
            <div class="front"></div>
            <div class="back"></div>
            <div class="right"></div>
            <div class="left"></div>
        </div>
    </div>
</body>

</html>

透视变换

透视变化原理 详细解释请参考:css3系列之详解perspective - 杨耿 - 博客园 (cnblogs.com)

代码展示

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        body,
        html {
            margin: 0;
            padding: 0;
            width: 100%;
            height: 100%;
            background: #2b3a42;
            display: flex;
        }
         
        //写法一
        .father {
            position: relative;
            width: 100%;
            height: 200px;
            margin: auto;
            perspective: 200px;
            perspective-origin: center 120px;
        }
        //写法二
        .father {
            position: relative;
            width: 100%;
            height: 200px;
            margin: auto;
            transform-style: preserve-3d; //这个属性不能少 要不然 transform: rotateX(10deg); 不起作用
            perspective: 200px;
            transform: rotateX(10deg);
        }

        .cube {
            display: inline-block;
            height: 100px;
            width: 100px;
            position: absolute;
            left: 50%;
            top: 50%;
            margin: -50px 0 0 -50px;
            transform-style: preserve-3d;
            transform-origin: 50px 50px;
            transform: rotateX(-33.3deg) rotateY(45deg);
            animation: fastspin 6s ease-in-out infinite 2s;
        }

        .cube div {
            display: inline-block;
            position: absolute;
            width: 100px;
            height: 100px;
            background-color: rgba(141, 214, 249, .5);
            border: 1px solid #fff;
        }

        .cube .top {
            transform: rotateX(90deg) translateZ(50px);
        }

        .cube .bottom {
            transform: rotateX(-90deg) translateZ(50px);
        }

        .cube .front {
            transform: translateZ(50px);
        }

        .cube .back {
            transform: rotateX(180deg) translateZ(50px);
        }

        .cube .right {
            transform: rotateY(90deg) translateZ(50px);
        }

        .cube .left {
            transform: rotateY(-90deg) translateZ(50px);
        }

        .cube-inner {
            display: inline-block;
            height: 50px;
            width: 50px;
            position: absolute;
            left: 50%;
            top: 50%;
            margin: -25px 0 0 -25px;
            transform-style: preserve-3d;
            transform-origin: center center;
            transform: rotateX(-33.3deg) rotateY(45deg);
            animation: slowspin 6s ease-in-out infinite 2s;
        }

        .cube-inner div {
            display: inline-block;
            position: absolute;
            width: 50px;
            height: 50px;
            background-color: rgba(141, 214, 249, .5);
            border: 1px solid #fff;
        }

        .cube-inner .top {
            transform: rotateX(90deg) translateZ(25px);
        }

        .cube-inner .bottom {
            transform: rotateX(-90deg) translateZ(25px);
        }

        .cube-inner .front {
            transform: translateZ(25px);
        }

        .cube-inner .back {
            transform: rotateX(180deg) translateZ(25px);
        }

        .cube-inner .right {
            transform: rotateY(90deg) translateZ(25px);
        }

        .cube-inner .left {
            transform: rotateY(-90deg) translateZ(25px);
        }

        @keyframes fastspin {
            0% {
                transform: rotateX(-33.3deg) rotateY(45deg);
            }

            100% {
                transform: rotateX(-33.3deg) rotateY(405deg);
            }
        }

        @keyframes slowspin {
            0% {
                transform: rotateX(-33.3deg) rotateY(45deg);
            }

            100% {
                transform: rotateX(-33.3deg) rotateY(-315deg);
            }
        }
    </style>
</head>

<body>
    <div class="father">  //透视变化给父亲添加
        <div class="cube">
            <div class="top"></div>
            <div class="bottom"></div>
            <div class="front"></div>
            <div class="back"></div>
            <div class="right"></div>
            <div class="left"></div>
        </div>
        <div class="cube-inner">
            <div class="top"></div>
            <div class="bottom"></div>
            <div class="front"></div>
            <div class="back"></div>
            <div class="right"></div>
            <div class="left"></div>
        </div>
    </div>
</body>

</html>

效果展示 

总结

  1. 想使用CSS3实现 3D效果 必须的存在父子级元素
  2. 父级元素上的设置 transform-style: preserve-3d 子元素的3D变化才显示的出来
  3. 透视变化 perspective: 200px;   perspective-origin: center 120px; 不受 transform-style: preserve-3d影响,有没有他都可以实现透视变化

 

 

css33D效果
忘川的博客
01-13 340
1、旋转 3D旋转和2D不同的是2D只是平面上的旋转,3D看起来会更加立体些,这里介绍几个方法: 1、rotateX(deg) 2、rotateY(deg) 3、rotateZ(deg) 这三个方法的意思分别为围绕x轴旋转、围绕y轴旋转、围绕z轴旋转,在3D旋转中,会连通坐标轴一起旋转,旋转的顺序不一样时,角度相同也会有很大的差别。这三个方法还可以写成一个,totate3D(x,y,z,deg),...
玩转 CSS3 3D 技术
大前端
07-25 687
css33d起步 要玩转css33d,就必须了解几个词汇,便是透视(perspective)、旋转(rotate)和移动(translate)。透视即是以现实的视角来看屏幕上的2D事物,从而展现3D效果。旋转则不再是2D平面上的旋转,而是三维坐标系的旋转,就包括X轴,Y轴,Z轴旋转。平移同理。 当然用理论来说明,估计你还不明白。下面是3个gif: 沿着X轴旋转 沿着Y轴旋转 ...
CSS3中的3D效果
weixin_43755513的博客
08-06 300
CSS3中的3D效果 1.rotateX()方法(围绕其在一个给定度数X轴旋转的元素) div{ width:100px; height:75px; background-color:red; border:1px solid black; transition: all 5s; } div:hover{ transform:rotateX(-180deg); -webkit-...
CSS3 实现3D特效_var page2txt = document
最新发布
2401_86637445的博客
09-06 435
上面其实是两个属性写在一起,分开写是这样的:;那么如何设置多个属性的过渡效果呢?translateX是从屏幕左边到右边;translateY是从上边到下边;translateZ是从屏幕外到里边;外为负数,越大,里为正数,表示越远;rotateX和rotateY都是分别沿着x轴中心与y轴中心逆时针为正,rotateZ是沿着顺时针为正;使用css3创建简单的3d场景。
CSS3D效果
weixin_33911824的博客
05-19 169
效果如本博客中右边呢个浅色框框,来自webpack首页(IE绕路0_0) github地址:http://wjf444128852.github.io/demo02/css3/css3d/ 思路: 1、关键是父元素ul的这2个属性   a:transform-style: preserve-3d;    b:transform: rotateX(-33.5deg) rotateY(45d...
css3 3D效果
zzz19的博客
09-14 226
css3 3D变形 transfrom初学 这个礼拜学了css3 3d,感觉到css无穷的魅力,可以通过几个特定的代码符号创建出3D效果的页面。 ___ 透视 一个元素需要一个透视点才能激活3D空间,...
css3实现3D动画
weixin_35750483的博客
01-06 265
使用 CSS3 可以实现 3D 动画效果。要实现 3D 动画,需要使用 CSS3 中的 transform 属性。 要将一个元素变为 3D 元素,可以使用 transform: perspective(depth) 属性。depth 参数表示 3D 元素的透视深度,值越大,3D 效果越明显。 然后,可以使用 transform: rotateX(angle)、transform: rotateY(...
CSS3 3D 技术手把手教你玩转
11-22
玩转css33d,就必须了解几个词汇,便是透视(perspective)、旋转(rotate)和移动(translate)。透视即是以现实的视角来看屏幕上的2D事物,从而展现3D效果。旋转则不再是2D平面上的旋转,而是三维坐标系的旋转,就...
CSS3 3D位移translate效果实例介绍
11-30
在现代浏览器中,CSS33D位移功能已经得到广泛支持,使得开发者能够利用这一特性创造出引人入胜的网页动画和交互设计。 总结来说,CSS33D位移translate效果是一个强大而灵活的工具,用于在网页设计中实现3D空间...
玩转CSS动画3D正方体
m0_37136491的博客
08-31 673
目录 目录 目标实现正方体的效果 Transition 理解 transition-timing-function的参数如下图 以上使用到的css部分代码理解 浏览器查看或者尝试修改贝塞斯曲线 3D场景 以上使用到的代码 animate 开始动手 实战代码Download 快捷链接 目标实现正方体的效果 Transition 理解 transition...
CSS3实现3D效果
cheers_up的博客
03-16 558
CSS3实现3D效果 实现3D效果必须要知道这几个属性: 1.transition(过渡属性) CSS3的transition允许CSS的属性只在一定的时间区间内平滑的过渡。这种效果可以在鼠标滑过、单击、获得焦点或对元素任何改变中触发,并圆滑地以动画效果改变CSS的属性值。 1)transition-property:检索或设置对象的参与过度的属性; 2)transition-duration:检...
CSS3——3D效果
一明
11-17 445
1.效果1 "Content-Type" content="text/html; charset=utf-8"> 无标题文档 .box{width:100px;height:100px;padding:100px;border:5px solid #000;margin:30px auto; -webkit-transform-style:preserve-3d;-w
css3 3d动画
weixin_52767262的博客
10-29 598
在学习3d动画之前,我们要先了解一个概念,就是我们在网页上的所展示的内容,他是一个2d的平面,要想在2d空间内展示出3d效果,仅凭x轴和y轴是无法做到的,因此我们需要在添加一个轴的方向,z轴,这条轴你可以看作是屏幕正对着我们的视线。一下还做了两个案例,一个是旋转木马,另一个是正方体盒面,你们可以先动手自己去做一下,尝试以自己的思想去把他给做出来,然后再对比我的,你可以把你的想法发出来,我们一起努力进步哦,前端道路深远且到长,让我们共同求进退。/* 隐藏背面旋转元素不可见 */
使用CSS3制作3D动态效果
Hubbert_Xu的博客
12-25 2044
CSS3有两个主要的动画效果: 1.transition: 从一个属性值,平滑的过渡到另一个属性值 2.animation          通过关键帧的技术,在网页上产生更加复杂的动画效果。 本章节只讲transition的部分: 一.浏览器的支持 -webkit-transition : 适用于Chrome和Safari -moz-trans
几个纯 CSS33D 效果
学习入门的博客
09-08 233
推荐几个纯 CSS33D 效果代码,非常棒! CSS3信用卡图片3D动画特效 CSS3实现3D信用卡动画特效是一款根据鼠标的位置图片进行相应的3D旋转,并带有光影特效,效果非常酷的图片3D动画展示效果css3 3D立体杯子旋转动画特效 css3绘制的一款3D立体杯子旋转动画特效,3个不同颜色的杯子,点击杯子可3D旋转展示。 纯CSS3实现的iPhone样式的3D菜单特效源码 CSS3实现3D信用卡动画特效是一款根据鼠标的位置图片进行相应的3D旋转,并带有光影特效,效果非常酷的图片
css3实现3D效果
weixin_46389470的博客
03-08 223
通过三周的学习,我的CSS学习来到了3D属性,相信很多和我一样第一次接触3D的同学都有些懵。 通过动手写了一个正方体我更好的理解了3D: rotateX() 方法 通过 rotateX() 方法,元素围绕其 X 轴以给定的度数进行旋转。 rotateY() 旋转 通过 rotateY() 方法,元素围绕其 Y 轴以给定的度数进行旋转。 rotateZ() 旋转 通过 rotateZ()...
css3 3D动画 200303
pyhui的技术博客
03-03 226
3D效果 3D位移 3D旋转 3D缩放 3D Transform转换属性 旋转基点 呈现3D效果 透视 呈现3D效果必需这样写 定义在父容器上 背面是否可见 关键帧动画 timing-funcgion 注释错误 连写 演示代码 在容器上定义动画名称 通过Keyframes 定义一个动画过程 ...
css3动画效果3D模型
热门推荐
nuoWei_SenLin的博客
03-18 1万+
今天了解了css3动画渐变效果,如果我们要对页面中的某个元素的样式进行变化,就不用js或jquery苦苦的写代码了,直接用css3的这个transition这个属性就ok,方便快捷,下面请看demo。一、动画效果我要对某个div操作,例如:当鼠标移入div中,改变其width、height和background,如果不使用transition属性而直接用hover的话,会使页面非常死板、生硬,如...
CSS3 3D技术详解:透视、旋转与移动
"手把手教你玩转CSS3 3D技术,包括透视(perspective)、旋转(rotate)和移动(translate)的基本概念和实战应用。通过3D旋转和平移的gif示例,以及透视属性的深入解析,帮助理解CSS3 3D效果的创建原理。" 在CSS3中,3D...
写文章

热门文章

  • js延时函数 35904
  • 让图片在div里居中(三种方法) 32300
  • 解决FastJson com.alibaba.fastjson.JSONObject cannot be cast to的问题 29761
  • 解决 java “错误:编码GBK 的不可映射字符” 29416
  • 微观的C/C++编译执行过程 17544

分类专栏

  • Android那些事 64篇
  • HTML/CSS 13篇
  • java教程 62篇
  • React
  • js 9篇
  • java 2篇
  • spring 6篇
  • 算法必刷题 12篇
  • 数据结构 11篇
  • flutter 1篇
  • 云服务器的部署 6篇
  • Linux下部署服务 17篇
  • 操作系统
  • C语言 20篇
  • Redis 4篇
  • spring boot 4篇
  • 计算机组成原理 4篇
  • VM虚拟机 7篇
  • 解决报错 14篇
  • go语言学习 9篇
  • git 1篇
  • 神经网络 8篇
  • 数据库 1篇
  • VsCode 11篇
  • Vue 16篇
  • Android自定义控件连续剧 40篇
  • Android源码分析 4篇
  • opencv on android 6篇
  • Android事件处理机制 1篇
  • jni 5篇
  • python 2篇
  • pm2 1篇
  • mongodb 1篇
  • 自定义属性 2篇
  • background 1篇

最新评论

  • 如何修改uniapp的checkbox样式?

    植满豆: 不生效啊,哥们

  • C语言如何将十六进制字符串转为十六进制Byte

    嘿呦~黑: 转换函数里的大小比较,应该用大于等于和小于等于,不然会解析错

  • Android实现旋转动画的两种方式

    留白的云: 麻烦问下 这5个小球如何去获取点击事件呢?

  • OpenCV 在 Android Studio 的使用教程

    私戳: 错误点有点多啊者

  • OpenCV 在 Android Studio 的使用教程

    私戳: 3.2这里需要把这部分卖main语句加在哪里呀?我加完以后会报错

大家在看

  • 【华为OD技术面试手撕真题】72、轮转数组 | 手撕真题+思路参考+代码解析(C & C++ & Java & Python & JS)(0ms)
  • 【GESP】C++一级练习BCQM3082,最大数输出
  • 信号处理入门与实战指南 730
  • IDM下载器 (Internet Download Manager) v6.42.2 中文免激活绿色版 1764
  • 深入浅出之智能指针 496

最新文章

  • Android APT实战
  • Gradle入门使用简介
  • web端video常用控制配置
2024年1篇
2023年1篇
2022年58篇
2021年247篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

super码王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

深圳坪山网站建设公司安平护栏优化网站崇明区网站优化案例甘孜藏族自治州网站优化软件网站的优化总结孝南区网站做优化代理加盟温江区做优化网站茶叶网站优化标题代码有什么安康网站的优化亳州企业网站优化哪家价格便宜东莞高网站优化服务公司吉利区网站优化公司网站关键词优化首先要学会分类黄山优化网站价格优化资源网站b2b网站优化计划书金华网站的优化报价冀州怎么做网站优化优化网站用什么软件崇州专业网站优化乌鲁木齐移动网站优化大悟县网站做优化哪里有卖建筑行业怎么做网站关键词优化网站结构怎么优化铁岭网站SEO优化费用沁阳网站推广优化方案东洲优化网站哪家公司好淮安网站百度关键词排名优化于都网站优化平台邯郸家具行业网站优化推广怎么样优化网站运营技巧香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

深圳坪山网站建设公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化