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

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

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

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

css 复制代码
@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的渐入渐出可以按如下方式定义:

css 复制代码
.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的初始值。完整演示页面如下:

html 复制代码
<!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>

页面效果如下:

相关推荐
Hoey8 分钟前
虚拟 DOM 和 DIFF 算法
前端·vue.js
bkspiderx10 分钟前
HTTP协议:Web通信的“通用语言”解析
前端·网络协议·http
云水一下11 分钟前
模块系统与 npm——万物皆模块
前端·npm·node.js
ZC跨境爬虫19 分钟前
跟着 MDN 学CSS day_47:(移动优先实战——从手机到宽屏的响应式进化)
前端·css·html·tensorflow·媒体
小新11020 分钟前
vue实战项目 计算器
前端·javascript·vue.js
秋田君22 分钟前
2026 前端新出路:掌握 C++ 核心语法,无缝衔接 QT 桌面开发
前端·c++·qt
老毛肚32 分钟前
jeecgboot vue 路由 拆分01
前端·javascript·typescript
ZC跨境爬虫33 分钟前
跟着 MDN 学CSS day_46:(响应式实战——用媒体查询打造双列布局)
前端·css·ui·html·tensorflow·媒体
狗凯之家源码网35 分钟前
多语言企鹅养殖投资返利系统 自定义产品配置 一键部署源码
前端·架构·php
每天吃饭的羊39 分钟前
LeetCode 链表
前端