transform 变形

1. 变形功能的诞生

在以前的变形上,仅仅是视觉效果上的变形,在底层的坐标方格上没有发生改变。自从CSS3诞生后,元素的特效就从二维走向了三维。之前我们通过浮动、margin 这些操作,都是让元素平移。

在CSS3中,就诞生了这么一个属性:transform 。这个变形功能,不仅可以平移元素,还能旋转、元素翻转或者其他更加强大的自定义特效。

2. 变形 transform

变形只有一个属性:transform ,不过有很多辅助的属性值用于控制如何变形。对于变形元素,要注意点,变形的元素有自己的堆叠上下文:经过缩放、平移变形后的元素,在视觉上虽然比以前大或者比以前小了,但是元素在页面上所占用的空间仍然与变形前的大小一致。

transform: <transform-list> | none;

2.1 二维变形

二维变形,就是通过平移、旋转、放大缩小和扭曲产生的形变,这个形变只在 x 和 y 轴上发生改变。

描述
rotate() 旋转
translate() 平移
scale() 放大缩小
skew() 扭曲/斜切
2.1.1 旋转
transform: rotate(30deg);

这段代码表示让元素以顺时针方向旋转30度,正数为顺时针,负数为逆时针。deg 表示的是旋转的角度。默认情况下,是以元素的中心点来旋转的。

如果旋转的角度设置大于360度,那旋转函数就会对角度值进行取余。例如,旋转1080deg,那 1080%360 等于 0 度,旋转900度,则是 900%360 等于 180度。

刚刚提到,元素默认的旋转中心是元素的中心位置,这个位置可以通过 transform-origin 来改变

transform-origin: left top;

它的属性值,可以使用 left、center、right;top、center、bottom来表示,也可以使用百分比或者具体的长度单位来表示。第一个值表示水平方向,第二个值表示垂直方向。

2.1.2 平移
transform: translate(50px,100px);

平移的单位为px,用于设置水平方向和垂直方向的位移。它可以传递两个参数,第一个参数就是表示水平方向,第二个参数就是垂直方向。当传递一个参数时,它代表水平方向,垂直位移会设为0。

transform: translateX(50px);
transform: translateY(100px);

其中,translate的值可以设置为负值。水平方向的正方向为右,垂直方向的正方向为下。负值就代表反方向平移

2.1.3 缩放
transform: scale(2);

scale 表示缩放,不需要单位,可以为小数。1 表示百分百的原始大小,在0~1之间表示缩小,大于1表示放大。它同样存在两个值,第一个表示水平方向,第二个表示垂直方向。

当 scale 值为负数时,左右、上下将会颠倒。

2.1.4 扭曲
transform: skew(15deg);

该属性代表扭曲或者斜切,单位和旋转一样,使用 deg 作为扭曲的角度,可以为负值。由于使用 skew 会导致图像和内容失真变形,因此在实际开发时很少使用。

2.2 三维变形

三维变形和二维变形一样,还是使用 transform 属性。那么怎样让浏览器知道,这段代码是以3D的形式去进行解读呢?通常有两种方法

  • 第一种:直接提前告知浏览器变形方式

    -webkit-transform-style: preserve-3d;
    

    这段代码需要添加给三维变形元素的腹肌,提前告知浏览器:我的子元素要3D变身了,然后浏览器会按照三维变形的方式渲染父级以及父级内部的元素。

  • 第二种:直接使用CSS3三维变形语法

    transform: translate3D(100px,200px,300px);transform: translateX(100px) translateY(200px) translateZ(300px);
    

    在三维变形的属性中,都可以按照这种三维书写方式来写。除了 skew,因为它的三维和二维没有任何变化。

思考问题

1. 变形的顺序会不会影响最终的效果?

当一个变形中,并不仅仅存在一个变形时(即需要旋转,也需要平移),不同变形的书写顺序可能会影响最终的效果。

transform: translate(100px) rotateZ(30deg);transform: rotateZ(30deg) translate(100px);

第一段代码表示的是,先平移,后旋转;第二段则是先旋转后平移。可以发现,在第二段明显发生了垂直方向上的位移,这时因为如果元素先旋转,元素的X与Y轴的位置发生改变,接着平移的位置再按照新的x轴方向进行位移,这就导致了在页面垂直方向上发生了位移的改变。所以说,在写变形效果时,需要先考虑好变形的顺序,再进行代码的书写。

2. 对于 rotate(0deg) 能否简写成 rotate(0)

原则上是可以简写,但是在火狐的部分版本中,无法正常读取无单位的角度值。因此考虑兼容性,尽量不要省略。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,076评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,658评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,732评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,493评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,591评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,598评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,601评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,348评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,797评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,114评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,278评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,953评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,585评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,202评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,180评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,139评论 2 352

推荐阅读更多精彩内容