transform
transform 属性是一个简写属性,由 rotate
、 translate
、 scale
、 skew
这四个变形函数组成。
书写时每个变形函数用空格隔开,执行时从左往右,确保每个变形函数都是有效的,如何有一个没有效整个属性都将失效。
不同的变形顺序,不同的结果。
<style>
.one {
width: 150px;
height: 150px;
background: rgba(136, 160, 63, 0.5);
transition: transform 1s;
}
.two {
width: 150px;
height: 150px;
background: rgba(136, 160, 63, 0.5);
transition: transform 1s;
}
.one:hover {
transform: translateX(100px) rotate(45deg);
}
.two:hover {
transform: rotate(45deg) translateX(100px) ;
}
</style>
<body>
<div class='one'></div>
<div class='two'></div>
</body>
transform-origin
transform-origin 指定变形原点,初始值:50% 50%。
2D 的变形原点是由 X 轴和 Y 轴决定的。
x轴: left | center | right | <length> | <percentage>
y轴: top | center | bottom | <length> | <percentage>
关键字
x轴
left: 0% center: 50% right: 100%
y轴
top: 0% center: 50% bottom: 100%
注意:x 轴数值表示在 x 轴上离 0 点(元素边框外侧左上角)的偏移量;y 轴数值表示在 y 轴上离 0 点的偏移量。
注意:其中 x 轴的百分比相对于元素的宽度和(width+横向 padding+横向 border),即包含块的宽度;而 y 轴的百分比相对于元素的高度和(height+纵向 padding+纵向 border),即包含块的高度。
注意:只有一个值时,默认第二个值 center。
rotate 函数
rotate旋转函数可以让元素通过指定的角度(deg)根据变形原点进行顺时针旋转,默认为 0deg。
注意:元素旋转后,元素的 x 轴和 y 轴也跟着发生旋转。若元素要进行其他变形操作,则沿着旋转后的 x 轴和 y 轴进行变形。
注意:当 N 为正数时,元素进行顺时针旋转;当 N 为负数时,元素进行逆时针旋转。
<style>
.bg {
background: rgba(136, 160, 63, 0.5);
width:150px;
height: 150px;
}
.demo {
width: 150px;
height: 150px;
background: rgba(136, 160, 63, 0.5);
transition: transform 1s;
transform-origin: center;
}
.demo:hover {
transform: rotate(360deg);
}
</style>
<div class='bg'>
<div class='demo'></div>
</div>
translate 函数
translate 位移函数可以使元素从原来的位置上移动指定的位移,有三种写法:translate()、translateX()、translateY()。
注意:元素发生位移后,元素的 x 轴和 y 轴跟着也一并移动,若元素再进行其他的变形操作,则要沿着改变后的x轴和y轴进行变形。
注意:translateX(x) 相当于 translate(x, 0),translateY(y) 相当于 translate(0, y)。
注意:位移函数还可以接受百分比,其中 x% 相对于元素水平方向的宽度和,y% 相对于元素垂直方向的高度和。
<style>
.bg {
background: rgba(136, 160, 63, 0.5);
width:150px;
height: 150px;
}
.demo {
width: 150px;
height: 150px;
background: rgba(136, 160, 63, 0.5);
transition: transform 1s;
transform-origin: center;
}
.demo:hover {
transform: translateX(100%)
}
</style>
<body>
<div class='bg'>
<div class="demo"></div>
</div>
</body>
<style>
/* 上面代码换成 */
.demo:hover {
transform: translateY(100%)
}
</style>
<style>
/* 上面代码换成 */
.demo:hover {
transform: translate(100%, 100%)
}
</style>
scale 函数
scale 缩放函数可以让元素根据变形原点进行缩放,默认缩放值为1,有三种写法:scale()、scaleX()、scaleY()。
注意:scaleX(x) 相当于 scale(x, 1),scaleY(y) 相当于 scale(1, y)。
注意:当元素被缩放后,若元素要进行位移,数值类型的位移值要乘以该缩放比例;百分比类型的位移值乘以原来的宽度和或高度和转换成数值类型后,再乘以缩放比例。
注意:scale() 只有一个值时,则用作两个轴的缩放值。如果 x 或 y 为负z值时,元素先翻转再缩放。
<style>
.bg {
background: rgba(136, 160, 63, 0.5);
width:150px;
height: 150px;
margin: 100px;
}
.demo {
width: 150px;
height: 150px;
background: rgba(136, 160, 63, 0.5);
transition: transform 1s ease;
transform-origin: center;
}
.demo:hover {
transform: scale(1.5)
}
</style>
<div class="bg">
<div class="demo"></div>
</div>
<style>
/* 上面代码换成 */
.demo:hover {
transform: scale(-1.5)
}
</style>
skew 函数
skew 倾斜函数可以让元素以其变形原点围绕 x 轴和 y 轴进行一定角度的倾斜,有三种写法:skew()、skewX()、skewY()。
注意:元素倾斜后,x 轴和 y 轴发生倾斜,若元素要进行其他变形操作,则沿着倾斜后的 x 轴和 y 轴进行变形。
注意:x 表示 y 轴向 x 轴倾斜的角度,y 表示x轴向 y 轴倾斜的角度。
- x>0 时,表示 y 轴向 x 轴正方向倾斜;x<0 时,表示 y 轴向 x 轴负方向倾斜。
- y>0 时,表示 x 轴向 y 轴正方向倾斜;y<0 时,表示 x 轴向 y 轴负方向倾斜。
注意:skewX(x) 相当于 skew(x, 0),skewY(y) 相当于 skew(0, y)。
<style>
.bg {
width: 150px;
height: 150px;
background: rgba(136, 160, 63, 0.5);
margin: 100px;
position: relative;
}
.demo {
width: 150px;
height: 150px;
background: rgba(136, 160, 63, 0.5);
transition: transform 1s;
}
.demo:hover {
transform: skewX(45deg);
}
</style>
<body>
<div class='bg'>
<div class='demo'></div>
</div>
</body>
<style>
/* 上面代码换成 */
.demo:hover {
transform: skewY(45deg);
}
</style>
<style>
/* 上面代码换成 */
.demo:hover {
transform: skew(45deg, 45deg);
}
</style>
参考:
[1] CSS变形transform(2d)
[2] CSS变形与动画
[3] transform