CSS3中transition与transform的用法

996 阅读4分钟

过渡transition

过渡的概念

过渡可以为一个元素在“不同状态之间”切换的时候定义不同的过渡效果。 通过伪类去改变元素的效果

过渡属性transition

它是由过渡名称transition-property; 过渡时间transition-duration; 过渡的延迟时间transition-delay 过渡的方式transition-timing-function组成的。

拆分属性和默认值

* 过渡名称transition-property 要变化的属性名,默认是all所有的变化属性

* 过渡时间transition-duration,默认0s,时间单位使用s秒

* 过渡的延迟时间transition-delay,默认0s,时间单位使用s秒

* 过渡的方式transition-timing-function默认是ease,常用是linear匀速,其他方式可以通过贝塞尔曲线调整不同的形态

过渡的简写

transition过渡的简写值只有过渡时间和延迟时间同时出现是,它们必须是过渡时间在前,延迟时间在后,其他属性值都无顺序。

/* 可省              可省*/
transition: all 1s 2s ease;
/*最简,只有过渡时间*/
transition: 1s; 

多组过渡的书写方式

需要注意的是使用多组过渡,延迟时间,一定是之前所有过渡的执行时间的累加

/*小案例,胶囊变色
/* 过渡  用1s过渡背景色   ,用1s 等一秒后过渡圆角 */
transition: 1s background-color,1s 1s border-radius;\

可过渡的样式属性

MDN手册里面常用的动画属性 developer.mozilla.org/zh-CN/docs/…

注意浏览器兼容性

常用的可过渡属性 * 尺寸类(宽度、高度)
* font文字渲染
* 内外间距
* 文本(颜色,修饰线)
* 边框
* 背景类
* 定位
* 透明度
* 阴影
* 变换类

变换transform

变换的概念

transform变换属性,为了变换属性以多种维度的改变元素样式,它为我们提供了,四个变换函数。通过函数的参数改变变换的值。

变换可以是一个或同时多个,变换的执行顺序,是从左向右逐一执行。

特性:

* 当元素使用了transform变换属性发生变换时。元素的基点(参照变换的点)是默认元素的中心点

* 不脱离文档流,只要是移动到了或者遮盖到了其他元素的位置,不会影响其他元素位置,从而导致布局错乱。出现遮盖,出现堆叠。

* 内联元素使用变换属性无效,除了img

* 在变换属性中使用百分比的值,针对的是自身的宽度和高度

位移函数


transform: translateX(20px);x轴方向的平移,正值向右平移,负值向左平移
transform: translateY(-30px);y轴方向的平移,正值向下平移,负值向上平移
transform: translate(100px,50px);双方向均可以平移,第一个值x轴,第二个值y轴
transform: translate(150px);如果只写一个值,默认是x轴平移

未知宽高元素在父级内水平垂直居中

            .box1 {
                width: 600px;
                height: 500px;
                background-color: yellow;
                /*父级用相对定位 */
                position: relative;
            }
            .box1 .box2{
                width: 200px;
                height: 230px;
                background-color: red;
                /*子级用绝对定位*/
                position: absolute;
                top: 50%;
                left: 50%;
                /*元素自身的中心点 位移*/
                transform: translate(-50%,-50%);
            }

旋转函数

rotate()可以让元素产生一个角度的旋转,当元素旋转的时候,旋转的基点是元素的中心点。使用角度单位deg。

transform: rotate(-30deg);函数中在二维空间中默认指z轴,正值顺时针旋转,负值逆时针旋转
transform: rotateX(-30deg);x轴(水平)旋转,正值向前扑,负值向右躺
transform: rotateY(30deg);y轴(垂直)旋转

缩放函数

scale()让元素进行放大和缩小,使用比例,无需单位。

* 元素放大,参数比1大的数字
transform: scaleX(2);x轴放大
transform: scaleY(2);y轴放大
transform: scale(1.2);x轴y轴都同时放大

* 元素缩小,参数比1小比0大的数字
transform: scaleX(0.5);x轴缩小
transform: scaleY(0.5);y轴缩小
transform: scale(0.5);x轴和y轴同时缩小

* 元素缩小到消失,使用0值transform: scale(0);

* 翻转效果,使用负号可使元素发生镜面翻转
transform: scaleX(-1);x轴镜面翻转
transform: scaleY(-1);y轴镜面翻转
transform: scale(-1);双方向镜面翻转\

扭曲

skew()扭曲使用的是角度值,可以为正值或者负值

transform: skewX(-40deg);x轴的扭曲
transform: skewY(-30deg);y轴的扭曲
transform: skew(50deg,30deg);x轴和y轴一起扭曲
transform: skew(50deg);如果只写一个值,默认为x轴扭曲\

多个函数一起使用

想用多个,需要将多个函数用空格链接的方法放在transform值的位置。

有先后顺序,从左向右执行

/* e.g. */
transform:rotate(10deg) scale(2) skew(50deg);

变换的基点位置

transform-origin,默认是center

可以使用关键词和百分比切换基点的位置。

案例:钟表指针,指针通过基点改变指针方向,当鼠标移入表盘,指针旋转一圈

            .biaopan {
                width: 200px;
                height: 200px;
                border: 5px solid black;
                margin: 0 auto;
                border-radius: 50%;
            }
            .zhizhen {
                width: 3px;
                height: 100px;
                background-color: red;
                margin: 0 auto;
                transition: 1s;
                /* 切换指针的基点 */
                transform-origin: bottom;
            }
            .biaopan:hover .zhizhen {
                transform: rotate(360deg);
            }