css3 | 淺談transform變換

transform屬性向元素應用2D3D轉換。該屬性容許咱們對元素進行旋轉、縮放、移動或傾斜。學會transform的使用,才能更好創造出更好的頁面效果。css

2D轉換

平移 translate()

translate()方法,根據左(X軸)和頂部(Y軸)位置給定的參數,從當前元素位置移動。html

div {
  -ms-transform: translate(50px,100px); /* IE 9 */
  -webkit-transform: translate(50px,100px); /* Safari and Chrome */
  transform: translate(50px,100px);
} 
複製代碼

旋轉 rotate()

rotate()方法,在一個給定度數順時針旋轉的元素。負值是容許的,這樣是元素逆時針旋轉。前端

div {
  -ms-transform: rotate(30deg); /* IE 9 */
  -webkit-transform: rotate(30deg); /* Safari and Chrome */
  transform: rotate(30deg);
}
複製代碼

縮放 scale()

scale()方法,該元素增長或減小的大小,取決於寬度(X軸)和高度(Y軸)的參數web

div {
  -ms-transform:scale(2,3); /* IE 9 */
  -webkit-transform: scale(2,3); /* Safari */
  transform: scale(2,3); /* 標準語法 */
}
複製代碼

skew() 斜切

transform:skew( [,]);小程序

包含兩個參數值,分別表示X軸和Y軸傾斜的角度,若是第二個參數爲空,則默認爲0,參數爲負表示向相反方向傾斜。微信小程序

skewX(<angle>);表示只在X軸(水平方向)傾斜。前端框架

skewY(<angle>);表示只在Y軸(垂直方向)傾斜。微信

div {
  -ms-transform: skew(30deg,20deg); /* IE 9 */
  -webkit-transform: skew(30deg,20deg); /* Safari and Chrome */
  transform: skew(30deg,20deg);
}
複製代碼

matrix() 方法

定義一個變換矩陣,嚴格來說,以上的幾種方法都是matrix()函數的特殊狀況。在2D變換中,函數的參數是六個值。框架

簡單來說,向量來描述空間中的任何一個對象,而後用矩陣來描述空間中的變換。而使某個對象發生運動的方法就是用表明運動的矩陣乘以表明對象的那個向量。也就是說,在線性空間選定基以後,向量刻畫對象,矩陣刻畫對象的運動,用矩陣與向量的乘法施加運動。函數

舉個例子:

div {
  transform: matrix(a,b,c,d,e,f);
}
複製代碼

以上代碼用矩陣表示就是:

enter description here
1547402647196.jpg

元素的初始矩陣爲transform: matrix(1,0,0,1,0,0);也就是這個屬性下元素沒有任何變化。

在引入向量施加運動:

enter description here
1547402937244.jpg

這樣相乘得出兩個式子:

x'=ax+cy+e;
複製代碼
y'=bx+dy+f
複製代碼

x'y'就是元素被施加變換後的位置座標,從這個式子不難看出,若是咱們想把x'增長100,只須要e增長100,那麼元素就會右移100px

div {
  transform: matrix(1,0,0,1,100,0);
}
複製代碼

再來看一個縮放的例子,假如咱們想元素上每一點的x增長到原來的兩倍,應該將x的係數變爲2,即將a設爲2,這樣就能夠作出水平方向上增大兩倍的效果。

div {
  transform: matrix(2,0,0,1,0,0);
}
複製代碼

能夠看到matrix不一樣的組合能夠作出任何你想要的效果。

transform-origin 屬性

transform-Origin屬性容許您更改轉換元素的位置。

2D轉換元素能夠改變元素的X和Y軸。 3D轉換元素,還能夠更改元素的Z軸。

transform-origin: x-axis y-axis z-axis;

div{
  -ms-transform: rotate(45deg); /* IE 9 */
  -ms-transform-origin:20% 40%; /* IE 9 */
  -webkit-transform: rotate(45deg); /* Safari and Chrome */
  -webkit-transform-origin:20% 40%; /* Safari and Chrome */
  transform: rotate(45deg);
  transform-origin:20% 40%;
}
複製代碼

3D 轉換

學好3d首先要了解3d效果的座標系:

enter description here
1547405250346.jpg

3d變換的函數與2d相似,只是加上了3d,好比translate變爲translate3dtranslateZ這表示3d變換中的z軸變換,這些用法和2d基本相同,不在重複,下面是一些3d中比較特殊的屬性

屬性的使用

transform-style:flat|preserve-3d; 規定被嵌套元素如何在 3D 空間中顯示(子元素是否保留3d位置)。

<div id="div1">
  <div id="div2">
  	3dtransform
  </div>
</div>
複製代碼
# div1{
  height: 200px;
  width: 200px;
  margin: 100px;
  padding:10px;
  border: 1px solid black;
}
# div2{
  margin:50px; 
  border: 1px solid black;
  background-color: red;
  transform: rotateY(60deg);
  transform-style: preserve-3d;
}
複製代碼

perspective: number|none; 規定 3D元素的透視效果(做用於父元素)。

#div1{
	height: 150px;
	width: 150px;
	margin: 50px;
	padding:10px;
	border: 1px solid black;
	perspective:150;
}
#div2{
  margin:50px;
  border: 1px solid black;
  background-color: yellow;
  transform: rotateX(45deg);
}
複製代碼

perspective-origin: x-axis y-axis; 規定 3D 元素的底部位置。(做用於父元素,眼睛看元素的方向)

#div1{
	height: 150px;
	width: 150px;
	margin: 50px;
	padding:10px;
	border: 1px solid black;
	perspective:150;
	perspective-origin: 10% 10%;
}
#div2{
	margin:50px;
	border: 1px solid black;
	background-color: red;
	transform: rotateX(45deg);
}
複製代碼

backface-visibility:visible | hidden 定義元素在不面對屏幕時是否可見。

-webkit-backface-visibility:hidden;
複製代碼

matrix3d

在3d變換中的矩陣原來和2d同樣,可是複雜度上升很多,好比一個3d縮放transform: matrix3d(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1)用矩陣表示爲:

enter description here
1547405716474.jpg

做者簡介:葉茂,蘆葦科技web前端開發工程師,表明做品:口紅挑戰網紅小遊戲、蘆葦科技官網。擅長網站建設、公衆號開發、微信小程序開發、小遊戲、公衆號開發,專一於前端框架、服務端渲染、SEO技術、交互設計、圖像繪製、數據分析等研究。

歡迎和咱們一塊兒並肩做戰: web@talkmoney.cn 訪問 www.talkmoney.cn 瞭解更多

相關文章
相關標籤/搜索