当前位置: 首页 > news >正文

CSS3实现提示工具的渐入渐出效果及CSS3动画简介

上一篇文章用CSS3实现了一个提示工具,本文介绍如何利用CSS3实现提示工具以渐入的方式呈现,以渐出的方式消失。

CSS3主要可以通过两个样式来实现动画效果:animation和transition。

其中,animation需要自己定义一组关键帧从而实现动画,例如:

@keyframes fadein {from { opacity: 0;}to { opacity: 1;visibility: visible;}
}
@keyframes fadeout {from { opacity: 1;visibility: visible;}to {opacity: 0;visibility: hidden;}
}
.tooltip .tooltiptext {visibility: hidden;animation:fade 1s infinite;
}
.tooltip:hover .tooltiptext {animation: fadein 2s 1;
}

上面的css中fadein和fadeout定义了两组动画关键帧(其中每组关键帧中样式组的名称“from”、“to”其实是可以自己随便写的,只要不违反CSS命名规则即可),每一组关键帧实际上就是一个动画,fadein和fadeout就是动画的名称。完成动画定义后,在需要播放动画的元素的CSS中用样式animation即可播放,它的参数包括要播放的关键组(动画)名称、持续时间和重播次数(infinite表示无限循环播放)。如上面的定义就可以在鼠标进入工具元素区域时让提示文本渐入,鼠标移出工具元素区域时让提示文本渐出。还可以通过“,”分隔在animation样式中播放多个动画。

animation动画可以精确控制动画的关键帧,但是编写CSS比较复杂。在提示工具这个用例中显然没必要弄得这么复杂,因此,可以用自动生成关键帧的transition样式来编写。

在上文中的animation动画中,我们使用了visibility和opacity两个属性来控制tooltiptext的显示与隐藏。这主要是由于visibility样式在hidden和visible之间没有过渡状态,因此,无法通过transition产生平滑渐入渐出式动画,也无法在关键帧组中自己定义出一个中间状态,它只会在到了播放时间时突然出现或者消失,而opacity则从0到1之间有无限个可用的连续值作为中间状态。

使用transition样式来实现tooltiptext的渐入渐出可以按如下方式定义:

.tooltip .tooltiptext {visibility: hidden;opacity: 0;transition: opacity 2s linear,visibility 2s;
}.tooltip:hover .tooltiptext {visibility: visible;opacity: 1;transition: opacity 2s linear;
}

可以看出来transition比animation的CSS定义要简洁得多,但是与animation对tooltiptext的visibility和opacity的初始定义要求并不严格不同的是,transition则必须要严格定义好tooltiptext的visibility和opacity的初始值。完整演示页面如下:

<!DOCTYPE html>
<html lang="zh"><head><meta charset="UTF-8"><title>tooltip的渐入与渐出</title><style>.tooltip {position: relative;display: inline-block;background-color: aqua;}.tooltip .tooltiptext {width: 140%;background-color: gray;text-align: left;text-indent: 2em;border-radius: 0.5em;padding: 0.2em 0.1em;color: #ff0;top: 1.5em;left: 1em;/* 定位 */position: absolute;z-index: 1;/*动画效果*/visibility: hidden;transition: opacity 2s linear, visibility 2s;opacity: 0;}.tooltip:hover .tooltiptext {visibility: visible;opacity: 1;transition: opacity 2s linear;}</style>
</head><body><div class="tooltip">工具元素<span class="tooltiptext">搜索后如有匹配内容高亮,请清空搜索框消除高亮,以免高亮标记被笔记保存。</span><input type="text" placeholder="搜索..."></div><span>相邻元素</span><br><div>下方的元素</div></body></html>

页面效果如下:

相关文章:

  • k8s一些名词解释
  • 240717.LeetCode——2974.最小数字游戏
  • 数据结构day2
  • 【区块链 + 智慧政务】涉税行政事业性收费“e 链通”项目 | FISCO BCOS应用案例
  • Golang | Leetcode Golang题解之第234题回文链表
  • Qt Style Sheets-样式表语法
  • vue检测页面手指滑动距离,执行回调函数,使用混入的语法,多个组件都可以使用
  • 微信小程序与本地MySQL数据库通信
  • 2024.7.17 ABAP面试题目总结
  • Hadoop-34 HBase 安装部署 单节点配置 hbase-env hbase-site 超详细图文 附带配置文件
  • .NET Framework、.NET Core 、 .NET 5、.NET 6和.NET 7 和.NET8 简介及区别
  • 3D问界—MAYA制作铁丝栅栏(透明贴图法)
  • 用Python轻松批量生成Word合同:解放双手,喝口咖啡就搞定!☕
  • 【Karapathy大神build-nanogpt】Take Away Notes
  • Android 12系统源码_存储(二)StorageManager类介绍
  • Android单元测试 - 几个重要问题
  • Java基本数据类型之Number
  • Laravel 实践之路: 数据库迁移与数据填充
  • Leetcode 27 Remove Element
  • Mac转Windows的拯救指南
  • MySQL的数据类型
  • OSS Web直传 (文件图片)
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • Python_网络编程
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 聊聊redis的数据结构的应用
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 你对linux中grep命令知道多少?
  • ionic异常记录
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • 函数计算新功能-----支持C#函数
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • ###STL(标准模板库)
  • #android不同版本废弃api,新api。
  • #git 撤消对文件的更改
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (solr系列:一)使用tomcat部署solr服务
  • (八)Flink Join 连接
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (独孤九剑)--文件系统
  • (十一)手动添加用户和文件的特殊权限
  • (文章复现)基于主从博弈的售电商多元零售套餐设计与多级市场购电策略
  • (五)关系数据库标准语言SQL
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转载)hibernate缓存
  • .bat文件调用java类的main方法
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .net 8 发布了,试下微软最近强推的MAUI
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET_WebForm_layui控件使用及与webform联合使用