Html和CSS学习
自己正经开始学编程的第一门语言!
18. 2D动画与3D转换
18.1 CSS3 2D转换
**转换(transform)**是CSS3中具有颠覆性的特征之一,可以实现元素的位移、旋转、缩放等效果
转换(transform)你可以简单理解为变形
- 移动:translate
- 旋转:rotate
- 缩放:scale

18.1.1 2D 转换之移动 translate
18.1.1.1 translate介绍
2D移动是2D转换里面的一种功能,可以改变元素在页面中的位置,类似定位

translate最大的优点就是不会影响其他元素的位置,可以凭借这一优点去整过渡效果transition
对于行内元素无效
总结:移动盒子的位置三种方法:定位、盒子的外边距、2d转换移动
18.1.1.2 盒子实现水平居中
div {
margin: 0 auto;
}
18.1.2 2D 转换之旋转 rotate
18.1.2.1 rotate介绍
2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转

18.1.2.2 旋转效果
div {
transform: rotate(45deg);
}
18.1.2.3 三角做法
该下标当经过最外层大盒子时会实现向上反转

/* CSS 实现三角形 */
.triangle {
width: 0;
height: 0;
border: 10px solid transparent;
border-bottom-color: #333;
}
18.1.3 2D 转换中心点 transform-origin
18.1.3.1 transform-origin介绍
设置中心点

设置像素时这个中心点也是相对于这个大盒子来说的
18.1.3.2 盒子不同中心旋转
/* 转换中心点 */
div {
transform-origin: center center; /* 默认 */
/* transform-origin: 50% 50%; */
/* transform-origin: left top; */
}
18.1.3.3 旋转案例

div {
transform: rotate(45deg);
}
18.1.4 2D 转换之缩放scale
18.1.4.1 scale介绍
缩放,顾名思义,可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小

18.1.4.2 分页按钮

div {
transform: scale(1.2);
}
```Css
/* 2D 缩放 */
div {
transform: scale(1.2);
/* transform: scale(1.2, 0.8); 宽1.2倍,高0.8倍 */
}
@keyframes slide { from { transform: translateX(0); } to { transform: translateX(100px); } } div { animation: slide 1s ease infinite; }
/* 定义动画 */
@keyframes move {
0% { transform: translateX(0); }
100% { transform: translateX(100px); }
}
/* 调用动画 */
div {
animation: move 1s ease 0s infinite alternate;
}
@keyframes slide { from { transform: translateX(0); } to { transform: translateX(100px); } } div { animation: slide 1s ease infinite; }
<img style="max-width:100%" src="/images/feishu/assets/2024-10-10-Html和CSS学习-200.png">
#### 18.2.1.5 动画简写
<img style="max-width:100%" src="/images/feishu/assets/2024-10-10-Html和CSS学习-201.png">
name,duration这两个属性必须写!
### 18.2.2 案例
#### 18.2.2.1 热点图
<img style="max-width:100%" src="/images/feishu/assets/2024-10-10-Html和CSS学习-202.png">
```Css
@keyframes slide {
from { transform: translateX(0); }
to { transform: translateX(100px); }
}
div {
animation: slide 1s ease infinite;
}
18.2.2.2 奔跑的熊大
这个需要用到动画效果,同时要使用steps,一步一步的展示,不可以用ease等值,这个图片一般很大,上边集成了运动的多个状态

/* 定义动画 */
@keyframes move {
0% { transform: translateX(0); }
100% { transform: translateX(100px); }
}
/* 调用动画 */
div {
animation: move 1s ease 0s infinite alternate;
}
背景如果跟父盒子一样的话,往左走100%会使得背景露出来,此时不要忘记背景平铺:repeat-x,repeat-y
18.2.3 知识点回顾
div {
background-repeat: no-repeat;
}
18.3 3D 转换
我们生活的环境是3D的,照片就是3D物体在2D平面呈现的例子
18.3.1 坐标轴认识

18.3.2 3D移动 translate3d

x,y,z如果没有移动量的话,不要不写,不可省略
translate3d的效果需要搭配透视perspective来使用

18.3.3 透视 perspective

透视写在父盒子上,单位为像素
18.3.4 3D旋转 rotate3d
18.3.4.1 分开解释



总结来说就是左手原则
18.3.4.2 rotate3d介绍

18.3.5 3D呈现 transfrom-style


div {
perspective: 500px;
transform: rotateX(45deg);
}
18.3.6 案例
18.3.6.1 两面反转的盒子



/* 3D 透视(加在父元素上) */
.father {
perspective: 500px;
}
18.3.6.2 3D导航栏

<!-- HTML 代码示例 -->
<div class="example">
示例内容
</div>
18.3.6.3 旋转木马

div {
transform: rotate(45deg);
}