1.transform:translate;不改变其他盒子的位置
1.1.对行内标签没有效果
1.2. 参数%移动,是自身宽度或者高度的%来对比
可以配合定位来实现盒子在盒子里面水平垂直居中
1.3对行内元素无效
1.transform:translate(100px,100px)
2.transform:translateX(100px)
3.transform:translateY(200px)
一、rotate
1.transform:rotate(30deg)
可以让三角小图标鼠标经过旋转180°
二、设置元素旋转中心点(transform-origin)
1.transform-origin: x y;
2. 重要知识点
- 注意后面的参数 x 和 y 用空格隔开
- x y 默认旋转的中心点是元素的中心 (50% 50%),等价于
centercenter - 还可以给 x y 设置像素或者方位名词(
top、bottom、left、right、center)
三、2D 转换之 scale
-
语法
transform: scale(x, y) -
知识要点
- 注意,x 与 y 之间使用逗号进行分隔
transform: scale(1, 1): 宽高都放大一倍,相当于没有放大transform: scale(2): 如果只写了一个参数,第二个参数就和第一个参数一致transform:scale(0.5, 0.5): 缩小scale最大的优势:可以设置转换中心点缩放,默认以中心点缩放,而且不影响其他盒子
四、 2D 转换综合写法以及顺序问题
简写中间给空格.
div:hover {
transform: translate(200px, 0) rotate(360deg) scale(1.2)
}
五、 动画(animation)
-
语法格式(定义动画)
@keyframes 动画名称 { 0% { width: 100px; } 100% { width: 200px } } -
语法格式(使用动画)
div {
/* 调用动画 */
animation-name: 动画名称;
/* 持续时间 */
animation-duration: 持续时间;
}
-
动画序列
- 0% 是动画的开始,100 % 是动画的完成,这样的规则就是动画序列
- 在 @keyframs 中规定某项 CSS 样式,就由创建当前样式逐渐改为新样式的动画效果
- 动画是使元素从一个样式逐渐变化为另一个样式的效果,可以改变任意多的样式任意多的次数
- 用百分比来规定变化发生的时间,或用
from和to,等同于 0% 和 100%
六、动画常见属性
-
代码演示
div { width: 100px; height: 100px; background-color: aquamarine; /* 动画名称 */ animation-name: move; /* 动画花费时长 */ animation-duration: 2s; /* 动画速度曲线 */ animation-timing-function: ease-in-out; /* 动画等待多长时间执行 */ animation-delay: 2s; /* 规定动画播放次数 infinite: 无限循环 */ animation-iteration-count: infinite; /* 是否逆行播放 */ animation-direction: alternate; /* 动画结束之后的状态 */ animation-fill-mode: forwards; } div:hover { /* 规定动画是否暂停或者播放 */ animation-play-state: paused; }
七、 动画简写方式
- 动画简写方式
/* animation: 动画名称 持续时间 运动曲线 何时开始 播放次数 是否反方向 起始与结束状态 */
animation: name duration timing-function delay iteration-count direction fill-mode
- 知识要点
- 简写属性里面不包含
animation-paly-state - 暂停动画
animation-paly-state: paused; 经常和鼠标经过等其他配合使用 - 要想动画走回来,而不是直接调回来:
animation-direction: alternate - 盒子动画结束后,停在结束位置:
animation-fill-mode: forwards
-
代码演示
animation: move 2s linear 1s infinite alternate forwards;
八.通过steps实现打字机效果
一般会忽略最后一帧
<style>
div {
overflow: hidden;
width: 0;
height: 30px;
background-color: pink;
white-space: nowrap;
animation: move 7s steps(7);
}
@keyframes move {
0% {
width: 0;
}
100% {
width: 150px;
}
}
</style>
</head>
<body>
<div>某某某是个憨批</div>
</body>
</html>
九、奔跑的熊大
一般会忽略最后一帧
总结:
1.这个效果是通过背景图片来完成
2.计算单个的熊图片高宽,设定盒子大小
3.定义动画,并且调用动画通过stpes几步来实现动画效果
4.再通过背景定位来改变他的位置,是负值.
5.定义另一个动画,通过绝对定位来改变的小熊从屏幕跑出来的位置.
6.再上一个动画调用后面加逗号隔开添加新的动画.
- 代码演示
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
body {
background-color: #ccc;
}
div {
position: absolute;
width: 200px;
height: 100px;
background: url(media/bear.png) no-repeat;
/* 我们元素可以添加多个动画, 用逗号分隔 */
animation: bear .4s steps(8) infinite, move 3s forwards;
}
@keyframes bear {
0% {
background-position: 0 0;
}
100% {
background-position: -1600px 0;
}
}
@keyframes move {
0% {
left: 0;
}
100% {
left: 50%;
/* margin-left: -100px; */
transform: translateX(-50%);
}
}
</style>
</head>
<body>
<div></div>
</body>
</html>
十、F4
这个案例的难点在于:如何让外面的大盒子走完整个屏幕完了 才从头开始,确定动画结束
需要用到函数cale(100% + 1000px)永远比盒子大这么多
大盒子的定位 一定要给fixed不然会惩处滚动条
@keyframes big {
0% {
/* 动画开始也是从-1000px开始 */
left: -1000px;
}
100% {
/* 用函数 让盒子走整个盒子的大小还要加上10000px 这样才能让外面的大盒子走完屏幕 */
left: calc(100% + 1000px);
transform: translate(-50%);
}
}
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="./css/base.css" />
<title>Document</title>
<style>
.box {
position: fixed;
/* 给一个具体赋值让他从屏幕外面开始 */
left: -1000px;
bottom: 0;
width: 100%;
height: 176px;
animation: big 12s infinite linear;
}
.box div[class^="box"] {
float: left;
margin: 0 50px;
animation: run 0.5s steps(2) infinite;
}
.box1 {
width: 154px;
height: 121px;
background: url(./images/txgc_6d0e9e5.png) no-repeat;
}
.box2 {
width: 160px;
height: 176px;
background: url(./images/txgh_fee2457.png) no-repeat;
}
.box3 {
width: 161px;
height: 149px;
background: url(./images/txgl_c15cfd8.png) no-repeat;
}
.box4 {
width: 165px;
height: 157px;
background: url(./images/txgq_d281c9b.png) no-repeat;
}
@keyframes big {
0% {
/* 动画开始也是从-1000px开始 */
left: -1000px;
}
100% {
/* 用函数 让盒子走整个盒子的大小还要加上10000px 这样才能让外面的大盒子走完屏幕 */
left: calc(100% + 1000px);
transform: translate(-50%);
}
}
@keyframes run {
0% {
background-position: 0 0;
}
100% {
background-position: -308px 0;
}
}
</style>
</head>
<body>
<div class="box">
<div class="box1"></div>
<div class="box2"></div>
<div class="box3"></div>
<div class="box4"></div>
</div>
</body>
</html>
十一、关于鼠标经过速度慢,鼠标离开快的
当鼠标经过的时候,transition的时间长一点
离开的时候,时间短一点就可以了