CSS3专题-[上篇]:过渡、2D转换、动画

news/2024/4/29 23:00:32/文章来源:https://blog.csdn.net/weixin_43524214/article/details/127623993

目录

CSS3:前置特性

CSS3:盒子模型

CSS3:图片滤镜与模糊处理

blur():高斯模糊

CSS3:计算盒子宽度calc()函数

CSS3:过渡效果

transition属性

2D转换:transform属性

 translate()方法

* translate应用:结合定位实现水平+垂直居中

rotate()方法

*rotate应用案例:结合transition过渡实现盒子过渡旋转

*rotate应用案例:绘制倒三角

转换中心点:transform-origin属性

* rotate + transform-origin:旋转案例

scale()方法

 使用多个2D转换

CSS3:动画(animation)

定义动画:@keyframes 规则

*动画案例:运动的DOM元素

动画序列

 *动画序列案例:转圈的DOM元素

动画常见属性

动画速度曲线

* 速度曲线案例:进度条分步长加载


CSS3:前置特性

CSS3:盒子模型

        CSS3中可以通过borde-sizing来指定盒模型,属性值有2个:context-boxborder-box,其中:

        ①context-box:盒子大小的计算方式为-width+padding+border(传统默认方式);

        ②border-box:盒子大小的计算方式为-width。

        属性值为border-box的盒子,可以避免由于指定了padding和border属性值时,盒子会被撑大的问题。

CSS3:图片滤镜与模糊处理

        CSS3提供了filter属性,可以实现DOM元素的模糊或者颜色偏移等视觉效果。filter属性值默认为none,即:没有任何特殊效果。

        除了下面介绍的高斯模糊效果,其它方法可参考:CSS3 filter(滤镜) 属性 | 菜鸟教程。

blur():高斯模糊

        blur()可以实现高斯模糊,并且,blur()函数的参数越大、模糊度越高。

         如下示例代码,实现图片的高斯模糊处理,

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>高斯模糊</title><style>img{filter: blur(3px);}</style>
</head>
<body><img src="./images/hu.jpg" alt="">
</body>
</html>

CSS3:计算盒子宽度calc()函数

        CSS3中提供了calc()函数,可以实现width、height等宽高属性的数学计算,括号内部可以实现基本的+、-、*、\运算。

        如下所示,定义Div盒子的宽度比视口宽度永远小80px。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>calc-计算盒子宽高属性</title><style>.calc{margin: 0 auto;width: calc(100% - 80px);height: 150px;background-color: skyblue;}</style>
</head>
<body><div class="calc"></div>
</body>
</html>

CSS3:过渡效果

        CSS3的过渡效果,可以使我们在无需使用Flash和JavaScript的情况下,实现元素从一种状态转换为另一种状态时,提供一种视觉上的过渡效果。

        所谓过渡效果,也称过渡动画,是指:从一个状态,渐渐过渡到另一个状态。可以使我们的网页页面切换时,更加流畅,无缝衔接,极具体验感,同时又不会影响页面布局。

transition属性

        transition属性用于设置DOM元素的过渡效果。而要实现过渡效果必须指定两项内容:添加效果的CSS属性、效果的持续时间。该属性的4个属性值参数为,

transition:过渡属性   花费时间   运动曲线    开始时间。

        上述4个参数的取值可参考:CSS3 transition 属性 | 菜鸟教程。

       如下代码,实现了在鼠标滑过div盒子时,其width宽度属性,从100px到400px变化的过渡效果,延迟0.0s执行,持续时间为0.5s。 

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>CSS3-过渡效果</title><style>.trans{width: 100px;height: 50px;background-color: skyblue;/* 使用过渡效果 */transition: width 0.5s ease 0.0s;}.trans:hover{width: 400px;}</style>
</head>
<body><div class="trans"></div>
</body>
</html>

 

2D转换:transform属性

        transform属性是CSS3中具有颠覆性的特征之一,可以实现元素的移动、缩放、旋转、拉伸等效果。

 translate()方法

        已知的可以实现盒子移动的方法有:定位(position)外边距(margin),现在可以通过2D转换的translate()方法,根据指定的X轴和Y轴位置给定的参数,实现元素的位置移动。

        如下代码,可以使得div盒子,向X轴方向移动100px,向Y轴方向移动200px的效果,

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>2D转换</title><style>div{width: 200px;height: 200px;background-color: skyblue;}.translate{/* 向X轴方向移动100px,向Y轴方向移动200px */transform: translate(100px,200px);-ms-transform: translate(100px,200px);/*IE9*/-webkit-transform: translate(100px,200px);/*safari,chrome */}</style>
</head>
<body><!-- 移动 --><div class="translate"></div>
</body>
</html>

         translate()方法最大的优点是:不会影响其它盒子的位置,即:translate中的百分比是相对于自身元素的translate:(50%,50%),只会修改自身的位置,而不会影响其它盒子的位置。一个注意点是:translate()属性对于行内标签无效

* translate应用:结合定位实现水平+垂直居中

        translate()方法的参数可以是百分比,此时,百分比的计算是相对于盒子的宽高而言的。

        translate()方法的一个实际应用场景是:结合position定位,实现DOM元素的水平和垂直居中效果。示例代码如下,

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>2D转换</title><style>div{width: 200px;height: 200px;background-color: skyblue;}/* 盒子水平和垂直居中 */.center{position: absolute;top: 50%;left: 50%;transform: translate(-50%,-50%);}</style>
</head>
<body><!-- div盒子水平+垂直居中 --><div class="center"></div>
</body>
</html>

 

rotate()方法

        rotate()方法可以实现DOM元素在二维平面中的旋转效果,给定一个正的度数,向顺时针旋转,单位为deg。

        如下代码,实现div元素的顺时针渲染45度。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>CSS-旋转</title><style>div{margin: 100px auto;width: 200px;height: 200px;background-color: skyblue;}.rotate{/* 顺时针旋转45度 */transform: rotate(45deg);-ms-transform: rotate(45deg);/*IE9*/-webkit-transform: rotate(45deg);/*safari,chrome */}</style>
</head>
<body><div class="rotate"></div>
</body>
</html>

*rotate应用案例:结合transition过渡实现盒子过渡旋转

        效果描述:当属性悬浮在div上面时,div盒子从原始的旋转45度,逐渐过渡到旋转360度,延时0.5s执行,持续时间为1.0s。

        示例代码如下,

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>CSS-旋转</title><style>div{margin: 100px auto;width: 200px;height: 200px;background-color: skyblue;}.rotate{/* 顺时针旋转45度 */transform: rotate(45deg);-ms-transform: rotate(45deg);/*IE9*/-webkit-transform: rotate(45deg);/*safari,chrome */transition: transform 1.0s ease 0.5s;}.rotate:hover{transform: rotate(360deg);}</style>
</head>
<body><div class="rotate"></div>
</body>
</html>

*rotate应用案例:绘制倒三角

        rotate()属性,结合transition过渡属性,可以实现鼠标滑过时候的倒三角效果。

        示例代码如下,

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>旋转-倒三角效果</title><style>.trani{position: relative;width: 150px;height: 35px;border: 1px solid #ccc;}.trani::after{content: "";position: absolute;right: 7px;top: 7px;display: inline-block;width: 10px;height: 10px;border-right: 1px solid #ccc;border-bottom: 1px solid #ccc;transform: rotate(45deg);transition: transform 0.5s ease 0.1s;}.trani:hover::after{transform: rotate(225deg);}</style>
</head>
<body><div class="trani"></div>  
</body>
</html>

转换中心点:transform-origin属性

        可以通过transform-origin属性,设置元素2D转换的中心点。基本语法如下,

transform-origin:x y;

        其中:x y默认是元素的中心点(50%,50%),但是我们可以通过transform-origin属性,设置自定义的中心点。其取值可以是像素值,或者是方位名词left、top、right、bottom、center。

* rotate + transform-origin:旋转案例

        示例代码如下,

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>旋转案例</title><style>.box{width: 150px;height: 150px;border: 1px solid #fff;background-color: #ccc;/* 溢出隐藏 */overflow: hidden;}.inner{width: 100%;height: 100%;/* 文字水平垂直居中 */color: #fff;font-weight: 700;font-size: 24px;text-align: center;line-height: 150px;background-color: skyblue;/* 设置旋转中心点位左下角 */transform-origin: left bottom;transform: rotate(90deg);/* 设置过渡效果 */transition: transform 1.0s ease 0.1s;}.box:hover .inner{transform: rotate(0deg);}</style>
</head>
<body><div class="box"><div class="inner">Box</div></div>
</body>
</html>

scale()方法

        scale()方法可以实现元素的宽度width+高度height的缩放效果。相比基于transition过渡效果直接操作width、height宽高属性来说,可以实现等比缩放,并且不会影响其它盒子,并且可以设置缩放的中心点。

        基本语法规则为:

transform: scale(x,y);

        如下示例代码,可以实现相对于元素的本身1.2倍的等比缩放。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>scale缩放</title><style>.scale{margin: 200px auto;width: 200px;height: 200px;border: 1px solid #ccc;background-color: skyblue;/* 过渡效果 */transition: transform 1.5s ease 0.1s;}.scale:hover{/* 等比扩大1.2倍 */transform: scale(1.2,1.2);}</style>
</head>
<body><div class="scale"></div>
</body>
</html>

 使用多个2D转换

        同时使用多个2D转换时,基本语法格式为:

transform: translate() rotate() scale()...等;

        注意:transform属性值中的方法的顺序,会影响转换的效果。当同时有位置和其它属性的时候,记得应当将位移translate()方法放在最前面。

CSS3:动画(animation)

        动画(animation)是CSS3中最具有颠覆性的特征之一,可通过设置多个节点,来精确控制一个或者一组动画,常用来实现复杂的动画效果。

        相比transition过渡属性,动画可以实现更多变化,更多控制,连续自动播放等效果。

        例如:如下的跑马灯效果,就可以通过CSS3动画实现。

定义动画:@keyframes 规则

        想要定义一个动画,需要了解@keyframes规则。

        @keyframes规则是创建动画;而在@keyframes规则内部,可以指定一个样式和动画,实现从当前样式到目标样式的逐步过渡。

        @keyframes规则的基本格式如下,

@keyframes 动画名称{0%{width:100px;}100%{width:200px;}
}

         其中:0%对应起始时DOM元素的样式;100%对应结束时DOM元素的样式。

*动画案例:运动的DOM元素

        如下代码,实现了这样的动画效果:当页面渲染时,div盒子就从页面的左边运动到右边。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>动画定义</title><style>.animation {width: 150px;height: 150px;border: 1px solid #ccc;background-color: skyblue;/* 使用动画 */animation-name: move;/* 动画的持续时间 */animation-duration: 3s;}@keyframes move {/* 开始时的动画 */0% {transform: translateX(0px);}/* 结束时的动画 */100% {transform: translateX(1600px);}}</style>
</head><body><div class="animation"></div>
</body></html>

         

动画序列

        在CSS3中,只要@keyframes中规定了某项CSS样式,就能由当前样式逐渐改变到新样式的动画效果。

        一个完整的动画, 是由若干个动画序列组成的,其中:0%表示动画的开始,100%表示动画的结束,中间可以创建任意多个样式效果,这样的@keyframes规则,就定义了一个动画序列。     

          除了上面例子中,0%和100%的写法,也可以使用from和to的关键字,来定义起始、终止动画的样式,两者对于简单动画来讲是等价的。

 *动画序列案例:转圈的DOM元素

 

        动画效果如上,示例代码如下,

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>动画序列</title><style>.animation {width: 150px;height: 150px;border: 1px solid #ccc;background-color: skyblue;/* 使用动画 */animation-name: move;/* 动画的持续时间 */animation-duration: 5s;}@keyframes move {/* 开始时的动画 */0% {transform: translate(0px, 0px);}25% {transform: translate(1700px, 0px);}50% {transform: translate(1700px, 800px);}75% {transform: translate(0px, 800px);}/* 结束时的动画-回到原点 */100% {transform: translate(0px, 0px);}}</style>
</head><body><div class="animation"></div>
</body></html>

动画常见属性

        常见的动画属性如下,

         基于以上动画属性,例如:为上面的转圈的DOM元素添加animation-iteration-count:infinite,使其可以循环播放。也可以通过绑定按钮的点击事件,通过修改animation-play-state属性,来控制动画的运行或者停止状态

循环动画

 

动画速度曲线

        在常见的动画属性中有一个较为有意思的属性:animation-timing-function,即:动画的速度曲线。该属性的默认值是:ease,但是也存在着其它的属性值。

         例如,我们可以通过设置steps属性值,来规定整个动画分几步执行。

* 速度曲线案例:进度条分步长加载

 

        下面,我们看一个如上图所示的例子:进度条,分成100个步长来执行进度条加载;并且,当鼠标悬浮到进度条上面时,暂时停止进度条加载,示例代码如下,

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>动画-速度曲线</title><style>.box{margin: 0 auto;width: 200px;height: 25px;border: 1px solid #ccc;background-color: #ccc;border-radius: 5px;}/* 鼠标悬浮在box上面时,暂时停止动画 */.box:hover::after{animation-play-state: paused;}.box::after{content: "";display: inline-block;width: 0%;height: 100%;background-color: skyblue;border-radius: 5px;/* 设置动画名称 */animation-name: progress;/* 设置动画持续时间 */animation-duration: 10s;/* 设置步长:进度条到100%,那么可设置步长为100 */animation-timing-function: steps(100);/* 设置循环动画 */animation-iteration-count: infinite;}/* 进度条动画 */@keyframes progress{from{width: 0%;}to{width: 100%;}}</style>
</head>
<body><div class="box"></div>
</body>
</html>

matrix

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_410169.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mybatis MappedStatement

MappedStatement MappedStatement 类是 Mybatis 框架的核心类之一&#xff0c;它存储了一个 sql 对应的所有信息 Mybatis 通过解析 XML 和 mapper 接口上的注解&#xff0c;生成 sql 对应的 MappedStatement 实例&#xff0c;并放入 SqlSessionTemplate 中 configuration 类属…

凭此五点 这款信创传输系统解决了传输的迫切需求

早在20世纪80年代&#xff0c;我国政府IT底层基础软硬件的自主创新提出了相关要求&#xff0c;但受制于国外巨头垄断关键技术&#xff0c;诸多系统性风险与安全隐患无力解决。自2018年以来&#xff0c;在中兴和华为等公司供应链危机的催化下&#xff0c;信创产业进入快速发展期…

Verilog设计参数化的译码器与编码器,以及设计4位格雷码计数器

Verilog设计参数化的译码器与编码器&#xff0c;以及设计4位格雷码计数器 使用Quartusmodelsim完成设计 文章目录Verilog设计参数化的译码器与编码器&#xff0c;以及设计4位格雷码计数器1. 参数化的译码器分析代码实现Testbench结果2. 参数化的编码器分析代码Testbench结果3.…

Redis 主从架构数据同步

Redis 主从架构图 主从架构能够很大提升并发能力&#xff0c;master 节点负责写数据&#xff0c;slave 节点负责读数据&#xff0c;这样就涉及到 master 和 slave 数据同步的一个过程 一起来看一下数据是如何同步的吧 redis 的主从同步机制可以确保 master 和 slave 之间的数据…

Kubernetes 架构介绍

目录 一、Kubernetes 架构 1、Kubernetes 是什么&#xff1f; 2、Kubernetes 架构 3、Master 节点 4、Node 节点 5、推荐Add-ons 6、Kubeadm 7、查看组件运行状态 8、Kubeadm 容器化组件 二、namespace 1、命名空间 — namespace 2、常用命名空间命令 1. 查看存在哪…

【操作系统】混合索引分配和链接分配相关练习题

混合索引分配练习题&#xff1a; 比较简单&#xff0c;容易理解 练习1&#xff1a; 在UNIX操作系统中&#xff0c;给文件分配外存空间采用的是混合索引分配方式&#xff0c;如下图所示。UNIX系统中的某个文件的索引结点指示出了为该文件分配的外存的物理块的寻找方法。在该索…

C++ 并行编程

C 并行编程1. 进程和线程1.1 常规解释1.2 总结1.3 具体理解1.4 为什么使用多线程1.5 进程和线程的区别2. 并发与并行2.1 多进程并发2.2 多线程并发3. C中的多线程4. 时间管理4.1 C语言&#xff1a;time.h4.2 C11时间标准库&#xff1a;std::chrono4.2.1 获取时间段 int64_t/dou…

SQL学习十九、使用游标

游标&#xff08;cursor&#xff09;是一个存储在 DBMS 服务器上的数据库查询&#xff0c; 它不是一条 SELECT 语句&#xff0c;而是被该语句检索出来的结果集。在存储了 游标之后&#xff0c;应用程序可以根据需要滚动或浏览其中的数据。 我们通常的检索操作会返回一组称为结…

vue3+antd中使用Dayjs实现输出的日期格式化,和限制自定义日期选择器的可选范围

场景复现 在vue3antd项目中用到了日期选择器&#xff0c;但是默认的日期选择的结果是标准的日期格式&#xff0c;我们往往需要对最后的结果进行一定的格式化输出 一般输出的是这种标准的数据格式 如果我们想对时间进行指定的格式化输出&#xff0c;通常大家会想到moment&…

如何在页面中制作悬浮发布按钮弹窗

效果展示&#xff1a; 前置准备&#xff1a; 1.已搭建好&#xff0c;待添加悬浮层的页面 2.icon素材 具体步骤&#xff1a;&#xff08;3&#xff09; 1.添加悬浮层页面 2.配置悬浮层关闭触发器 3.配置首页发布icon触发器和动画 步骤分解&#xff1a; 1.添加悬浮层页面 1.1…

2022 年跨境电商要尝试的 25 个黑五营销技巧

关键词&#xff1a;黑五营销、黑色星期五活动、跨境电商黑五 我们汇总了以下最佳跨境电商黑五创意清单&#xff1a; 黑五营销技巧分享 如何宣传您的黑色星期五优惠 小型企业的黑五营销创意 黑五营销提示 随意跳到您最感兴趣的部分&#xff0c;或通读它们&#xff0c;看看…

JAVA序列化和反序列化学习笔记

0x01 开始学习JAVA反序列化&#xff0c;参考 《安全漫谈》和feng师傅的文章一步一步来&#xff0c;希望 能赶在这个学期学完java最基础的东西&#xff0c; 笔记做到这里方便自己查阅&#xff0c;也是事先实操了一下 &#xff0c;才写的笔记 概念&#xff1a; JAVA 序列化 就是…

program arguments,vm arguments,environment variable

作者:david_zhang@sh 【转载时请以超链接形式标明文章】 https://www.cnblogs.com/david-zhang-index/p/16846493.html 参数太多,傻傻分不清楚,简单说 1,program arguments是main函数args[]参数 2,vm arguments是java环境变量 3,environment variable是jvm环境变量 看代码…

华为设备配置NAT原理与示例

网络地址转换NAT 文章目录网络地址转换NAT1 NAT概述1.1 NAT产生的技术背景1.2 私有IP地址1.3 NAT技术原理2 静态NAT2.1 静态NAT原理2.2 静态NAT转换示例2.3 静态NAT配置介绍2.4 静态NAT配置示例3 动态NAT3.1 动态NAT原理3.2 动态NAT转换示例3.3 动态NAT配置介绍3.4 动态NAT配置…

resultMap结果映射

文章目录一、resulrMap结果映射二、驼峰命名自动映射查询结果的列名和Java对象的属性名对应不上怎么办&#xff1f; *第一种方式&#xff1a;as给列名起别名 *第二种方式&#xff1a;使用resultMap进行结果映射 *第三种方式&#xff1a;是否开启驼峰命名自动映射&#xff08;配…

算法学习:动态规划

14天阅读挑战赛 努力是为了不平庸~ 系列文章目录 第一章 算法简介 第二章 贪心算法 第三章 分治法 第四章 动态规划 目录系列文章目录2.0兔子序列2.1动态规划基础2.2最长的公共子序列2.2.1问题描述&#xff1a;2.2.2分析问题&设计思路&#xff1a;2.2.3图解思路&#xff1…

Python抓取我的CSDN粉丝数,白嫖GithubAction自动抓取

《Python抓取我的CSDN粉丝数&#xff0c;白嫖GithubAction自动抓取》 一.介绍 这段时间我想申请CSDN的博客专家认证&#xff0c;但是我发现我的总访问量不够&#xff08;博客专家的总访问量要大于20万&#xff09;&#xff0c;所以我就想把我的CSDN每天的 【总访问量】&#…

芯片与自动驾驶技术漫谈

芯片与自动驾驶技术漫谈 从芯片到系统国产,信创产业如何4步走上自主路? 信创产业发展是国家经济数字化转型、提升产业链发展的关键。我国明确了“数字中国”建设战略,抢占数字经济产业链制高点。推进信创产业的发展,促进信创产业在区域性落地生根,带动传统IT信息产业转型,…

【光通信】常见光模块与光纤收发器说明及作用区别

&#xff1a;单纤收发器是指采用的是单模光缆 单纤收发器是只用一根芯&#xff0c;两端都接这根芯&#xff0c;两端的收发器采用不同的光波长&#xff0c;所以能在一根芯里传输光信号。 双纤收发器就是采用了两根芯&#xff0c;一根发送一根接收&#xff0c;一端是发的另一端就…

MongoDB 分片集群均衡器导致的性能下降

近期&#xff0c;有人反馈其mongodb分片集群&#xff0c;在加载处理大批量数据时&#xff0c;程序处理十分缓慢并且应用还会报错&#xff1a;version mismatch detected for 。现将分析汇总如下备用。 一、问题现象 负责同事反馈9月1日18:52分左右&#xff0c;应用报错version…