在通讯运用和谈天界面中,当你正在与对方交谈时对方正在输入一条信息,会有一个小的气泡动画或者文案提示。
本文将磋商利用当代 CSS 来实现这一动画效果,首先会实现一个 Blink 效果的动画,然后实现一个波浪效果动画,末了实现一个语音气泡效果。

1.效果预览

1)Blink 效果:

2)Wave 效果:

html图片气泡现代CSS纯 CSS 实现聊气象泡后果 Webpack

3)语音气泡效果:

2.实现方案2.1.快速创建页面和容器

通过 html:5 和 div.container>(div.dot)3 快速创建页面及容器。

<div class="container"> <div class="dot"></div> <div class="dot"></div> <div class="dot"></div></div>2.2.增加根本样式

1)容器居中:

body { display: grid; place-content: center; min-height: 100vh; margin: 0;}

2)容器样式:

把稳:此处利用了当代CSS 原生嵌套(参考链接:)

.container { display: flex; justify-content: center; align-items: center; gap: 0.25rem; background: #e2e8f0; border-radius: 9999px; padding: 1rem; .dot { border-radius: 9999px; height: 0.5rem; width: 0.5rem; background: #93a2b7; }}2.3.实现动画

1)Blink 效果:

核心思想是通过给dot 元素设置 opacity 设置属性来改变其透明度,同时对 3 个 dot 的透明度变革设置不同的动画延迟 animation-delay 属性来实现闪烁的效果。

.container { .dot { opacity: 0; animation: blink 1s infinite; &:nth-child(1) { animation-delay: 0.3333s; } &:nth-child(2) { animation-delay: 0.6666s; } &:nth-child(3) { animation-delay: 0.9999s; } }}@keyframes blink { 50% { opacity: 1; }}

2)Wave 效果:

核心思想:给 dot 元素增加 transform 属性,设置 translateY 的值将目标元素从下至上垂直重新定位,同时在动画关键帧 keyframes 中对颜色进行调度。

.container { .dot { animation: wave 1s infinite; } } @keyframes wave { 0% { transform: translateY(0px); background: rgba(148 163 184 / 0); } 25% { transform: translateY(-0.25rem); background: rgba(148 163 184 / 0.8); } 50% { transform: translateY(0px); background: rgba(148 163 184 / 0); } 75% { transform: translateY(0.25rem); background: rgba(148 163 184 / 0.8); } 100% { transform: translateY(0); background: rgba(148 163 184 / 0); } }

2)语音气泡效果:

语音气泡因此可视化办法显示对话或思想的一种盛行而有效的方法。
你可能在漫画、卡通、广告和社交媒体文章中见过它们。
它们为设计增长了诙谐、情绪和个性,同时也为不雅观众供应了语境。
此外,语音气泡布局还可以将笔墨较多的设计分割开来,使其更加吸引人。

核心思想:在 wave 效果的根本上,对 .contianer 容器增加 ::before 和 ::after 两个伪元向来实现左下角的圆圈,同时动画中增加对全体容器的放大和缩小 scale 动画,并采取 ease-out 函数。

.container { animation: 2s zoom infinite ease-out; position: relative; &::before, &::after { content: ''; position: absolute; border-radius: 9999px; background: rgb(226 232 240); bottom: 0; left: 0; } &::before { height: 1rem; width: 1rem; transform: translate(-0.125rem, 0.125rem); } &::after { height: 0.5rem; width: 0.5rem; transform: translate(-0.5rem, 0.5rem); } .dot { border-radius: 9999px; height: 0.5rem; width: 0.5rem; background: rgba(148 163 184 / 1); animation: wave 1.2s infinite; &:nth-child(1) { animation-delay: 0.4s; } &:nth-child(2) { animation-delay: 0.8s; } &:nth-child(3) { animation-delay: 1.2s; } }}@keyframes zoom { 50% { transform: scale(1.1); }}

如果本文对您有帮助,欢迎关注、点赞和转发,感谢您的支持!