介绍

Tooltip 长这样

它用 popup 的方式来详细描述一个主体. 比如某个 icon 代表着什么.

参考

YouTube – How To Make Tooltips With Only CSS

思路和难点

1. hover 的时候出现

我的例子中它 hidden 使用 scale 0 来实现的. hover 的时候就变大, 就出现了.

2. 定位在主体上方 (或者其它 position)

如果我们不考虑主体在屏幕的位置, 我们可以简单粗暴的定位在上方. 但如果要考虑屏幕可见度的话, 那么还需要搞一个动态 position. 比如 sometime 出现在上方, sometime 下方. 这样难度会上一个量级哦 (这篇只是简单的定位上方, 有兴趣的可以参考 Angular CDK Overlay 的做法, 它里面有计算 popup 内容的大小, 然后再开每一个 position 哪一个可以尽可能展现完内容就用哪个 position)

3. 有一个小箭头指向主体

小箭头是用 border 做的哦.

4. 简单的 animation

scale + translateY 小移动

Step by Step

HTML & Simple Style

首先是 HTML 的部分

<div class="icon-wrapper">
<i class="fa-solid fa-envelope"></i>
<p class="tooltip">This is email icon</p>
</div>

有些人会比较 prefer 完全用 ::after ::before 来实现. 好处是 HTML 非常干净 (参考上面的 YouTube 视频). 但我个人觉得不利于理解. 如果做封装的话我会用 ::after ::before. 但学习的话. 用 HTML 会比较好理解.

CSS Style

.icon-wrapper {
i {
font-size: 96px;
color: pink;
} .tooltip {
background-color: pink;
color: red;
padding: 1rem 2rem;
font-size: 1.5rem;
border-radius: 0.5rem;
}
}

给点简单的 Style 看看效果先

做小箭头

小箭头是用 border 做的

.tooltip {
position: relative;
&::after {
content: '';
position: absolute;
top: 100%;
left: 50%;
transform: translateX(-50%);
border: 16px solid transparent;
border-top-color: pink;
}
}

其原理是隐藏另外 3 边的 border, 它就变成三角形了.

效果

定位

.icon-wrapper {
position: relative;
.tooltip {
position: absolute;
bottom: calc(100% + 1rem);
left: 50%;
transform: translateX(-50%);
width: max-content;
max-width: 256px;
}
}

没什么难度, 只是调调角度而已

动画

最后加入动画. 它有 2 个动画, 一个是 scale 从 0 到 1, 另一个是 translateY 稍微往上滑动一点点.

.tooltip {
--scale: 0;
--gap: -0.5rem; bottom: calc(100% + var(--gap));
left: 50%;
transform: translateX(-50%) scale(var(--scale)); transition-property: transform, bottom;
transition-duration: 0.4s;
transform-origin: bottom center;
}
&:hover .tooltip {
--scale: 1;
--gap: 1rem;
}

由于是动态控制 transform, 所以需要使用到 CSS Variable.

最终效果

最终 CSS Style

.icon-wrapper {
i {
font-size: 96px;
color: pink;
} position: relative; .tooltip {
--scale: 0;
--translateY: 2rem;
background-color: pink;
color: red;
padding: 1rem 2rem;
font-size: 1.5rem;
border-radius: 0.5rem; position: absolute;
bottom: calc(100% + 0.75rem);
left: 50%;
transform: translateX(-50%) scale(var(--scale)) translateY(var(--translateY));
width: max-content;
max-width: 256px; &::after {
content: '';
position: absolute;
left: 50%;
transform: translateX(-50%);
top: 100%;
border: 16px solid transparent;
border-top-color: pink;
}
transition: transform 0.4s;
transform-origin: bottom center;
}
&:hover {
.tooltip {
--scale: 1;
--translateY: 0;
}
}
}

只用 ::before 和 ::afterr 实现的版本

HTML

<span class="icon-wrapper tooltip" data-tooltip="This is email icon">
<i class="fa-solid fa-envelope"></i>
</span>

CSS Style

.icon-wrapper {
i {
font-size: 96px;
color: lightblue;
}
} // 可以封装
.tooltip {
position: relative;
--scale: 0; &::before,
&::after {
position: absolute;
bottom: calc(100% + 1rem);
left: 50%; transform-origin: bottom center;
transition: transform 0.4s;
} &::before {
content: attr(data-tooltip);
display: inline-block;
width: max-content;
max-width: 256px;
background-color: lightblue;
color: blue;
padding: 1rem 2rem;
font-size: 1.5rem;
border-radius: 0.5rem; transform: translateX(-50%) scale(var(--scale));
} &::after {
content: '';
border: 16px solid transparent;
border-top-color: lightblue; transform: translateX(-50%) scale(var(--scale)) translateY(100%); // 定位方式和 ::before 一样, 只是多了一个 translateY(100%)
} &:hover {
--scale: 1;
}
}

animation 和上面的有点不同, 这是因为 ::before ::after 是 sibling 不容易控制. by right 箭头应该是 tooltip message 的 child 才容易掌控.

CSS & JS Effect – Tooltip的更多相关文章

  1. CSS & JS 制作滚动幻灯片

    ==================纯CSS方式==================== <!DOCTYPE html> <html> <head> <met ...

  2. 【转】Maven Jetty 插件的问题(css/js等目录死锁)的解决

    Maven Jetty 插件的问题(css/js等目录死锁,不能自动刷新)的解决:   1. 打开下面的目录:C:\Users\用户名\.m2\repository\org\eclipse\jetty ...

  3. Css Js Loader For Zencart

    Css Js Loader 描述:这个插件很早就出来了,可能知道人非常少 这个插件的功能是整合所有的网站的CSS和JS内容到一个文件里边. 因为CSS和JS文件到了一个文件,加快了程序的运行 在配合其 ...

  4. 购物车数字加减按钮HTML+CSS+JS(有需要嫌麻烦的小伙伴拿走不谢)

    之前在写详情页的时候,如下图 因为自己嫌麻烦,就去看其他网站是怎么写的,想直接拿来用,后来看来看去觉得写得很麻烦,于是最后还是决定自己写,附上HTML+CSS+JS代码,一条龙一站式贴心服务2333 ...

  5. vs合并压缩css,js插件——Bundler & Minifier

    之前做了一个大转盘的抽奖活动,因为比较火,部分用户反馈看不到页面的情况,我怀疑js加载请求过慢导致,所以今天针对之前的一个页面进行调试优化. 首先想到的是对页面的js和css进行压缩优化,百度了下vs ...

  6. nginx资源定向 css js路径问题

    今天玩玩项目,学学nginx发现还不错,速度还可以,但是CSS JS确无法使用,原来Iginx配置时需要对不同类型的文件配置规则,真是很郁闷,不过想想也还是很有道理.闲暇之际,把配置贴上来.#user ...

  7. IIS7的集成模式下如何让自定义的HttpModule不处理静态文件(.html .css .js .jpeg等)请求

    今天将开发好的ASP.NET站点部署到客户的服务器上后,发现了一个非常头疼的问题,那么就是IIS7的应用程序池是集成模式的话,ASP.NET项目中自定义的HttpModule会处理静态文件(.html ...

  8. 网站加载css/js/img等静态文件失败

    网站加载css/js/img等静态文件失败,报网站http服务器内部500错误.而服务器中静态文件存在且权限正常. 从浏览器中直接访问文件,出来乱码.这种问题原因在于iis中该网站mime配置报错,不 ...

  9. 【前端】Sublime text3 插件HTML/CSS/JS prettify 格式化代码

    1.首先安装插件 菜单的preference->packages control,然后输入install .. 回车,再输入HTML/CSS/JS prettify 再回车,重启后就可以了. 2 ...

  10. CSS+JS实现兼容性很好的无限级下拉菜单

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DT ...

随机推荐

  1. [Unity] Dreamteck Splines实现沿路径移动功能

    Dreamteck Splines实现沿路径移动功能 最近有一个"让物体沿固定路径移动"的需求,因此接触到了Dreamteck Splines插件. Dreamteck Splin ...

  2. Apache Kyuubi 在B站大数据场景下的应用实践

    01 背景介绍 近几年随着B站业务高速发展,数据量不断增加,离线计算集群规模从最初的两百台发展到目前近万台,从单机房发展到多机房架构.在离线计算引擎上目前我们主要使用Spark.Presto.Hive ...

  3. 统计里面PV 和 UV代表什么意思

    1.网站流量bai统计中"PV"它所代表的意思是访问量了,具体指的du就是网站zhi的页面点击量或是浏览量,亦或是页面的刷新量dao了,网站的页面每刷新一次,就统计一个" ...

  4. [oeasy]python0145_版本控制_git_备份还原

    git版本控制 回忆上次内容 上次我们了解了 try 的完全体 try 尝试运行   except 发现异常时运行的代码块   else 没有发现异常时运行的代码块   finally 无论是否发现异 ...

  5. 领域驱动设计(DDD)分层架构的三种模式

    模式一:四层架构 1.User Interface为用户界面层(或表示层),负责向用户显示信息和解释用户命令.这里指的用户可以是另一个计算机系统,不一定是使用用户界面的人.2.Application为 ...

  6. 如何用 WinDbg 调试Linux上的 .NET程序

    一:背景 1. 讲故事 最新版本 1.2402.24001.0 的WinDbg真的让人很兴奋,可以将自己伪装成 GDB 来和远程的 GDBServer 打通来实现对 Linux 上 .NET程序进行调 ...

  7. hbuilderx生成ios证书和上架全教程

    现在很多公司都使用uniapp作为底层框架来开发app应用,而uniapp的开发工具hbuilderx云打包的时候,需要证书和证书profile文件. 假如是ios应用,则还需要上架到appstore ...

  8. layui表格列添加超链接并传参

    1.表格渲染中对列添加templet属性  addlink为方法名 tableIns = table.render({                elem: '#Test'            ...

  9. Python和RPA网页自动化-让非标准下拉框选择指定文本的方法

    以下方"节点审批"下拉框为例 该下拉框没有<select>标签,而是<div><ul><li>标签.分别使用Python和RPA网页 ...

  10. ByteHouse高性能向量检索实践——“以图搜图”

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群   随着 LLM 技术的发展,向量检索与向量数据库也受到业界持续关注,它们能够为LLM提供外置记忆单元,通过提供与 ...