CSS Transform

CSS Transform(上:2D Transform)

前言及Transform 基本介紹

MDN官方文檔介紹:CSS中transform 屬性允許你修改CSS可視化模型的坐標(biāo)空間。通過(guò)transform役拴,可以讓元素進(jìn)行移動(dòng)(translate)盹沈、旋轉(zhuǎn)(rotate)禽拔、縮放(scale)实檀、拉伸(skew)庞呕。本文主要介紹2D transform的基本用法及其屬性的原理。

瀏覽器兼容性

  • Internet Explorer 10、Firefox尽超、Opera 支持 transform 屬性
  • Internet Explorer 9 支持替代的 -ms-transform 屬性(僅適用于 2D 變換)。
  • Safari 和 Chrome 支持替代的 -webkit-transform 屬性(3D 和 2D 變換)梧躺。
  • Opera 只支持 2D 變換似谁。

屬性

skew

  • transform: skew(ax,ay)元素在X軸和Y軸負(fù)方向以指定的角度拉伸
  • transform: skew(ax)元素在X軸負(fù)方向以指定的角度拉伸
  • transform: skewX(ax)在X軸負(fù)方向以指定的角度拉伸
  • transform: skewY(ay)在Y軸負(fù)方向以指定的角度拉伸
    ax為x方向的角度,ay為y方向的角度掠哥,如:
  • transform: skew(20deg, 20deg);
  • transform: skew(2rad, 1.8rad);
  • transform: skew(20deg);
  • transform: skew(-20deg)
    demo在此

rotate
繞著Transform-origin點(diǎn)順時(shí)針旋轉(zhuǎn)巩踏,中心點(diǎn)初始值為50% 50%

  • transform: rotate(<angle>)
  • transform: rotate('a'turn)角度為'a' * 360°,'a'為小于1的數(shù)续搀。例如transform: rotate(0.5turn)transform: rotate(180deg)

demo在此

目前Chrome 38+/ Opera 25+ 塞琼,我們還可以使用calc() 屬性,例如transform: rotate(calc(0.25turn - 30deg))

skew和rotate的異同:

  • 接受的參數(shù)單位都是角度,如20deg禁舷,1rad彪杉;
  • skew接受兩個(gè)參數(shù)或一個(gè)參數(shù)毅往,rotate的語(yǔ)法是:transform: rotate(<angle>);
  • skew會(huì)使元素變形,rotate不會(huì)

translate

  • transform:translate(tx[, ty])在X軸\Y軸平移指定距離派近,用向量[tx, ty]完成2D平移攀唯,若沒(méi)有ty則默認(rèn)為0
  • transform:translateX(tx)沿X軸正方向平移指定距離
  • transform:translateY(ty)沿Y軸正方向平移指定距離
    tx\ty的單位可以為px\百分比。
    demo在此

scale

  • transform: scale(sx[, sy]);由[sx, sy]描述指定一個(gè)二維縮放操作渴丸。如果sy 未指定侯嘀,默認(rèn)認(rèn)為和sx的值相同
  • transform: scaleX(sx);使用向量[sx, 1] 完成在X方向上的縮放.
  • transform: scaleY(sy);使用向量[1, sy] 完成在Y方向的縮放.
    transform-origin(初始值為50% 50%)為中心點(diǎn)進(jìn)行縮放曙强,向量坐標(biāo)值大于1或小于-1時(shí)残拐,在相應(yīng)方向放大途茫,坐標(biāo)值處于區(qū)間(-1, 1)時(shí)縮小碟嘴,值為1時(shí)不做變化。如果縮放向量的兩個(gè)坐標(biāo)是相等的囊卜,那么X和Y方向的縮放是均等的娜扇,所以元素的形狀被保持。
    demo在此

ps: transform: scale(-1)可以實(shí)現(xiàn)180°鏡像對(duì)稱效果

matrix

  • 語(yǔ)法:transform: matrix(a, c, b, d, tx, ty)

  • a, c, b, d是一個(gè)二維矩陣:
    ┌ a b ┐
    └ c d ┘
    tx, ty就是基于X和Y坐標(biāo)重新定位元素栅组。

  • 用法:設(shè)變換的中心點(diǎn)為(x雀瓢,y),長(zhǎng)度值tx、ty創(chuàng)建向量[tx,ty]玉掸,a,b,c,d,tx,ty創(chuàng)建矩陣


變換后的中心點(diǎn)坐標(biāo)(x’, y’)


舉個(gè)例子:transform: matrix(1, 0, 0, 1, 20, 20) 變換后的中心點(diǎn)橫縱坐標(biāo):x' = 1 * 0 + 0 * 0 + 20 = 20, y' = 0 * 0 + 0 * 1 + 20 = 20刃麸,中心點(diǎn)坐標(biāo)(0, 0) → (20, 20)
demo
因?yàn)橹行狞c(diǎn)坐標(biāo)初始值為(0, 0),則變換后的中心點(diǎn)坐標(biāo)為(tx, ty)司浪,相當(dāng)于用向量[tx,ty]進(jìn)行坐標(biāo)變換泊业。transform:matrix(a, c, b, d, tx, ty)的變換效果等同于transform: translate(tx, ty), abcd的值與變換無(wú)關(guān)。
注意translate的參數(shù)需要單位啊易,而matrix的參數(shù)的單位可省略吁伺。

Multiple values 同時(shí)使用多個(gè)屬性

如```
.element{
width: 100px;
height: 200px;
transform: scale(2) skew(-20deg);
}

[demo](http://codepen.io/cruyun/pen/zZwWgP)
[CSS Tricks](https://css-tricks.com/almanac/properties/t/transform/) 提到:It’s worth noting that there is an order in which these transforms will be carried out, in the example above `skew` will be performed first and then the element will be scaled.

##Matrix與skew、scale租谈、rotate篮奄、translate
**skew與matrix**、
`transform: matrix(1 tan(θy) tan(θx) 1 0 0)`的變換效果等同于`transform: skew( α + θx,  β + θy)`
設(shè)元素的原坐標(biāo)為(x, y)割去,進(jìn)行matrix變換:![](http://upload-images.jianshu.io/upload_images/4938344-242de94fa8b90ce1.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

變換后的橫坐標(biāo)x' = x+y*tan(θx) 窟却,縱坐標(biāo)y' = x*tan(θy)+y

**scale與matrix**
`transform: matrix(sx 0 0 sy 0 0)`的變換效果等同于 `transform: scale(sx, sy)`
設(shè)元素的原坐標(biāo)為(x, y),進(jìn)行matrix變換:![](http://upload-images.jianshu.io/upload_images/4938344-5d205362d2069c34.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
變換后的元素坐標(biāo)為(sx * x; sy * y)呻逆,即x和y變?yōu)樵瓉?lái)的sx间校、sy倍。

**rotate與matrix**
`transform: matrix(cosα sinα -sinα cosα 0 0)`的變換效果等同于`transform: rotate(α)`
設(shè)元素的原坐標(biāo)為(x, y)页慷,進(jìn)行matrix變換:![](http://upload-images.jianshu.io/upload_images/4938344-30b97e0090aae128.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
變換后的橫縱坐標(biāo)分別為x' = x * cosα - y * sinα, y' = x * sinα + y * cosα

**translate與matrix**
`transform: matrix(1 0 0 1 tx ty)`的變換效果等同于`transform: translate(tx, ty)`,上文已證憔足。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末胁附,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子滓彰,更是在濱河造成了極大的恐慌控妻,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件揭绑,死亡現(xiàn)場(chǎng)離奇詭異弓候,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)他匪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門菇存,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人邦蜜,你說(shuō)我怎么就攤上這事依鸥。” “怎么了悼沈?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵贱迟,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我絮供,道長(zhǎng)衣吠,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任壤靶,我火速辦了婚禮缚俏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘贮乳。我一直安慰自己忧换,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布塘揣。 她就那樣靜靜地躺著包雀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪亲铡。 梳的紋絲不亂的頭發(fā)上才写,一...
    開(kāi)封第一講書(shū)人閱讀 51,727評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音奖蔓,去河邊找鬼赞草。 笑死,一個(gè)胖子當(dāng)著我的面吹牛吆鹤,可吹牛的內(nèi)容都是我干的厨疙。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼疑务,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼沾凄!你這毒婦竟也來(lái)了梗醇?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤撒蟀,失蹤者是張志新(化名)和其女友劉穎叙谨,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體保屯,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡手负,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了姑尺。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片竟终。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖切蟋,靈堂內(nèi)的尸體忽然破棺而出统捶,到底是詐尸還是另有隱情,我是刑警寧澤敦姻,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布瘾境,位于F島的核電站歧杏,受9級(jí)特大地震影響镰惦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜犬绒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一旺入、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧凯力,春花似錦茵瘾、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至祈惶,卻和暖如春雕旨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背捧请。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工凡涩, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人疹蛉。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓活箕,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親可款。 傳聞我的和親對(duì)象是個(gè)殘疾皇子育韩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Transform字面上就是變形克蚂,改變的意思。在CSS3中transform主要包括以下幾種:旋轉(zhuǎn)rotate筋讨、扭...
    hzrWeber閱讀 22,140評(píng)論 0 19
  • 看了很多視頻陨舱、文章,最后卻通通忘記了版仔,別人的知識(shí)依舊是別人的游盲,自己卻什么都沒(méi)獲得。此系列文章旨在加深自己的印象蛮粮,因...
    DCbryant閱讀 1,864評(píng)論 0 4
  • byzhangxinxufromhttp://www.zhangxinxu.com 本文地址:http://www...
    凌雲(yún)木閱讀 7,192評(píng)論 0 8
  • 最近在學(xué)習(xí)CSS動(dòng)畫相關(guān)的知識(shí)益缎,于是連帶著把會(huì)用到的一些知識(shí)點(diǎn)進(jìn)行了一些整理。在此然想,做一下總結(jié)莺奔。 Transfor...
    SCQ000閱讀 7,119評(píng)論 0 51
  • 語(yǔ)法 transform:none|<transform-function>+ (1)rotate()旋轉(zhuǎn)角度 r...
    april_Dong閱讀 491評(píng)論 0 0