定义
- transform 属性向元素应用 2D 或 3D 转换。该属性允许我们对元素进行旋转、缩放、移动或倾斜。
- transition,就是通过鼠标的单击、获得焦点,被点击或对元素任何改变中触发,并平滑地以动画效果改变 CSS 的属性值。
transform
transform 属性向元素应用 2D 或 3D 转换。该属性允许我们对元素进行旋转、缩放、移动或倾斜。
语法:
transform: none | transform-functions;
transform-functions有以下几个值:
属性值 | 含义 |
---|---|
rotate() | 旋转 |
scale() | 缩放 |
translate() | 位移 |
skew() | 扭曲 |
rotate() 旋转
旋转 rotate()函数通过指定的角度参数(单位:deg)使元素相对原点进行旋转。它主要在二维空间内进 行操作,设置一个角度值,用来指定旋转的幅度。如果这个值为正值,元素相对原点中心顺 时针旋转;如果这个值为负值,元素相对原点中心逆时针旋转。如下图所示:
//表示顺时针旋转30度
div{transform: rotate(30deg);}
scale() 缩放
缩放 scale()函数让元素根据中心原点对对象进行缩放。scale()的默认值是1,当设置0.01-0.99之间的任何值时,将使元素缩小;设置大于1的任何值时,将使元素放大。
缩放 scale 具有三种情况:
1、scale(X,Y),使元素水平方向和垂直方向同时缩放。如果没有设置Y值,则表示X/Y两个方向的缩放倍数是一样的。
/*表示将元素放大1.5倍*/
div{transform:scale(1.5);}
/*表示水平镜像*/
div{transform:scale(-1,1);}
/*表示垂直镜像*/
div{transform:scale(1,-1);}
2、scaleX(x),表示元素仅水平方向缩放。
3、scaleY(y),表示元素仅垂直方向缩放。
translate() 位移
translate()函数可以将元素向指定的方向移动,类似于 position 中的 relative。或以简单的理解为,使用 translate()函数,可以把元素从原来的位置移动,而不影响页面上的其他的元素。
translate(),分为三种情况:
1、transltate(x,y),水平方向和垂直方向同时移动。
div{transform:translate(100px,20px);}
向左移动100px,向下移动20px。
2、translateX(x),仅水平方向移动。
div{transform:translateX(100px);}
向左移动100px。
3、translateY(y),仅垂直方向移动。
div{transform:translateY(20px);}
skew() 扭曲
扭曲 skew()函数能够让元素倾斜显示。它可以将一个对象以其中心位置围绕着 X 轴和 Y 轴 按照一定的角度倾斜。这与 rotate()函数的旋转不同,rotate()函数只是旋转,而不会改变元素的形状。skew()函数不会旋转,而只会改变元素的形状。
skew()具有三种情况:
1、skew(x,y),使元素在水平和垂直方向按一定的角度值进行扭曲变形。第一个参数对应 X 轴,第二个参数对应 Y 轴。如果未设置第二个参数,则值为 0,表示Y 轴方向上无斜切。
div{transform:skew(30deg,10deg);}
水平方向扭曲30度,垂直方向扭曲10度。
2、skewX(x),元素仅在水平方向扭曲变形。
div{transform:skewX(30deg);}
水平方向扭曲30度。
3、skewY(y),元素仅在垂直方向扭曲变形。
div{transform:skewY(10deg);}
垂直方向扭曲10度。
transform-origin 原点
任何一个元素都有一个中心点,默认情况之下,其中心点是居于元素 X 轴和 Y 轴的 50%处。如下图所示:
在没有重置 transform-origin 改变元素原点位置的情况下,CSS 变形进行的旋转、位移、 缩放,扭曲等操作都是以元素自己中心位置进行变形。但很多时候,我们可以通过 transform-origin 来对元素进行原点位置改变,使元素原点不在元素的中心位置,以
达到需要的原点位置。
transform-origin 取值和元素设置背景中的 background-position 取值类似,如下表所示:
关键词 | 百分比 | 含义 |
---|---|---|
top = top center = center top | 50% 0 | 上边的中点位置 |
left = left center = center left | 0 或 (0 50%) | 左边的中点位置 |
right = right center = center right | 100% 或 (100% 50%) | 右边的中点位置 |
bottom = bottom center = center bottom | 50% 100% | 下边的中点位置 |
center = center center | 50% 或 (50% 50%) | 元素中心点位置 |
top left = left top | 0 0 | 左上顶点的位置 |
top right = right top | 100% 0 | 右上顶点的位置 |
bottom left = left bottom | 0 100% | 左下顶点的位置 |
bottom right = right bottom | 100% 100% | 右下顶点的位置 |
示例:通过 transform-origin 改变元素原点到左上角,然后进行顺时旋转 45 度。
div{
transform-origin: left top;
transform: rotate(45deg);
}
transition 过渡效果
早期在 Web 中要实现动画效果,都是依赖于 JavaScript 或 Flash 来完成。但在 CSS3 中新 增加了一个新的模块 transition,它可以通过一些简单的 CSS 事件来触发元素的外观变化,让效果显得更加细腻。简单点说,就是通过鼠标的单击、获得焦点,被点击或对元素任何改变中触发,并平滑地以动画效果改变 CSS 的属性值。
在 CSS 中创建简单的过渡效果可以从以下几个步骤来实现:
1、在默认样式中声明元素的初始状态样式;
2、声明过渡元素的最终状态样式,比如悬浮状态;
3、在默认样式中通过添加过渡函数来完成效果;
语法:
transition: property duration timing-function delay;
子属性的含义如下:
属性 | 值 | 含义 |
---|---|---|
transition-property | css属性名称 或者 all | 指定过渡或动态模拟的 CSS 属性 |
transition-duration | 时间长度 | 指定完成过渡所需的时间 |
transition-timing-function | 过渡函数名称 | 指定过渡函数 |
transition-delay | 时间长度 | 指定开始出现的延迟时间 |
transition-property 属性名称
transition-property 用来指定过渡动画的 CSS 属性名称,而这个过渡属性只有具备一个中点值的属性(需要产生动画的属性)才能具备过渡效果,其对应具有过渡的 CSS 属性主要有:
当“transition-property”属性设置为 all 时,表示的是所有中点值的属性。
具有过渡的 CSS 属性 | 具有过渡的 CSS 属性 |
---|---|
border-width | border-color |
bottom | left |
background-color | background-position |
font-size | font-weight |
width | height |
margin | padding |
opacity | color |
outline | text-shadow |
当鼠标滑过时,改变div的背景颜色:
div {
width: 200px;
height: 200px;
background-color:red;
margin: 20px auto;
transition:background-color .5s ease .1s;
}
div:hover {
background-color: orange;
}
transition-duration 过渡时间
用来设置一个属性过渡到另一个属性所需的时间,也就是从旧属性过渡到新属性花费的时间长度,俗称持续时间。
transition-timing-function
指的是过渡的“缓动函数”。主要用来指定浏览器的过渡速度,以及过渡期间的操作进展情况,值可以是以下几种函数:
更多的值可以参考:https://cubic-bezier.com/
transition-delay 延迟时间
transition-delay 属性和 transition-duration 属性极其类似,不同的是 transition-dur ation 是用来设置过渡动画的持续时间,而 transition-delay 主要用来指定一个动画开始执行的时间,也就是说当改变元素属性值后多长时间开始执行。
有时我们想改变两个或者多个 css 属性的 transition 效果时,只要把几个 transition 的声明串在一起,用逗号(“,”)隔开,然后各自可以有各自不同的延续时间和其时间的速率变换方式。但需要值得注意的一点:第一个时间的值为 transition-duration,第二个为 transition-delay。
案例:通过 transition 属性将一个宽度200px,高度200px 的橙色容器,在鼠标滑过时,过渡到宽度300px,高度300px 的红色。整个过渡 0.1s 后触发,并且整个过渡持续 0.3s。
div {
width: 200px;
height: 200px;
background-color: orange;
transition: all .3s ease-in .1s;
}
div:hover {
width: 300px;
height: 300px;
background-color: red;
}