關于css中transform屬性中matrix的理解

<a href="#main">前面又一些對你可能不是特別重要的前言,你可以點擊我跳過。</a>

很久以前接了一個項目,里面需要用到一些字體小于12px的字,然后發(fā)現(xiàn)chrome不支持,當時是一個個用transform:scale()改過來的,并且判斷每個瀏覽器是不是chrome。然后在不久前準備做一個小小的js庫來直接引用然后讓其效果和火狐這種支持小字體的瀏覽器一樣。十幾天前還不支持小字體的chrome在今天突然就支持了小字體。wcnm。

然后項目就變成了 “如何讓使用transform:scale(0.5)獲得的小字體的顯示效果和直接使用了font-size:6px;的效果一樣。”期間遇到了使用element.style.fontSize只能夠獲取寫在標簽內(nèi)的樣式的問題,以及關于transform中的矩陣的問題。

通過正常的js代碼也就是element.style.fontSize這種是無法獲取到寫在style標簽以及css文件里面的屬性的,那么我們應當如何獲得呢?

可以使用window.getComputedStyle這個方法。
example:

CSS文件中有:
.height_width_chrome{
    -webkit-transform:scale(0.5);
}
js文件中這么獲取:
var test2=document.getElementsByClassName('height_width_chrome');
var transform=window.getComputedStyle(test2[0],null).getPropertyValue("transform");

以字符串的形式返回,getPropertyValue里面直接寫css里面的屬性名就行了,感興趣的可以詳細了解這個方法。

現(xiàn)在問題又來了,得到transform之后,console.log會在控制臺看到
matrix(0.5, 0, 0, 0.5, 0, 0),也就是這個值包含了所有的transform變換在里面。那么這個是什么意思呢?

<a name=main>關于transform中的matrix</a>

對了,你可能需要先看張鑫旭張大神的文章,他解釋的比我好很多,我的這篇文章可能只是想講出我自己的想法。奉上鏈接...

首先,我們所有看到的東西都可以視為圖片,例如,我們對于一個有長寬的div進行縮放,那么我們可以將這個div視為一張圖片,當你縮小為0.5倍的時候,那么面積就變?yōu)?/4倍,并且這個縮放是有中心點的,中心點的聞之可以用transform-origin:100px 200px;來更改。

然后圖像是由一個個的像素點所構成的,那么偏移指的就是圖片中的每一個像素點按照指定的規(guī)則進行偏移,假設原本的位置為(x,y)那么偏移后的位置則為(x+30,y+30),這個可以認同吧?

然后是縮放,由于縮放是有縮放算法的,可以去了解了解。

但是縮放的話我們可以這么想象,一幅圖片寬高縮小為0.5倍,那么面積會變成1/4,這個在整體的情況下是可以很容易就想出來的,但是當你去細究的時候,你會發(fā)現(xiàn),無論怎么說,屏幕都是一個個像素點組成的,jpg,png等圖片也是一個個的像素點組成的,然后像素點的寬高根據(jù)你的屏幕分辨率來說確定的,也就是說沒有0.5px這種說法,那么是怎么將寬度縮小為原來的一般的?是直接丟棄一些像素點?很明顯的不是,縮放是有特定的算法的,屬于圖像處理的部分。

但是關于transform:scale這個的縮放,我們可以直接從宏觀的方面考慮,都學過坐標吧?每個坐標都擁有最小的單位長度,縮放呢,就只是將單位長度進行縮放(也就是說我們允許用0.5px做為單位長度1,但是實際情況不是的。有興趣的同學可以去查查圖像處理里面的縮放。),數(shù)值并不進行改變,這也就會使得你在用js獲取這個的寬高的時候會發(fā)現(xiàn),他們的寬高的數(shù)值并沒有改變,但是在視覺上改變了。

關于旋轉,我們可以用極坐標的方式進行計算??梢钥磮D:

F76EDBBD6C7FAF47A37F2C30165BAC29.jpg

好了,前面的一些解釋可以和下面的進行印證。
話說我們獲得了matrix(0.5, 0, 0, 0.5, 0, 0),這個代表了縮小為0.5倍。首先用字母替代(看了張大佬的文章,感覺這篇文章里面充斥了他的做法。)matrix(a,b,c,d,e,f)。
那么a,d代表縮放,分別為x&y軸上的縮放,transform:scale(x,y),scale是支持x,y方向不同縮放大小的。
e,f代表從原點的偏移,transform: translate(30px, 35px);像這樣,表示每一個像素x方向加30px,y方向加35px;
a,b,c,d則可代表著旋轉。分別為cosθ,sinθ,-sinθ,cosθ。transform:ratate(7deg)就是順時針旋轉7度。

抱歉,這篇文章由于隔了太長的時間了,可能需要點時間自己去填坑。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Transform字面上就是變形,改變的意思。在CSS3中transform主要包括以下幾種:旋轉rotate、扭...
    hzrWeber閱讀 22,269評論 0 19
  • 手勢圖片控件 PinchImageView 點擊圖片框架 photoView packagecom.example...
    Ztufu閱讀 808評論 0 1
  • CSS Transform(上:2D Transform) 前言及Transform 基本介紹 MDN官方文檔介紹...
    Cruyun閱讀 1,620評論 0 3
  • 分頁使用 自定義 manger 管理器 重構 把 category_list 和 archive_list 放到了...
    v小飛俠v閱讀 411評論 0 0
  • 我叫柯禾,十七歲,女,生于故城北,不過現(xiàn)在住在故城南。 我的生活本是美好無比,可一切都在那場大雨里變了模樣。那天夜...
    懷深閱讀 428評論 0 1

友情鏈接更多精彩內(nèi)容