前言:这是笔者学习以后本身的理解与整理。若是有错误或者疑问的地方,请你们指正,我会持续更新!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 的反作用,请点击: