一、前言

  把大象关进冰箱需要几步?三步,把冰箱门打开,把大象关进去,把冰箱门关上。

  用 CSS 实现 3D 效果需几步?三步,设置透视效果 perspective,改变元素载体为 preserve-3d,对元素进行 3D 转换操作

  perspective 属性决定了我们从什么地方查看元素,定义时的 perspective 属性,它是一个元素的子元素,透视图,而不是元素本身。

  再说 3D 转换操作,需要用到的就是 translateX,translateY,translateZ,写到一块就是 translate-3d,除此之外还有 rotateX,rotateY,rotateZ。至于平移和旋转的方向,可以参考下面的三维坐标图:

  

二、CSS 翻页效果

1.创建透视背景

  首先是要创建一个透视背景,也就是一个具有 perspective 属性的 div,这里我给 perspective 的值为800个像素单位。除此之外,还要有一个 div,将所有页面都包括在这个 div 中,这个 div 需要设置 position 为 relative,因为后面的页面都要使用绝对定位,并且要设置 transform-style 属性为 preserve-3d。相关 CSS 代码如下:

 .back {
perspective: 800px;
perspective-origin: % %;
overflow: hidden;
margin: 10px;
} .content {
width: 400px;
height: 400px;
margin: auto;
transform-style: preserve-3d;
position: relative;
}

2.创建页面

  在 CSS 类为 content 的 div 中创建多个页面,将除了第一页以外的页面全都“放倒”,即以底边为变换中心,然后在 X 方向上旋转90度,CSS 代码如下:

transform-origin: bottom;

transform: rotateX(90deg);

  除此之外,还要设置 transition 属性,页面的 CSS 代码如下:

 .page {
width: 360px;
height: 360px;
padding: 20px;
background-color: black;
color: white;
font-weight: bold;
font-size: 300px;
text-align: center;
position: absolute;
} #p1 {
transform-origin: bottom;
transition: transform 1s linear;
} #p2,
#p3,
#p4,
#p5,
#p6 {
transform-origin: bottom;
transition: transform 1s linear;
transform: rotateX(90deg);
}

3.添加按钮实现翻页

  添加两个按钮用于实现向前翻页和向后翻页。向前翻页时,当前页面在 X 方向上旋转-90度,也就是向前旋转90度倒下了,然后将下一页改为 rotate(0deg) 立起来。向后翻页就是一个逆向的过程了,这里就不再赘述了。控制翻页的 JS 代码如下:

 <script>
var curIndex = 1; function previous() {
console.log(curIndex);
if (curIndex === 1) {
return
}
var curPage = document.getElementById("p" + curIndex);
curPage.style.transform = "rotateX(90deg)"; curIndex--;
var prevPage = document.getElementById("p" + curIndex);
prevPage.style.transform = "rotateX(0deg)";
} function next() {
console.log(curIndex);
if (curIndex === 6) {
return
}
var curPage = document.getElementById("p" + curIndex);
curPage.style.transform = "rotateX(-90deg)"; curIndex++;
var nextPage = document.getElementById("p" + curIndex);
nextPage.style.transform = "rotateX(0deg)";
}
</script>

  需要注意的是,在向前和向后翻页时,需要对第一页和最后一页进行一个判断。

三、CSS 旋转正方体

1.创建正方体

  用 CSS 创建一个旋转的正方体,首先也是要创建一个透视的背景,然后创建六个页面,分别进行平移和旋转操作,构造出一个正方体,CSS 代码如下:

 .face {
width: 160px;
height: 160px;
padding: 20px;
color: white;
position: absolute;
transition: transform 1s linear;
} #f1 {
background-color: aqua;
} #f2 {
background-color: blue;
transform-origin: right;
transform: rotateY(-90deg)
} #f3 {
background-color: green;
transform-origin: top;
transform: rotateX(-90deg)
} #f4 {
background-color: yellow;
transform-origin: bottom;
transform: rotateX(90deg)
} #f5 {
background-color: red;
transform-origin: left;
transform: rotateY(90deg)
} #f6 {
background-color: pink;
transform: translateZ(-200px);
}

2.旋转正方体

  进行完第一步之后,一个正方体就已经出来了,但是我们还只能看到两个面,这时可以对整体进行一下旋转,就能看到更多的面了。JS 代码如下:

 <script>
setInterval(function() {
for (var i = 1; i < 361; i++) {
var ele = document.getElementById("content");
ele.style.transform = "rotate(" + i + "deg)";
}
}, 1000)
</script>

完整代码已上传到 GitHub

学习 CSS 之用 CSS 3D 实现炫酷效果的更多相关文章

  1. 仿网易/QQ空间视频列表滚动连播炫酷效果

    代码地址如下:http://www.demodashi.com/demo/11201.html 一.准备工作 AndroidStudio 开发环境 需要下载七牛的开源播放器SDK 本例子实现了仿网易/ ...

  2. 基于skitter的轮播图炫酷效果,幻灯片的体验

    概述 包含各种炫酷的轮播切换效果,插件小巧,与其他插件无冲突,可用于移动端和PC端 详细 代码下载:http://www.demodashi.com/demo/11939.html 你还在用原生的js ...

  3. 用AI制作炫酷效果

    PART1:制作第一个效果 步骤一:新建一个800*600的画布. 骤二:从工具栏选“矩形工具”,创建一个800*600的矩形.白色的是画布,浅红色(我的AI之前保留的填充颜色,每个人都不一样)的是你 ...

  4. Android学习笔记_42_各种图形的炫酷效果的实现和使用

    一.文档位置: 这里在android中的图形,在帮助文档的这个页面,  android-sdk-windows\docs\guide\topics\resources\drawable-resourc ...

  5. 3D超炫酷旋转

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  6. 网页样式——各种炫酷效果持续更新ing...

    1.evanyou效果-彩带的实现,效果如下 注:这个主要用的是Canvas画布实现的,点击背景绘制新的图形,代码如下: /*Html代码:*/ <canvas id=">< ...

  7. 【Android开发】安卓炫酷效果集合

    1. android-ripple-background 能产生波浪效果的背景图片控件,可以自定义颜色,波浪扩展的速度,波浪的圈数. github地址 2. android-shapeLoadingV ...

  8. css3使用animation属性实现炫酷效果

    animation-name 动画名称,可以有多个值,用逗号隔开,表示绑定了多个动画 animation-name属性为动画指定一个名称 animation-name兼容主流的浏览器,不过还是需要加前 ...

  9. 【Android】SwipeRefreshLayout的简单使用教程。下拉刷新控件炫酷效果。

    作者:程序员小冰,GitHub主页:https://github.com/QQ986945193 新浪微博:http://weibo.com/mcxiaobing 首先给大家看一下我们今天这个最终实现 ...

随机推荐

  1. js各继承方法的优缺点

    在js中有很多种继承的方法,下面总结这些方法的优缺点. ####1.原型链继承 优点: 非常纯粹的继承关系,实例是子类的实例,也是父类的实例 父类新增原型方法/原型属性,子类都能访问到 简单,易于实现 ...

  2. apache和tomcat的关系

    apache和tomcat的关系: 举个例子:apache是一辆卡车,上面可以装一些东西如html等.但是不能装水,要装水必须要有容器(桶),tomcat就是一个桶(装像JAVA这样的水),而这个桶也 ...

  3. python3下scrapy爬虫(第一卷:安装问题)

    一般爬虫都是用urllib包,requests包 配合正则.beautifulsoup等包混合使用,达到爬虫效果,不过有框架谁还用原生啊,现在我们来谈谈SCRAPY框架爬虫, 现在python3的兼容 ...

  4. 公式化学习requests(第一卷)

    个人来讲我不是很喜欢REQURST这个第三方模块,一点不好用不如URLLIB,但身为技术人员,模块你可以不用但是你得会,就像生活质量我这个东西我不用但是我得有 先拿百度做个案例: 看下代码 结果为: ...

  5. labview相关内容

    索引数组的用法:https://jingyan.baidu.com/album/90808022e6d0f7fd91c80fd2.html?picindex=1 定时顺序结构用法:http://zon ...

  6. 应对百万访问量的epoll模式

    写在前面 select/poll与epoll select/poll模型工作机理 select/poll模型的局限 epoll模型工作机理 epoll的局限 golang中的epoll golang源 ...

  7. linux系统加固方案

    Linux主机操作系统加固规范 目  录 第1章      概述... 1 1.1        目的... 1 1.2        适用范围... 1 1.3        适用版本... 1 1 ...

  8. js new 与 return

    前置: 默认情况下, 函数的返回值是 undefined (即没有定义返回值). new 操作符 js 中的 new 操作符,可以是我们像 java 一样,获得一个新的对象,例如: function ...

  9. 网易与Google合作,于GDC开幕首日发布开源UI自动化测试方案

    [TechWeb报道]美西时间3月19日,在GDC开幕第一天的Google开发者专场,Google发布了一款由网易研发的UI自动化测试方案:Airtest Project. Google方面评价,这可 ...

  10. zookeeper 单机部署

    第一步:下载安装包 这里以3.4.11为例  https://archive.apache.org/dist/zookeeper/ 点进去看: 下载tar文件 第二步:上传到服务器 使用ftp工具上传 ...