转自:http://www.w3cfuns.com/article-5595079-1-1.html
文章真正出处:http://www.alloyteam.com/2012/11/the-order-of-roate-with-rotatex-problem/
这篇是文章是转自腾讯的前端团队的,我本想直接转那篇,可是腾讯的这篇,有两个图显示不出来,难道是我打开的不对?
我起初对这个旋转也不是很理解,这篇文章里说的坐标轴也旋转,我刚开始也没能想象出来,后来我索性自己用两根筷子和一张废弃宣传纸制作了一个坐标系,然后按照这篇文章里的所写的旋转角度,去测试,立马豁然开朗,想象力很重要啊,rotate,rotateX,rotateY的旋转角度,正角度是顺时针,负角度是逆时针,rotateZ()我没试,但应该是同理,我数学学得不好,也比较笨,所以自己表了一个角度,供自己理解
原文如下:
我觉得CCS3的transform中的学问很深,可以出不少面试题了,我们今天看看rotate的顺序,首先看看下面两个CSS3的keyframe动画:
两个动画的起始状态和结束状态都是是一摸一样的(其实就是原始位置),不同的只不过是rotate和rotateX的顺序。但是动画效果却有惊人的差别。
<ignore_js_op style="word-wrap: break-word; font-family: verdana, 'Microsoft YaHei', Tahoma, sans-serif; line-height: 25px; -webkit-text-size-adjust: none; ">
<ignore_js_op style="word-wrap: break-word; font-family: verdana, 'Microsoft YaHei', Tahoma, sans-serif; line-height: 25px; -webkit-text-size-adjust: none; ">
CSS代码如下:
- @-webkit-keyframes raceFlag0{
- 0%{
- -webkit-transform:rotate(-720deg) rotateX(0deg) ;
- -webkit-transform-origin:100% 0%;
- }
- 100%{
- -webkit-transform:rotate(0deg) rotateX(-360deg) ;
- -webkit-transform-origin:100% 0%;
- }
- }
- @-webkit-keyframes raceFlag1{
- 0% {
- -webkit-transform: rotateX(0deg) rotate(-720deg);
- -webkit-transform-origin:100% 0%;
- }
- 100% {
- -webkit-transform: rotateX(-360deg) rotate(0deg);
- -webkit-transform-origin:100% 0%;
- }
- }
我看了mozilla的网站介绍,里面没有提到关于顺序的问题。于是我做了以下实验。
将两个同样的元素的style分别设置为:
- -webkit-transform: rotateX(-135deg) rotate(-270deg);
- -webkit-transform-origin: 100% 0%;
- -webkit-transform: rotate(-270deg) rotateX(-135deg);
- -webkit-transform-origin: 100% 0%;
结果是不相同的。如下图:
<ignore_js_op style="word-wrap: break-word; ">
是不是-webkit-transform-origin设置的原因呢?我们将该属性删除:
<ignore_js_op style="word-wrap: break-word; ">
我们将问题旋转的角度简化为45度和90度,为了让rotateX的效果明显现一些,我们增加perspective属性。两个CSS分别是:
- -webkit-transform: perspective(200px) rotateX(45deg) rotate(90deg);
- -webkit-transform: perspective(200px) rotate(90deg) rotateX(45deg)
<ignore_js_op style="word-wrap: break-word; ">
这样我们就能发现一些规律了。就是rotate旋转的不是图像,(也不是寂寞)而是坐标系。具体来说,就是X轴也被旋转了。rotateX旋转的也是坐标系。
我们在图上添加坐标系大家就明白了。注意右面的图的坐标系顺时针旋转了90度。
<ignore_js_op style="word-wrap: break-word; ">
我们再看一个个例子:
- -webkit-transform: perspective(200px) rotateX(45deg) rotateY(10deg);
- -webkit-transform: perspective(200px) rotateY(20deg) rotateX(45deg);
<ignore_js_op style="word-wrap: break-word; ">
结论:rotate、rotateX、rotateY、rotateZ都是旋转坐标系。rotateX时,Y轴和Z轴的位置会变。rotateY时,X轴和Z轴的位置会变。rotate和rotateZ时,X轴和Y轴的位置会变。
我们使用rotate时要注意顺序,特别是动画的时候。
进一步的结论:用过canvas中transform的同学可能会知道,在canvas中进行transform时,变形的对象是canvas本身。看来在CSS3的transform中也是一样的道理。比如我想将图片旋转90度,浏览器的逻辑是,将页面旋转-90度,然后渲染图片,之后再将页面旋转90度。这样就实现了旋转图片的效果。
因此在CSS3的tranform属性中,perspective、rotate、translate等属性并不是代表对象的最终状态,而是浏览器渲染对象的“指令队列”。浏览器会依次执行这些“指令”。
这样也就可以解释为什么perspective为什么要放在transform的第一位了。
PS:以上结论是基于逻辑推理得来,本人没有看过这部分的浏览器源代码,请看过的同学指正。
相关推荐
在立体旋转菜单中,我们主要会用到`rotateX()`和`rotateY()`两个函数,它们分别沿着X轴和Y轴进行旋转。此外,`perspective`属性用于设置观察者与3D元素的距离,它可以增加3D效果的真实感。 接下来,我们看下如何...
1. **3D翻转**:CSS3的`transform`属性中的`rotateX()`和`rotateY()`可以实现元素在X轴或Y轴上的3D翻转。例如,通过设置`transform: rotateX(180deg)`可以使图片沿着X轴翻转180度,呈现出前后两面的效果。 2. **3D...
例如,可以使用`rotateX()`、`rotateY()`和`rotateZ()`来分别控制元素沿X、Y、Z轴的旋转,以创建倾斜效果。此外,`translate3d()`可以改变元素在3D空间的位置,而`scale3d()`则可以调整元素的大小。通过结合这些函数...
【纯CSS3实现3D波浪形动画】是一种利用CSS3的强大功能来创建动态视觉效果的技术。CSS3是层叠样式表(Cascading Style Sheets)的第三个版本,它引入了许多新的特性和改进,其中就包括3D转换、动画以及更精细的布局...
在CSS3中,3D时间轴效果是一种富有视觉吸引力且能清晰展示项目进度或历史事件序列的设计技术。这种效果利用了CSS3的transform、perspective和伪元素等特性,为网页添加了深度和动态感。下面我们将深入探讨如何通过...
在本主题中,我们将深入探讨如何使用CSS3创建一个3D立方体旋转动画。这个技术在现代网页设计中被广泛运用,为用户带来引人入胜的交互体验。"CSS3 3D立方体旋转动画"是利用CSS3的3D变换特性来实现一个六面体的动态...
其中,`transform`属性是实现3D效果的核心,包括`rotateX()`、`rotateY()`、`rotateZ()`、`translate3d()`等函数。 在这个特效中,每个卡片是一个独立的HTML元素,通常是一个`div`,并应用了`transform`属性。`...
在3D层叠菜单中,我们可以利用`rotateX`、`rotateY`和`rotateZ`来实现元素的三维旋转,从而创建出立体的视觉效果。 接着,层叠上下文是CSS3 3D变换中的关键概念。它决定了元素在3D空间中的前后顺序,以及它们如何...
2. **3D旋转**:使用`rotateX()`, `rotateY()`, 和 `rotateZ()`函数可以分别沿着X、Y和Z轴旋转元素。在3D菜单按钮中,这些函数用于创建按钮按下时的翻转效果。 3. **3D平移**:`translate3d(x, y, z)`允许元素在3D...
除了`rotate()`,CSS3的`transform`属性还有其他方法可以实现不同的翻转效果,如`scaleX()`和`scaleY()`用于沿着X轴和Y轴缩放,`skewX()`和`skewY()`用于倾斜,以及`matrix()`用于组合多个变换。通过组合这些方法,...
这主要通过`transform`属性实现,其中`rotateX()`, `rotateY()`, `rotateZ()`以及`translate3d()`等函数用于调整元素的位置和角度,从而营造出立体效果。在这个例子中,每个柱状图可能使用了这些函数来改变它们的...
在3D空间中,我们可以使用`rotateX`、`rotateY`、`rotateZ`来控制元素在X、Y、Z轴上的旋转,配合`perspective`属性设置观察者的透视效果,可以创建出深度感和立体感。 这个书本翻页动画通常包括以下步骤: 1. **...
在本案例中,我们可能用到rotateX、rotateY和rotateZ来实现3D空间中的折叠动作。 过渡(transition)属性可以平滑地在两个样式之间过渡,而动画(animation)则可以自定义更复杂的动态效果,通过@keyframes规则定义...
0% { transform: rotateX(90deg) rotateY(-45deg) scale(0); } 100% { transform: rotateX(0deg) rotateY(0deg) scale(1); } } ``` 这段代码定义了一个名为`bloom`的动画,它描述了花瓣从闭合到盛开的变换过程。`...
1. `transform: rotateX()` 和 `rotateY()`:这两个函数用于沿着X轴和Y轴旋转元素,创造出3D旋转的效果。例如,可以将时间轴的每个节点沿着Z轴(垂直屏幕)旋转一定的角度,使其看起来像是从屏幕中突出。 2. `...
在IT领域,尤其是在Web开发中,使用原生JavaScript和CSS3技术可以实现许多创新和吸引人的效果。本案例中提到的“X轴Y轴的3D照片墙”就是这样一个例子,它利用了这两种技术的强大功能来创建一个立体、动态的展示照片...
当鼠标悬停在图片上时,触发事件,通过修改CSS3的`transform`属性,如`rotateX()`或`rotateY()`,使得面板以特定角度折叠,呈现出三维立体的动态变换。 其次,CSS3的过渡(transition)属性用于定义元素从一种样式...
- `transform`允许元素进行2D或3D转换,如旋转(`rotateX`,`rotateY`,`rotateZ`)、缩放(`scale`)、平移(`translate`)等。 - `transition`定义元素从一种样式到另一种样式的过渡效果,比如在图片切换时的...
3D转换是CSS3的一个重要特性,它允许元素在三维空间内进行变换,如旋转(rotateX, rotateY, rotateZ)、缩放(scaleX, scaleY, scaleZ)和平移(translateX, translateY, translateZ)。通过这些属性,我们可以构建...
在网页设计中,CSS3(层叠样式表第三版)为开发者提供了丰富的视觉效果和交互体验,其中之一就是本文将要探讨的“CSS3相片左右飞入滑出切换”技术。这种效果通常用于图片轮播或者相册展示,能够使用户体验更加生动...