transform
(css properties)transform
能旋轉、傾斜、縮放變形 boxtransform
特性 (css properties) ,直接就可以旋轉、歪斜、放大、縮小、移動元素 (elements) 的 box ,甚至 3D 的迴旋、透視。包括整個元素所有的內容也都隨之變形,不再侷限只能在僵硬的矩形框,對網頁排版及設計上會有很大的彈性和突破,而且對網頁正常的編排不會有相互排擠問題,一格黏接一格耗時費工的殘腦時代終將走入歷史。本篇僅先就 2D transform
的部分討論。transform: transform-function;
none
;表示沒有套上任何變形。transform-origin
特性 (稍後說明) ,可指定不同的位置點;例如我們想以元素的左上角為旋轉中心軸,或是中心軸改在元素的外面也可以。transform-function
(transformation functions) ₪函數括號內的角度 θ
參數必須有單位,可以是 deg
(角度 ° ) 、 rad
(弧度) 、 grad
(梯度) ,大小寫都可接受; m
, a
, b
, c
, d
, e
, f
參數為數字,不需要單位; o
參數為合法的尺寸值 (length) 或 % (百分比) 。
rotate(θ)
θ
度。skewX(θ)
θ
度。skewY(θ)
θ
度。skew(θx,θy)
θx
度、 縱向傾斜 θy
度。參數如果只指定 1 個,省略的第 2 個參數,會視為 0 ,也就是只有沿橫向傾斜。September, 2012 w3c 草書又復原此項scaleX(m)
m
倍。scaleY(m)
m
倍。scale(mx,my)
mx
倍、縱向縮放 my
倍,等於是結合 scaleX(mx)
, scaleY(my)
。參數如果只指定 1 個,省略的第 2 個參數,會等於第 1 個,也就是橫向、縱向以相同比例縮放。translateX(o)
o
距離。translateY(o)
o
距離。translate(ox,oy)
ox
距離、縱向移動 oy
距離,等於是結合 translateX(ox)
, translateY(oy)
。參數如果只指定 1 個,省略的第 2 個參數,會視為 0 ,也就是只有橫向移動。matrix(a,b,c,d,e,f)
transform:rotate(3deg);
transform:skewX(20deg);
transform:scaleY(1.8);
transform:translateX(60px);
transform:translate(180px) rotate(-5deg) scale(0.8);
transform:matrix(0,1.611,1.611,0.278,5,5);
後面會有更多例子討論。
transform-origin
特性 (property) 指出變形的參考點座標 (中心軸) ₪transform-origin: x y;
center
, top
, right
, bottom
, left
) ,依據字意即可表示方向和位置,所以 2 個值沒有順序問題。center
(50%) 。transform-origin:100px 20px;
transform-origin:right;
各家瀏覽器廠商都有自創的 css 特性或值 (多半指非 w3c 標準規範) ,可提供更多額外的功用。廠商經常為了搶先支援 w3c 未正式發佈的規範,也會先以擴充特性來處理。
廠商專屬擴充特性的語法: -
(減號) 接上廠商辨識詞 (vendor identifier) ,再接 -
(減號) 作為類似前置詞,然後再接 css 特性或值。最前面的 - (減號) 換成 _ (底線) 也可以,目前大多習慣用 - 。
以下列出幾個較常見的瀏覽器供應廠商:
-moz-
特性:適用 firefox 等 Mozilla Gecko 系列。-webkit-
特性:適用 safari, google chrome 等系列。-o-
特性:適用 opera 系列; opera 15 後改版成 -webkit-
。-ms-
特性:適用 ie 等 microsoft 系列。例如在 ie 用到的濾鏡特性 -ms-filter
就是 。
思考 - css 變形效果 (css
transform
) 突破網頁排版障礙css
transform
變形效果支援的 html 元素,舉凡圖片 (img
) 、視訊影片 (video
) 、多媒體物件 (object
) 都可以旋轉、傾斜,這讓設計者輕輕鬆鬆就能做出令人驚歎的視覺效果。元素經過變形後,瀏覽器會以插補像素 (interpolation) 運算後重新繪製呈現,以降低出現鋸齒或模糊的現象,這是值得讚許的技術,因為不再需要花不必要的工夫去處理變形後圖形失真或文字模糊的問題。各家瀏覽器插補運算方式當然不盡相同,所以看起來會有些許差異。
至更新時,
transform
特性在部分瀏覽器,如 google chrome, safari 等,仍為的專屬擴充特性,所以在特性前需要加上廠商辨識詞,稍後範例的語法以較淡色呈現這部分。而新版的 firefox 及 ie 10 已不需加廠商辨識詞。border
。另外加了紅色瞄準標記,只是為了表示變形參考點位置,所以語法內沒有列出。以下範例的每項主題都有加了對應的 css 效果,沒看到應該有的效果?
旋轉效果
transform:rotate(θ)
旋轉的變形矩陣語法
transform:matrix(cosθ,sinθ,-sinθ,cosθ,0,0)
元素的所有內容,包括文字、圖片也都旋轉,而且不會影響其它版面編排。
以
transform-origin
特性指定右下角為旋轉的基準點。旋轉 180° 、或是範例的 π 弧度 (轉半圈) ,就會翻倒了。 (游標移入中心可比較原來的樣子)
傾斜效果
transform:skewX(θ)
,transform:skewY(θ)
,transform:skew(θx,θy)
傾斜的變形矩陣語法
transform:matrix(1,tanθy,tanθx,1,0,0)
以
transform-origin
特性指定下緣中間為傾斜的基準點,只用特性值bottom
,另一方向視為center
。以
transform-origin
特性指定左緣中間為傾斜的基準點,只用特性值left
,另一方向視為center
。連續指定沿著橫軸及縱軸傾斜。
縮放效果
transform:scaleX(m)
,transform:scaleY(m)
,transform:scale(mx,my)
縮放的變形矩陣語法:
transform:matrix(mx,0,0,my,0,0)
以
transform-origin
特性指定左側中間為放大的基準點,只用特性值 0 ,垂直方向視為center
。以中心為基準,縱向橫向縮放都會向上下或左右兩個方向內縮或擴大。
scale()
指定 2 個參數依序表示橫向、縱向縮放,等於是結合scaleX()
,scaleY()
。以transform-origin
特性指定左側中間為縮放的基準點,只用特性值 0 ,垂直方向視為center
。簡單地只指定 1 個參數表示橫向、縱向縮放同一比例,也就是等同
scale(0.8,0.8)
的意思。負數的縱向縮放參數產生上下顛倒的效果,負數的橫向縮放參數產生左右顛倒的效果,就像倒影或照鏡子效果。 (游標移入桃紅色符號中央可比較原來的樣子)
移動效果
transform:translateX(o)
,transform:translateY(o)
,transform:translate(ox,oy)
移動的變形矩陣語法:
transform:matrix(1,0,0,1,ox,oy)
橫向移動,正值向右、負值向左。這樣的效果和以往運用
position:relative;
指定位移 (offset) 的方法簡直沒什麼兩樣,但是這個移動方式除了語法單純易懂外,還可結合其它變形,更具發揮設計的便利。以百分比為單位,橫向移動以元素本身的寬度計算,縱向移動則以的高度計算;這和 css box 以容納區 (containing block) 尺寸為百分比計算的基準不同。
縱向移動,正值向下、負值向上。
translate()
指定 2 個參數依序表示橫向、縱向移動距離,等於是結合translateX()
,translateY()
。如果只指定 1 個,省略的第 2 個參數,會視為 0 ;沒有另外指定縱向移動,translate(50px)
跟translateX(50px)
會是一樣的。同時綜合多種不同變形效果。
同時在一個元素加入 3 種變形效果,以半形空格間隔,會依序運算套用。
與前例套用相同 3 種變形效果,但是由於順序不同,仔細觀察其實是不同結果。橫移是在最後發生,所以實際上是延著旋轉後的角度 -5° 橫移 (不是水平方向) 。
matrix
複雜的變形矩陣,稍舊版 ie 也能玩matrix
。如果需要使用
matrix
產生更複雜的變形,矩陣的數值實在很難以一般方式計算。真好!感謝 Zoltan 寫好了可以幫我們產生 6 個參數的線上工具程式 Matrix Construction Set ,不過要有支援 html 5 Drag and Drop 的瀏覽器才能使用;也感謝 WEB 前端開發 (CSS88.com) 做了線上工具程式可輸入 6 個參數立即看到測試結果。讀者自己玩玩看囉!ie8 及較舊版,可使用 ie 專屬擴充特性 Matrix filter (ie9 起已不再支援) ,原理與
transform:matrix(a,b,c,d,e,f)
是一樣的,語法大致上會是這樣:對照參數
M11
→a
,M21
→b
,M12
→c
,M22
→d
,Dx
→e
,Dy
→f
,詳細可參閱 microsoft Matrix filter 。transform
後的異常table
) :所有瀏覽器有效。指定border-collapse:collapse;
特性 (儲存格間沒空隙) , firefox 原有border
會消失。table
元素指定了border-collapse:collapse;
特性 (儲存格間沒空隙) ,各家瀏覽器產生有趣的呈現,讀者可以自行試試。::first-letter
,::first-line
都不支援。