HTML/CSS 备忘录 - 13. CSS3 变换/过渡/动画
itomcoil 2025-01-05 18:06 35 浏览
一、2D 变换
1. 2D 位移
/* x 轴方向位移 30px */
transform: translateX(30px);
/* 分别设置 x 轴与 y 轴的位移 */
transform: translateX(30px) translateY(40px);
/* 同时设置 x 与 y 的方向位移 */
transform: translate(-50%, -50%);
- 位移与相对定位很相似,都不脱离文档流,不会影响到其它元素。
- 与相对定位的区别:相对定位的百分比值,参考的是其父元素;位移的百分比值,参考的是其自身。
- 浏览器针对位移有优化,与定位相比,浏览器处理位移的效率更高。
- 位移对行内元素无效。
位移配合定位,可实现元素水平垂直居中:
.box {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
2. 2D 旋转
设置旋转角度,需指定一个角度值(deg),正值顺时针,负值逆时针。
/* 顺时针旋转 30 度 */
transform: rotate(30deg);
/* 逆时针旋转 30 度 */
transform: rotate(-30deg);
3. 2D 缩放
设置水平或垂直方向的缩放比例,值为一个数字, 1 表示不缩放,大于 1 放大,小于 1 缩小。
/* 水平方向放到两倍 */
transform: scaleX(2);
/* 垂直方向缩小到 0.5 倍 */
transform: scaleY(0.5);
/* 同时设置水平方向、垂直方向的缩放比例 */
/* 一个值代表同时设置水平和垂直缩放 */
transform: scale(0.5);
/* 两个值分别代表:水平缩放、垂直缩放 */
transform: scale(2, 3);
借助缩放,可实现小于 12px 的文字。
4. 2D 扭曲
/* 设置元素在水平方向扭曲,值为角度值,
会将元素的左上角、右下角拉扯 */
transform: skewX(30deg);
/* 设置元素在垂直方向扭曲 */
transform: skewY(20deg);
/* 同时设置水平与垂直方向扭曲 */
transform: skew(30deg, 20deg);
5. 修改变换原点
- 元素变换时,默认的原点是元素的中心,使用 transform-origin 可以设置变换的原点。
- 修改变换原点对位移没有影响, 对旋转和缩放会产生影响。
- 如果提供两个值,第一个用于横坐标,第二个用于纵坐标。
- 如果只提供一个,若是像素值,表示横坐标,纵坐标取 50%;若是关键词,则另一个坐标取 50%。
/* 变换原点在元素的中心位置,百分比是相对于自身。默认值 */
transform-origin: 50% 50%;
/* 变换原点在元素的左上角 */
transform-origin: left top;
/* 变换原点距离元素左上角 50px 50px 的位置 */
transform-origin: 50px 50px;
/* 只写一个值的时候,第二个值默认为 50% */
transform-origin: 0;
6. 多重变换
多个变换,可以同时使用一个 transform 来编写。
transform: translate(-50%, -50%) rotate(45deg);
二、3D 变换
重要原则:元素进行 3D 变换的首要操作是,父元素必须开启 3D 空间!
/* 让子元素位于此元素的二维平面内(2D 空间),默认值 */
transform-style: flat;
/* 让子元素位于此元素的三维空间内(3D 空间) */
transform-style: preserve-3d;
1. 设置景深
指定观察者与 z=0 平面的距离,能让发生 3D 变换的元素,产生透视效果,看来更加立体。
/* 不指定透视,默认值 */
perspective: none;
/* 指定观察者距离 z=0 平面的距离,不允许负值 */
perspective: 100px;
perspective 设置给发生 3D 变换元素的父元素。
2. 透视点位置
所谓透视点位置,就是观察者位置;默认的透视点在元素的中心。
/* 相对坐标轴往右偏移 400px, 往下偏移 300px */
perspective-origin: 400px 300px;
perspective-origin: center;
perspective-origin: bottom right;
perspective-origin: 500% 200%;
设置给发生 3D 变换元素的父元素。
3. 3D 位移
3D 位移是在 2D 位移的基础上,可以让元素沿 z 轴位移。
/* 设置 z 轴位移,需指定长度值,
正值向屏幕外,负值向屏幕里,且不能写百分比 */
transform: translateZ(50px);
/* 第 1 个参数对应 x 轴,第 2 个参数对应 y 轴,
第 3 个参数对应 z 轴,且均不能省略。*/
transform: translate3d(100px, 200px, 300px);
4. 3D 旋转
3D 旋转是在 2D 旋转的基础上,可以让元素沿 x 轴和 y 轴旋转。
/* 设置 x 轴旋转角度,需指定一个角度值(deg) */
transform: rotateX(20deg);
/* 设置 y 轴旋转角度,需指定一个角度值(deg) */
transform: rotateY(20deg);
/* 前 3 个参数分别为 x,y,z 方向的矢量(0~1),
原点到该点的连线即为旋转轴,
第 4 个参数表示旋转的角度 */
transform: rotate3d(1, 1, 1, 30deg)
5. 3D 缩放
3D 缩放是在 2D 缩放的基础上,可以让元素沿 z 轴缩放。
/* 设置 z 轴方向的缩放比例 */
transform: scaleZ(4);
/* 分别设置 x,y,z 轴的缩放比例,参数不允许省略 */
transform: scale3d(2, 3, 4);
6. 修改变换原点
/* 变换原点在元素的中心位置,百分比是相对于自身。默认值 */
transform-origin: 50% 50% 0;
transform-origin: 50% 50% 30px;
7. 设置元素背面可见性
backface-visibility 需要加在发生 3D 变换元素的自身上。
/* 指定元素背面可见,允许显示正面的镜像。默认值 */
backface-visibility: visible;
/* 指定元素背面不可见 */
backface-visibility: hidden;
8. 3D 变换示例
<div class="cube">
<div class="face front">1</div>
<div class="face back">2</div>
<div class="face right">3</div>
<div class="face left">4</div>
<div class="face top">5</div>
<div class="face bottom">6</div>
</div>
.cube {
width: 100px;
height: 100px;
transform-style: preserve-3d;
perspective: 300px;
perspective-origin: 150% 150%;
}
.face {
position: absolute;
width: 100px;
height: 100px;
line-height: 100px;
font-family: sans-serif;
font-size: 60px;
color: white;
text-align: center;
backface-visibility: visible;
}
.front {
background: rgba(0, 0, 0, 0.3);
transform: translateZ(50px);
}
.back {
background: rgba(0, 255, 0, 1);
color: black;
transform: rotateY(180deg) translateZ(50px);
}
.right {
background: rgba(196, 0, 0, 0.7);
transform: rotateY(90deg) translateZ(50px);
}
.left {
background: rgba(0, 0, 196, 0.7);
transform: rotateY(-90deg) translateZ(50px);
}
.top {
background: rgba(196, 196, 0, 0.7);
transform: rotateX(90deg) translateZ(50px);
}
.bottom {
background: rgba(196, 0, 196, 0.7);
transform: rotateX(-90deg) translateZ(50px);
}
三、过渡
- transition-property:定义哪个属性需要过渡,只有在该属性中定义的属性(比如宽、高、颜色等)才会以有过渡效果。
- transition-duration:设置过渡的持续时间。
- transition-delay:指定开始过渡的延迟时间。
- transition-timing-function:设置过渡的类型。
- transition:过渡复合属性。
/* 不过渡任何属性 */
transition-property: none;
/* 过渡所有能过渡的属性 */
transition-property: all;
/* 过渡具体的属性 */
transition-property: width, heigth;
/* 没有任何过渡时间,默认值 */
transition-duration: 0;
/* 过渡时间为 1s */
transition-duration: 1s;
/* 过渡时间为 500ms */
transition-duration: 500ms;
/* 不同的属性设置不同的过渡时间 */
transition-property: width, height, opacity;
transition-duration: 0.5s, 1s, 0.3s;
/* 设置开始过渡的延迟时间 */
transition-delay: 1s;
/* 平滑过渡,默认值 */
transition-timing-function: ease;
/* 匀速过渡 */
transition-timing-function: linear;
/* 加速过渡 */
transition-timing-function: ease-in;
/* 减速过渡 */
transition-timing-function: ease-out;
/* 先加速再减速过渡 */
transition-timing-function: ease-in-out;
/* 自定义的贝塞尔曲线函数 */
transition-timing-function: cubic-bezier(0.42, 0, 0.58, 1);
/* 通过复合属性设置过渡,第一是 duration,第二个是
delay,其他值没有顺序要求。*/
transition:1s 1s linear all;
/* 分别设置不同属性的过渡 */
transition: width 2s, height 2s, transform 2s;
在线制作贝赛尔曲线:https://cubic-bezier.com/
四、动画
1. 定义动画及关键帧
/* 简单方式定义动画及关键帧 */
@keyframes myfirst
{
from {background: red;}
to {background: yellow;}
}
/* 完整方式定义动画及关键帧 */
@keyframes myfirst
{
0% {background: red;}
25% {background: yellow;}
50% {background: blue;}
100% {background: green;}
}
2. 元素应用动画
- animation-name:给元素指定具体的动画
- animation-duration:设置动画所需时间
- animation-delay:设置动画延迟
- animation-timing-function:设置动画的类型,同过渡
- animation-iteration-count:指定动画的播放次数
- animation-direction:指定动画方向
- animation-fill-mode:设置动画之外的状态
- animation-play-state:设置动画的播放状态
- animation:动画复合属性
/* 指定动画 */
animation-name: testKey;
/* 设置动画所需时间 */
animation-duration: 5s;
/* 设置动画延迟 */
animation-delay: 0.5s;
/* 播放指定次数 */
animation-iteration-count: 3;
/* 无限循环播放 */
animation-iteration-count: infinite;
/* 设置动画方向,正常方向 (默认) */
animation-direction: normal;
/* 设置动画方向,反方向运行 */
animation-direction: reverse;
/* 设置动画方向,动画先正常运行再反方向运行,并持续交替运行 */
animation-direction: alternate;
/* 设置动画方向,动画先反运行再正方向运行,并持续交替运行 */
animation-direction: alternate-reverse;
/* 设置对象状态为动画结束时的状态 */
animation-fill-mode: forwards;
/* 设置对象状态为动画开始时的状态 */
animation-fill-mode: backwards;
/* 设置动画的播放状态, 运动 (默认) */
animation-play-state: running;
/* 设置动画的播放状态, 暂停 */
animation-play-state: paused;
/* 动画复合属性 */
animation: testKey 3s 0.5s linear 2 alternate-reverse forwards;
相关推荐
- MySQL修改密码_mysql怎么改密码忘了怎么办
-
拥有原来的用户名账户的密码mysqladmin-uroot-ppassword"test123"Enterpassword:【输入原来的密码】忘记原来root密码第一...
- 数据库密码配置项都不加密?心也太大了吧!
-
先看一份典型的配置文件...省略...##配置MySQL数据库连接spring.datasource.driver-class-name=com.mysql.jdbc.Driverspr...
- Linux基础知识_linux基础入门知识
-
系统目录结构/bin:命令和应用程序。/boot:这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。/dev:dev是Device(设备)的缩写,该目录...
- MySQL密码重置_mysql密码重置教程
-
之前由于修改MySQL加密模式为mysql_native_password时操作失误,导致无法登陆MySQL数据库,后来摸索了一下,对MySQL数据库密码进行重置后顺利解决,步骤如下:1.先停止MyS...
- Mysql8忘记密码/重置密码_mysql密码忘了怎么办?
-
Mysql8忘记密码/重置密码UBUNTU下Mysql8忘记密码/重置密码步骤如下:先说下大概步骤:修改配置文件,使得用空密码可以进入mysql。然后置当前root用户为空密码。再次修改配置文件,不能...
- MySQL忘记密码怎么办?Windows环境下MySQL密码重置图文教程
-
有不少小白在使用Windows进行搭建主机的时候,安装了一些环境后,其中有MySQL设置后,然后不少马大哈忘记了MySQL的密码,导致在一些程序安装及配置的时候无法进行。这个时候怎么办呢?重置密码呗?...
- 10种常见的MySQL错误,你可中招?_mysql常见错误提示及解决方法
-
【51CTO.com快译】如果未能对MySQL8进行恰当的配置,您非但可能遇到无法顺利访问、或调用MySQL的窘境,而且还可能给真实的应用生产环境带来巨大的影响。本文列举了十种MySQL...
- Mysql解压版安装过程_mysql解压版安装步骤
-
Mysql是目前软件开发中使用最多的关系型数据库,具体安装步骤如下:第一步:Mysql官网下载最新版(mysql解压版(mysql-5.7.17-winx64)),Mysql官方下载地址为:https...
- MySQL Root密码重置指南:Windows新手友好教程
-
如果你忘记了MySQLroot密码,请按照以下简单步骤进行重置。你需要准备的工具:已安装的MySQL以管理员身份访问命令提示符一点复制粘贴的能力分步操作指南1.创建密码重置文件以管理员...
- 安卓手机基于python3搜索引擎_python调用安卓so库
-
环境:安卓手机手机品牌:vivox9s4G运行内存手机软件:utermux环境安装:1.java环境的安装2.redis环境的安装aptinstallredis3.elasticsearch环...
- Python 包管理 3 - poetry_python community包
-
Poetry是一款现代化的Python依赖管理和打包工具。它通过一个pyproject.toml文件来统一管理你的项目依赖、配置和元数据,并用一个poetry.lock文件来锁定所有依赖的精...
- Python web在线服务生产环境真实部署方案,可直接用
-
各位志同道合的朋友大家好,我是一个一直在一线互联网踩坑十余年的编码爱好者,现在将我们的各种经验以及架构实战分享出来,如果大家喜欢,就关注我,一起将技术学深学透,我会每一篇分享结束都会预告下一专题最近经...
- 官方玩梗:Python 3.14(πthon)稳定版发布,正式支持自由线程
-
IT之家10月7日消息,当地时间10月7日,Python软件基金会宣布Python3.14.0正式发布,也就是用户期待已久的圆周率(约3.14)版本,再加上谐音梗可戏称为π...
- 第一篇:如何使用 uv 创建 Python 虚拟环境
-
想象一下,你有一个使用Python3.10的后端应用程序,系统全局安装了a2.1、b2.2和c2.3这些包。一切运行正常,直到你开始一个新项目,它也使用Python3.10,但需要...
- 我用 Python 写了个自动整理下载目录的工具
-
经常用电脑的一定会遇到这种情况:每天我们都在从浏览器、微信、钉钉里下各种文件,什么截图、合同、安装包、临时文档,全都堆在下载文件夹里。起初还想着“过两天再整理”,结果一放就是好几年。结果某天想找一个发...
- 一周热门
- 最近发表
- 标签列表
-
- ps图案在哪里 (33)
- super().__init__ (33)
- python 获取日期 (34)
- 0xa (36)
- super().__init__()详解 (33)
- python安装包在哪里找 (33)
- linux查看python版本信息 (35)
- python怎么改成中文 (35)
- php文件怎么在浏览器运行 (33)
- eval在python中的意思 (33)
- python安装opencv库 (35)
- python div (34)
- sticky css (33)
- python中random.randint()函数 (34)
- python去掉字符串中的指定字符 (33)
- python入门经典100题 (34)
- anaconda安装路径 (34)
- yield和return的区别 (33)
- 1到10的阶乘之和是多少 (35)
- python安装sklearn库 (33)
- dom和bom区别 (33)
- js 替换指定位置的字符 (33)
- python判断元素是否存在 (33)
- sorted key (33)
- shutil.copy() (33)