CCS3实例教程:rotate和rotateX

文章简介:这样也就可以解释为什么perspective为什么要放在transform的第一位了。

我觉得CCS3的transform中的学问很深,可以出不少面试题了,之前的文章谈到过perspective属性的位置问题,我们今天看看rotate的顺序,首先看看下面两个CSS3的keyframe动画:

两个动画的起始状态和结束状态都是是一摸一样的(其实就是原始位置),不同的只不过是rotate和rotateX的顺序。但是动画效果却有惊人的差别。



CSS代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

@-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分别设置为:

1
2
3
4
5

-webkit-transform: rotateX(-135deg) rotate(-270deg);
-webkit-transform-origin: 100%
0%;

-webkit-transform: rotate(-270deg) rotateX(-135deg);
-webkit-transform-origin: 100%
0%;

结果是不相同的。如下图:

是不是-webkit-transform-origin设置的原因呢?我们将该属性删除:

我们将问题旋转的角度简化为45度和90度,为了让rotateX的效果明显现一些,我们增加perspective属性。两个CSS分别是:

1
2

-webkit-transform: perspective(200px) rotateX(45deg) rotate(90deg);
-webkit-transform: perspective(200px) rotate(90deg) rotateX(45deg)

这样我们就能发现一些规律了。就是rotate旋转的不是图像,(也不是寂寞)而是坐标系。具体来说,就是X轴也被旋转了。rotateX旋转的也是坐标系。

我们在图上添加坐标系大家就明白了。注意右面的图的坐标系顺时针旋转了90度。

我们再看一个个例子:

1
2

-webkit-transform: perspective(200px) rotateX(45deg) rotateY(10deg);
-webkit-transform: perspective(200px) rotateY(20deg) rotateX(45deg);

结论: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:以上结论是基于逻辑推理得来,本人没有看过这部分的浏览器源代码,请看过的同学指正。

时间: 2024-09-28 00:58:00

CCS3实例教程:rotate和rotateX的相关文章

PHP单例模式实现商城购物车功能-PHP实例教程

  PHP单例模式实现商城购物车功能-PHP实例教程完成这个小功能必须会写需求 养成好的习惯 Php购物车的开发需求功能如下 1: 购物车放在session里 2: 单例模式来开发 功能: 增删改查 增一个商品 减少 PHP单例模式实现商城购物车功能-PHP实例教程完成这个小功能必须会写需求 养成好的习惯 Php购物车的开发需求功能如下:php100.com 1: 购物车放在session里 2: 单例模式来开发 功能: 增删改查 增一个商品 减少一个商品(改,数量) 删 去掉一个商品 清空购物

web标准布局实例教程

web|web标准|教程 我相信来经典论坛学习标准的朋友,99%都不是为了进W3C,不是为了成为专业的研究人员,那么大家来的目的是什么呢?很简单,其实都是想通过标准的学习让自己多增加一项技能而已,让自己在找工作的时候不会在被"需要熟练掌握web标准"而难倒,在下面的实例中xhtml并没有什么语意,文章的目的只是让然大家能更好的掌握CSS中相对.绝对定位的用法(新手问此问题的确实很多),及如何有效的结合背景,实现比较复杂的布局.不足之处还望前辈们能指点一二,感谢! 第一步: 先来随便设计

CSS实例教程:简单的button风格的UI按钮

文章简介:CSS实例教程:简单的button风格的UI按钮. button应该是UI库中最常用到的一种.我个人对google+的那种简单的button风格比较喜欢,因为那样在不同的浏览器下视觉差异不是很大.不过现在自己确实已经没有心思去琢磨怎么去弥补ie的不足,所以下面的东西就不要拿ie打开了.还是贴出代码吧 <!DOCTYPE html> <html> <head>                        <title></title> 

CSS3实例教程代码:简单制作遨游浏览器LOGO

文章简介:CSS3实例教程代码:简单制作遨游浏览器LOGO. <!DOCTYPE HTML> <html> <head> <title>LOGO</title> <style type="text/css"> * {margin:0; padding:0} .main {width:800px; margin:50px auto 0}  .main_wrapper {width:240px; height:240p

CSS3实例教程:hover、active和:focus伪选择器

文章简介:CSS3实例教程:hover.active和:focus伪选择器. CSS3的伪类选择器就是多,今天我们来学习新的伪类选择器--UL状态伪类选择器.这些选择器都有一个共同的特征名那就是定义的样式只有当元素处于某种状态下时才起作用,在默认状态下无效. 今天我们先来接触:hover.active和:focus这三种状态伪类选择器. :hover选择器.:active选择器和:focus选择器 :hover选择器:当鼠标悬停在所指定的元素上时所使用的样式: :active选择器:当所指定的元

CSS3实例教程:盒模型添加阴影属性box

文章简介:我们要对盒模型添加阴影怎么办呢?其实它的用法与text-shadow用法一样,只不过属性名称是box-shadow. 我们要对盒模型添加阴影怎么办呢?其实它的用法与text-shadow用法一样,只不过属性名称是box-shadow. 相关文章:CSS3教程:网页文字阴影属性text-shadow box-shadow: 此属性与text-shadow一样有4个值,前两个值分别表示水平方向位移距离和垂直方向的位移距离,第三个值表示阴影的模糊半径(包含0及以下的值均表示无模糊),最后一个

Javascript实例教程(1) 目录

javascript|教程 javascript是一种基于对象和事件驱动并具有安全性能的脚本语言.使用它的目的是与HTML超文本标记语言.Java 脚本语言(Java小程序)一起实现在一个Web页面中链接多个对象,与Web客户交互作用,从而可以开发客户端的应用程序等.它是通过嵌入或调入在标准的HTML语言中实现的.它的出现弥补了HTML语言的缺陷,它是Java与HTML折衷的选择.本javascript实例教程旨在通过介绍一些实例来加深对Javascrip的理解.本系列教程包括:1. 利用jav

ASP实例教程:Drive对象

取得指定驱动器的可用空间数:本例演示如何首先创建一个FileSystemObject对象,然后使用AvailableSpace属性来获得指定驱动器的可用空间. 取得指定驱动器的可用空间数:本例演示如何首先创建一个FileSystemObject对象,然后使用AvailableSpace属性来获得指定驱动器的可用空间.取得指定驱动器的剩余空间容量:本例演示如何使用FreeSpace空间属性来取得指定驱动器的剩余空间.取得指定驱动器的总容量:本例演 Drive 对象 注意:本实例教程因为和具体空间的

CSS实例教程:简单的的滑动导航栏效果

文章简介:CSS实例教程:简单的的滑动导航栏效果. 由于网页字体的限制,以及对导航栏美观的需求,使用background-repeat来做一个简单的文字导航栏已经远远不够了.在很多场合,导航栏的背景是一个图案,字体也不再是单调的宋体,这就需要我们把导航栏的整体效果做图在网页中使用. 今天我们就来做一个简单的的滑动导航栏效果(不知道应该叫它什么^_^),效果如下图:   思路:通过改变链接鼠标悬停状态(hover)的背景图片,来达到把鼠标放上去有高亮显示的效果. 方法:在本例中,我们是通过调整各链