热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CSS3实现3D方块旋转

本文是在学习一篇博文后进行总结和一定的修改的,原博文链接这里写链接内容先贴代码HTML<!DOCTYPEhtml><html><

本文是在学习一篇博文后进行总结和一定的修改的,原博文链接这里写链接内容

先贴代码
HTML


<html lang="en">
<head>
<meta charset="UTF-8">
<title>animationtitle>
<link rel="stylesheet" type="text/css" href="css/move.css">
head>
<body>
<div class="wrapper w2">
<div class="cube">
<div class="side front">1div>
<div class="side back">6div>
<div class="side right">4div>
<div class="side left">3div>
<div class="side top">5div>
<div class="side bottom">2div>
div>
div>
body>
html>

CSS

.wrapper {
width: 50%;
float: left;
}

@keyframes rotateHAHA{
0%{
transform: rotateX(0deg) rotateY(0deg);
}

100%{
transform: rotateX(360deg) rotateY(360deg);
}

}
.cube {
font-size: 4em;
width: 2em;
height: 2em;
margin: 1.5em auto;
transform-origin: 1em 1em;
transform-style: preserve-3d;
transform: rotateX(0deg) rotateY(0deg);
}

.cube:hover{
animation: rotateHAHA 4s linear infinite;
}

.side {
position: absolute;
width: 2em;
height: 2em;
background: rgba(255, 99, 71, 0.6);
border: 1px solid rgba(0, 0, 0, 0.5);
color: white;
text-align: center;
line-height: 2em;
}

.front {
transform: translateZ(1em);//为什么要translateZ(1em)。1em代表了什么?
}
.top {
transform
: rotateX(90deg) translateZ(1em)
;//注意rotate和translateZ的顺序。之后会提到。
}
.right {
transform
: rotateY(90deg) translateZ(1em)
;
}

.left {
transform: rotateY(-90deg) translateZ(1em);
}

.bottom {
transform: rotateX(-90deg) translateZ(1em);
}


.back {
transform: rotateY(-180deg) translateZ(1em);
}

.w2{
perspective-origin: 20% 20%;
perspective: 1000px;
}

几点学习心得记录如下:

初始工作

想要实现3D效果,首先需要设定transform-style: preserve-3d;。这个属性只对本元素以及子元素起作用,不对孙子元素起作用。

perspective设置

perspective属性的含义:可以理解为在人眼面前有一个展示板,而这个属性的大小就是这个展示板距离人眼的距离。如果距离越近,自然透视程度就越强,距离越远,透视程度就越弱。
有两种方式设置perspective:

perspective: 600px;

或者

transform:perspective(600px);

这两种设置的区别先看例图:(转自这里写链接内容)
这里写图片描述
可以看出,第一种设置方式是把整个页面当成一个舞台,各个物体虽然属性相同,但是互相之间是有透视关系的。
而第二种设置方式是每一个物体独立开来,这样互不影响。

translateZ的设置

transform:translateZ(length)的作用是将展示的物体脱离展示板的距离。也就是说,如果参数越大,脱离展示板越远,离人眼就越近。可以想象,如果这个length的值大于perspective的值,那么物体位于人眼后面,此时这个物体将看不到。

视点位置设置

perspective-origin属性:默认的值是50% 50%也就是说位于物体中央。我们可以修改这个参数,使得我们的视角可以位于高一点或者第一点的位置。具体可以看这张w3c的图这里写图片描述

父元素与子元素的旋转关系

可以看到cube是六个面的容器。因此这六个面的旋转都是相对于cube父容器的,如果父容器旋转,六个面也跟着旋转,就形成了我们看到的动画效果。

rotate()理解

关于rotateX()、rotateY()、rotateZ():我们知道,屏幕上,右是x轴正方形,上是y轴正方向,垂直平面是Z方向。因此rotateX的具体含义是绕着X轴旋转,其他类似。

translateZ的参数解释

关于translateZ()的参数为什么填的是1em。因为旋转默认是在展示板上的物体中心点。而cube的长宽都是2em。故在Z轴上升高1em然后旋转就可以形成正方体。

transform具有多个值时执行顺序

transform具有多个属性的时候,执行顺序是从后到前。比如这个例子中就是先translateZ,再rotate。故写多个属性的时候,应该将最先执行的代码写在最后面


推荐阅读
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 通过纯CSS技术,可以轻松创建精致的小圆点和三角形图形。本文详细介绍了如何利用CSS的伪元素、边框和背景属性,实现这些图形的高效绘制,并提供了多种应用场景和示例代码,帮助开发者在网页设计中增添更多视觉效果。 ... [详细]
  • 精通jQuery:深入解析事件处理机制与应用技巧
    本文详细探讨了jQuery的事件处理机制及其应用技巧,通过具体的代码示例,逐一解析了每个jQuery代码片段与其对应的HTML结构。文章以标记为基准,CSS作为通用样式,确保每段代码都能独立运行。HTML和CSS代码统一放置在文章末尾,方便读者参考和实践。 ... [详细]
  • 网站前端开发的核心理念与必备技能解析 ... [详细]
  • CSS3 实现鼠标悬停时滚动菜单的流畅过渡效果 ... [详细]
  • css3伪类target实现tab切换
    CSS3target伪类不得不说那些事儿(纯CSS实现tab切换)是不是觉得target有点眼熟?!今天要讲的不是HTML的标签里面有个targe ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 本指南介绍了 `requests` 库的基本使用方法,详细解释了其七个主要函数。其中,`requests.request()` 是构建请求的基础方法,支持其他高级功能的实现。此外,我们还重点介绍了如何使用 `requests.get()` 方法来获取 HTML 网页内容,这是进行网页数据抓取和解析的重要步骤。通过这些基础方法,读者可以轻松上手并掌握网页数据抓取的核心技巧。 ... [详细]
  • Markdown语法说明:http:www.appinn.commarkdown1、前端碎片知识总结篇1.1关于浏览器IE的内核是Trident、Mozilla的内核 ... [详细]
  • Div+CSS网站布局入门教程(转载)
    在网页制作中,有许多的术语,例如:CSS、HTML、DHTML、XHTML等等设置div的宽度。在下面的文章中我们将会用到一些有关于HTML的基本知识,而在你学 ... [详细]
  • CSS深入剖析text和column
    这里写目录标题一、text-shadow二、font-face三、其他text常用特性四、column一、text-shadow与box-shadow类似,这里通过 ... [详细]
  • 利用REM实现移动端布局的高效适配技巧
    在移动设备上实现高效布局适配时,使用rem单位已成为一种流行且有效的技术。本文将分享过去一年中使用rem进行布局适配的经验和心得。rem作为一种相对单位,能够根据根元素的字体大小动态调整,从而确保不同屏幕尺寸下的布局一致性。通过合理设置根元素的字体大小,开发者可以轻松实现响应式设计,提高用户体验。此外,文章还将探讨一些常见的问题和解决方案,帮助开发者更好地掌握这一技术。 ... [详细]
  • 如何在PHP中获取数组中特定元素的索引位置
    在PHP中获取数组中特定元素的索引位置有多种方法。首先,可以使用 `array_search()` 函数,其语法为 `array_search(目标值, $array)`,该函数将返回匹配元素的第一个键名(即下标)。其次,也可以利用 `array_keys()` 函数,通过 `array_keys($array, 目标值)` 语法来获取所有匹配元素的键名列表。这两种方法都能有效解决数组元素定位的问题,具体选择取决于实际需求和性能考虑。 ... [详细]
  • Vue 开发技巧:实现数据过滤与排序功能详解
    Vue 开发技巧:实现数据过滤与排序功能详解 ... [详细]
author-avatar
问道摩托
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有