前言:這是筆者學習以後本身的理解與整理。若是有錯誤或者疑問的地方,請你們指正,我會持續更新!css
有段時間我是沒理清 transform、translate、transition 和 animation之間的關係的,如今整理一下:html
translate(位置平移)web
rotate(旋轉)瀏覽器
scale(縮放)app
<style type="text/css"> * { padding: 0; margin: 0; } .wrapper { width: 300px; margin: 100px 0 0 100px; border: 10px solid red; } .test { width: 200px; height: 200px; display: inline-block; background: #0ff; transform: scale(.5, -1); border: 1px solid #f60; } .test img { max-width: 100%; } </style> <div class="wrapper"> <span class="test"><img src="images/1.jpg" /></span> <span>scale能夠設置小數,也能夠設置負值;雖然大小看起來變化了,但佔據的空間不變,不會影響佈局</span> </div>
<style type="text/css"> * { padding: 0; margin: 0; } .wrapper { width: 300px; height: 300px; position: relative; margin: 100px 0 0 100px; border: 1px solid red; background: #0ff; } .test { width: 150px; height: 60px; position: absolute; left: 30%; top: 30%; background: #f60; transform: skewX(-45deg); } </style> <div class="wrapper"> <div class="test"></div> </div>
設置轉換元素的基準點,而後元素的變形就圍繞這個點展開;佈局
設定元素及其子元素怎樣在三維空間中展現;學習
設置元素距離視圖的距離,動畫
設置視點;spa
設置當元素不面向屏幕時,是否可見;若是旋轉元素不但願看見其背面時,此屬性很好用;3d
正方體後面要繞 Y 軸旋轉180度,我一開始沒想起來,調了好久;
<style type="text/css"> * { padding: 0; margin: 0; } li { list-style: none; } /*定義舞臺容器*/ .panel { width: 800px; margin: 100px auto; perspective: 1300px; /*定義視距*/ } .panel:hover ul { transform: rotateY(60deg)rotateZ(45deg); } /*立方體*/ ul { width: 100px; height: 100px; margin: auto; position: relative; transform-style: preserve-3d; /*定義該立方體是個3D元素*/ transform: rotateX(-30deg) rotateY(20deg); transition: all 2s; cursor: pointer; } /*立方體六個面*/ li { width: 100px; height: 100px; position: absolute; top: 0; left: 0; font: 30px/100px "微軟雅黑"; text-align: center; color: #fff; backface-visibility: hidden; } .front { transform: translateZ(50px); background: rgba(0, 255, 0, .6); } .back { transform: translateZ(-50px) rotateY(180deg); /*後面要旋轉繞Y軸180度,我一開始沒想起來,調了好久*/ background: rgba(255, 0, 255, .6); } .left { transform: translateX(-50px) rotateY(-90deg); background: rgba(0, 0, 255, .6); } .right { transform: translateX(50px) rotateY(90deg); background: rgba(255, 255, 0, .6); } .top { transform: translateY(-50px) rotateX(90deg); background: rgba(255, 0, 0, .6); } .bottom { transform: translateY(50px) rotateX(-90deg); background: rgba(0, 255, 255, .6); } </style> <div class="panel"> <ul> <li class="top">上</li> <li class="bottom">下</li> <li class="left">左</li> <li class="right">右</li> <li class="front">前</li> <li class="back">後</li> </ul> </div>
大神還整理了 transform 的反作用,請點擊: