一文搞懂transform skew

2022-01-13 22:47:58 字數 1409 閱讀 6303

目錄

如何理解斜切 skew,先看乙個 demo。在下面的 demo 中,有 4 個正方形,分別是

紅色:不做 skew 變換,

綠色:x 方向變換,

藍色:y 方向變換,

黑色:兩個方向都變換,

拖動下面的滑塊可以檢視改變 skew 角度後的效果。切換 selector 可以設定 transform-origin,origin 預設是0% 0%。大家可以把玩一下。

如果你把滑塊拖到了 90deg 或者 - 90deg,那麼你應該可以回答上面的問題了。如果你在 chrome 上看到整個頁面變白,可以到隔壁 firefox 上試試,就這個 demo 而言,火狐是表現最好的, safari 最差。

see the pen skew by imgss

(@imgss) on codepen.

用左扭,右扭來理解 skew 可能更加符合我們的直覺,但是卻是不準確的。拿綠色正方形來說,origin 在 0% 0% 時,skew 20 度看起來像是往右扭,但是 origin 變成 100% 100% 時,看起來又像是往左扭了。

那麼到底該怎麼理解這個 skew 變換呢,其實它是矩陣 matrix 變換的一種。關於矩陣變換,張鑫旭老師的這篇文章講解的不錯,傳送門,其中提到 skew 變化和通用 matrix 變換的對應關係:

也就是說 matrix 函式的第二三個引數來控制圖形的斜切的,更通用一點,下面這個圖展示了 css matrix 中的 6 個引數分別控制哪種變換,我們可以看一下:

寫到 matrix 函式裡面如下:

有同學問了,為什麼沒有旋轉的引數啊,其實旋轉是 scale 和 skew 的組合操作。但是為了保證旋轉後和原來的形狀保持一致,4 個引數應該存在如下關係:

換句話說,旋轉是一組特定的 scale + skew 組合操作。

在了解到 skew 其實是一種矩陣變換後,我們來了解一下瀏覽器裡的座標系。因為除了 transform,其他操作都受座標原點的影響。在瀏覽器中,向下為 y 軸正方向,向右為 x 軸正方向,唯獨原點是不確定的,而這正是transform-origin所起的作用。

當你設定這個屬性為top left時,就是說矩陣變換座標系的原點位於左上角,從而得到圖形中的各個點的座標,通過矩陣運算得到變換後的座標,最後由瀏覽器渲染出來。設定為50% 50%則意味著座標原點在圖形的中心。

思考下面兩行 css:

對兩個個正方形分別做上述變換,出來的效果是不同的,原因是因為上面兩個操作,相當於對座標進行兩次矩陣乘法運算,不同於普通的乘法運算,矩陣乘法運算是不存在 ** 交換率 ** 的,所以結果會不同。

參考文章:

矩陣/

一文搞懂property函式

接下來我帶大家了解乙個函式的作用以及使用技巧,希望對大家都有幫助,話不多說,接下來就開始我的表演特性 首先property有兩種用法,一種是作為函式的用法,一種是作為裝飾器的用法,接下來我們就逐一分析 property函式 看一下作為函式它包含的引數都有哪些 property fget none,f...

一文搞懂記憶體屏障

gcc編譯選項中有個 o選項,表示編譯 的時候進行優化。這樣就會出現一種可能 優化後的 和優化前的 順序不一致。來看個例子 8 include9 10 int a,b 11 12 int main 13 很簡單,我們使用不加優化選項來將其編譯為組合語言 yuhao laplace workspace...

一文搞懂WordPress建站

文章首發於 日日夜夜的等待,wordpress建站教程終於來了。本篇文章適用於第一次建站的小白,幫助你從零搭建起乙個屬於自己的 既然是從零,那麼我就會帶著你從購買網域名稱等到一直搭建成功,接下來請往下看吧。建 本身是沒有什麼難度的,畢竟現在搭建乙個 的成本也很低,只是配套需要的東西有些繁瑣,我們先把...