css3中有很多十分好用的个性,明天来总结一下与动画相干,包含过渡、2D变换。
首先来介绍一下过渡,过渡是在进行变动的时候进行的一个缓冲,如果没有过渡,当变更了元素的地位、大小的数据时,会一瞬间实现变动,减少了过渡之后,变动的过程会展示进去。比方以下gif,咱们想要在鼠标移入盒子的时候,将盒子的宽和高增大一倍,并且更改色彩,没有过渡和过渡显著在用户体验上就不一样。
过渡的写法也简略,只须要在变动的根底上减少一个 transition 就行
transition: 过渡属性 过渡工夫 过渡曲线 延迟时间(1) 过渡属性,能够设置 宽度、高度、transform等,当有多个过渡成果时,能够用逗号隔开,或者用all来代表所有成果 (必写)(2) 过渡工夫,单位是s,示意花多久的工夫达到变动后的成果 (必写)(3) 过渡曲线,默认 ease,即逐步慢,还有以下选项能够抉择 linear 匀速 ease-in 减速 ease-out 加速 ease-in-out 先减速后加速(4) 延迟时间,示意推延多久执行过渡成果,默认0s,即不提早,能够自定义
过渡曲线不是很好了解,这里演示一下 ease、ease-in、ease-out、ease-in-out的区别
理解完过渡的语法之后,如上图的过渡成果,就能够这样来定义,创立一个空的div标签,而后为它定义宽高背景色
.box { width: 100px; height: 100px; background-color: pink; // 此处用来定义过渡, 默认的内容能够省略, 理论为 transition: all 1s ease 0s transition: all 1s;}.box:hover { width: 200px; height: 200px; background-color: skyblue}
除了扭转宽高,如果咱们须要挪动元素的地位,这时候该怎么做呢?有两种形式帮咱们实现这一成果,以下示例1s后向别离在x和y轴挪动100px
形式一, 间接批改top/left的值
// css代码.box { position: relative; top: 0; left: 0; background-color: pink; height: 100px; width: 100px; transition: all 1s; // 减少过渡, 使变动不那么突兀}// html代码<div class="box"></div>// js代码const box = document.getElementsByClassName('box')[0]setTimeout(()=>{ box.style.left = "100px" box.style.top = "100px"},1000)
形式二,通过css3提供的2D变换属性,transform,挪动元素通过 translate来实现
// translate语法transform: translate(x, y)// 括号里的两个属性别离为x轴方向和y轴方向// 只须要在x轴挪动transform: translateX(x轴挪动的间隔)// 只须要在y轴挪动 transform: translateY(y轴挪动的间隔)// 挪动本身宽高的一半, 能够用来实现垂直程度居中transform: translate(50%, 50%)
须要留神的是,x轴往右是正方向,y轴向下是正方向
上述需要的实现办法
// css代码.box { transform: translate(0,0); background-color: pink; height: 100px; width: 100px; transition: all 1s; // 减少过渡, 使变动不那么突兀}// html代码<div class="box"></div>// js代码const box = document.getElementsByClassName('box')[0]setTimeout(()=>{ box.style.transform = "translate(100px, 100px)"},1000)
那既然原来就有能够进行挪动的办法,为什么css3还新增一种挪动形式,他们两个有什么不同呢?要理解他们之间的不同,就要先理解 重绘与重排的概念
依照以前通过相对定位/绝对定位的形式挪动元素会造成浏览器的重绘和重排,而css3新增的transform只会重绘而不会重排,咱们能够通过谷歌浏览器中的 preformance 来察看到这一差异。
浏览器进行布局和绘制都是须要肯定的工夫,大量的重绘重排会影响程序的性能,所以如果在没有兼容性要求的状况下,咱们都能够通过translate来扭转元素的地位。
那么translate能够利用到什么样的场景下呢,能够试想一下,在一些PC端电商我的项目中,鼠标移入某个商品,该商品就可能呈现向上/下挪动的动画,示意你的鼠标正移入到此处,如果鼠标移开,那么商品就复原原来的地位。图示成果如下。
实现的代码联合transform进行挪动和transition实现过渡成果即可。
img { margin: 100px; width: 200px; transition: transform .6s}img:hover { transform: translate(0, 50px);}
transform还有两个好用的属性,别离是scale缩放和rotate旋转,先来说说scale缩放,如果没有缩放,咱们想让一个元素变大2倍,能够间接更改元素的宽高,那缩放和间接批改宽高相比,除了和以上的translate一样不会造成重排,还有一点就是不须要设置为相对定位,它也不会挤压其它元素,而且它会沿着本人的正核心进行缩放,这个缩放的核心地位也能够自行通过 transform-origin 来设置,区别见下图。
scale缩放的语法
transform: scale(x, y)// x和y别离示意横轴和纵轴的缩放比例, 用数字示意, 比方0.8 1.2transform: scale(rate)// 只写一个, 示意纵轴与横轴的缩放比雷同
scale能够用于哪些方面呢?比方咱们须要对数据进行分页时,当鼠标移入哪个按钮,就进行放大展现,图示如下。
实现代码如下
// cssul { display: flex;}li { list-style-type: none; width: 30px; height: 30px; line-height: 30px; border: 1px solid #000; border-radius: 50%; text-align: center; margin: 10px; cursor: pointer; transition: transform .1s;}li:hover { transform: scale(1.3)}// html<ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> <li>6</li> <li>7</li></ul>
最初一个transform的属性是旋转,这也是一个十分好用的属性,语法如下
transform: rotate(deg)// deg示意旋转度数
应用rotate能够模仿各个方向的箭头,当开展或者收起时,箭头的方向进行变动
实现代码如下
div { position: relative; border: 1px solid #000; width: 260px; height: 30px; margin: 100px auto;}div::after{ position: absolute; top: 6px; right: 10px; display: block; content: ""; width: 10px; height: 10px; border-right: 1px solid #000; border-bottom: 1px solid #000; transform: rotate(45deg); transition: all 1s;}div:hover::after{ transform: rotate(225deg) translate(-6px, -4px); // transform属性能够累加应用}
以上是过渡和2D变动的联合应用,下一篇文章总结动画和3D变动的应用