动画
属性知识点:
- 变换 transform
- 过渡 transition
- 动画 animation
变换 transform
- 对元素进行平移、旋转、缩放
- transform 不会对其他元素布局产生影响
- 取值:none 、transform-list
transform 书写的顺序( 先旋转或者先平移的顺序 ),会影响到展示结果。
变换值
- translate(100px,0) 在 X 轴上平移 100px , Y 轴平移 0px
- rotate(45deg) 旋转 45 度
- scale(2,0.5) 在 X 轴方向拉伸 2 倍,在 Y 轴压缩一半
如果指定某一坐标轴变换
- translateX
- translateY
- scaleX
- scaleY
原点 transform-origin
以哪个点为原点进行变换,默认以元素的中心点为原点
3D Transform
在 2D 的基础上添加了一个 Z 轴,垂直于屏幕观众的方向。
perspective
perspective 越小,距离人眼越近,变换越夸张。不能是负值。
- 指定进行 3D 渲染时,人眼距离 Z 平面的距离
- 不会影响到元素本身的渲染
- 只影响元素 3D 效果
变换值
- translate3d
- translateZ
- rotate3d
- rotateX
- rotateY
过渡 transition
指定一个样式状态到另一个状态时如何过渡,告诉用户发生了什么。
- transition-property 什么属性发生变化时需要过渡
- transition-duration 过渡的时间持续多长时间
- transition-timing-function 速度变化时什么样
- transition-delay 是否有延迟
transition 简写
transition: transition-property transition-duration transition-timing-function transition-delay;
transition: all 2s ease-in;
transition 可以同时制定多个 transition-list
transition: width 1s ease 1s, height 1s ease;
某些属性时不能做动画的,例如 display
动画 animation
可以实现更复杂的样式变化效果,定义关键帧,指定动画行为。
animation: name duration timing-function delay iteration-count direction;
- 首先要通过 @keyframes 定义一个动画
@keyframes down{
from {
margin-top: 0;
opacity: 1;
}
50% {
margin-top: 0.5em;
opacity: 0.3;
}
to {
margin-top: 0;
opacity: 1;
}
}
- 再通过 animation 属性运用到元素上
animation: down 1.5s ease infinite;
transform DEMO
hover 配合 transform 的卡片事例。当鼠标悬浮在卡片时候,下部分的内容会从下往上滑动出现。
- HTML
<div class="container">
<div class="card">
<span>鼠标过来呀 ~</span>
<div class="hover-content">滑动从底部出现</div>
</div>
</div>
- CSS
/*定义容器*/
.container{
position: relative;
margin: 100px auto 0;
width: 200px;
}
/* 定义卡片容器*/
.card{
position: relative;
display: inline-block;
width: 200px;
height: 300px;
overflow: hidden;
box-shadow: 2px 4px 8px 0 rgba(46,61,73,.2);
border-radius: 5px;
transition: all .2s ease;
}
/* 卡片hover阴影效果 */
.card:hover{
box-shadow: 5px 5px 25px 0 rgba(46,61,73,.2);
}
/* 卡片hover的内容容器 */
.card .hover-content{
position: absolute;
bottom: 0;
left: 0;
width: 100%;
height: 50px;
background: #34b558;
line-height: 50px;
text-align: center;
font-size: 14px;
color: #fff;
transform: translateY(100%);
transition: all .2s ease;
}
/* 卡片hover的内容容器动画 */
.card:hover .hover-content{
transform: translateY(0);
}