CSS 小技巧 —— CSS 实现 Tooltip 功能-鼠标 hover 之后出现弹层

news2025/2/15 20:45:19

CSS 小技巧 —— CSS 实现 Tooltip 功能-鼠标 hover 之后出现弹层

1. 两个元素实现

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title>纯 CSS 实现 Tooltip 功能-鼠标 hover 之后出现弹层</title>
  <style>
    *{
      padding: 0;
      margin: 0;
      list-style: none;
    }

    .item {
      position: relative;
      display: inline-block;
      margin: 10px;
    }

    .name {
      cursor: pointer;
      padding: 5px;
    }

    .desc {
      display: none;
      position: absolute;
      top: 130%;
      left: 50%;
      transform: translateX(-50%) translateY(-10px);
      background-color: rgba(0, 0, 0, 0.8);
      color: #fff;
      padding: 5px 10px;
      border-radius: 4px;
      white-space: nowrap;
      z-index: 100;
      opacity: 0;
      transition: opacity 0.3s ease, transform 0.3s ease;
    }

    .desc::before {
      content: '';
      position: absolute;
      top: -10px;
      left: 50%;
      transform: translateX(-50%);
      border-width: 5px;
      border-style: solid;
      border-color: transparent transparent rgba(0, 0, 0, 0.8) transparent;
    }

    .item:hover .desc {
      display: block;
      opacity: 1;
      transform: translateX(-50%) translateY(0);
    }
  </style>
</head>
<body>
  <ul class="item-list">
    <li class="item">
      <span class="name">a</span>
      <span class="desc">aa</span>
    </li>
    <li class="item">
      <span class="name">b</span>
      <span class="desc">bb</span>
    </li>
    <li class="item">
      <span class="name">c</span>
      <span class="desc">ccdddd</span>
    </li>
  </ul>
</body>
</html>

2. 通过 ::after 和 ::before 实现

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title>纯 CSS 实现 Tooltip 功能-鼠标 hover 之后出现弹层</title>
  <style>
    *{
      padding: 0;
      margin: 0;
      list-style: none;
    }

    .item-list {
      display: flex;
      gap: 20px;
    }

    .item {
      position: relative;
    }

    .name {
      position: relative;
      cursor: pointer;
      padding: 5px;
    }

    .name::after {
      content: attr(data-desc);
      display: none;
      position: absolute;
      top: 100%;
      left: 50%;
      transform: translateX(-50%) translateY(5px);
      background-color: rgba(0, 0, 0, 0.8);
      color: #fff;
      padding: 5px 10px;
      border-radius: 4px;
      white-space: nowrap;
      z-index: 100;
      opacity: 0;
      transition: opacity 0.3s ease, transform 0.3s ease;
    }

    .name:hover::after {
      display: block;
      opacity: 1;
      transform: translateX(-50%) translateY(0);
    }

    .name::before {
      content: '';
      display: none;
      position: absolute;
      top: calc(100% - 5px);
      left: 50%;
      transform: translateX(-50%) translateY(-5px);
      border-width: 5px;
      border-style: solid;
      border-color: transparent transparent rgba(0, 0, 0, 0.8) transparent;
    }

    .name:hover::before {
      display: block;
    }
  </style>
</head>
<body>
  <ul class="item-list">
    <li class="item">
      <span class="name" data-desc="aa">a</span>
    </li>
    <li class="item">
      <span class="name" data-desc="bb">b</span>
    </li>
    <li class="item">
      <span class="name" data-desc="ccddddd">c</span>
    </li>
  </ul>
</body>
</html>

3. 实现 Tooltip 上下左右四个位置展示

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>纯 CSS 实现 Tooltip 功能-鼠标 hover 之后出现弹层</title>
  <style>
  .tooltip-container {
    position: relative;
    display: inline-block;
    margin: 100px;
    border-bottom: 1px dotted black;
    cursor: pointer;
  }
  
  .tooltip-container::after {
    content: attr(data-tooltip);
    position: absolute;
    z-index: 1;
    
    opacity: 0;
    visibility: hidden;
    transition: opacity 0.3s;
    
    background: #333;
    color: white;
    padding: 5px 10px;
    border-radius: 4px;
    font-size: 14px;
    white-space: nowrap;
  }
  
  .tooltip-container::before {
    content: '';
    position: absolute;
    z-index: 1;
    border: 5px solid transparent;
    
    opacity: 0;
    visibility: hidden;
    transition: opacity 0.3s;
  }
  
  .tooltip-container:hover::after,
  .tooltip-container:hover::before {
    opacity: 1;
    visibility: visible;
  }
  
  .tooltip-top::after {
    bottom: 100%;
    left: 50%;
    transform: translateX(-50%);
    margin-bottom: 10px;
  }
  
  .tooltip-top::before {
    bottom: calc(100% - 5px);
    left: 50%;
    transform: translateX(-50%);
    margin-bottom: 5px;
    border-top-color: #333; /* 箭头方向 */
  }
  
  .tooltip-bottom::after {
    top: 100%;
    left: 50%;
    transform: translateX(-50%);
    margin-top: 10px;
  }
  
  .tooltip-bottom::before {
    top: calc(100% - 5px);
    left: 50%;
    transform: translateX(-50%);
    margin-top: 5px;
    border-bottom-color: #333;
  }
  
  .tooltip-right::after {
    top: 50%;
    left: 100%;
    transform: translateY(-50%);
    margin-left: 10px;
  }
  
  .tooltip-right::before {
    top: 50%;
    left: calc(100% - 5px);
    transform: translateY(-50%);
    margin-left: 5px;
    border-right-color: #333;
  }
  
  .tooltip-left::after {
    top: 50%;
    right: 100%;
    transform: translateY(-50%);
    margin-right: 10px;
  }
  
  .tooltip-left::before {
    top: 50%;
    right: calc(100% - 5px);
    transform: translateY(-50%);
    margin-right: 5px;
    border-left-color: #333;
  }
  </style>
</head>
<body>

<div class="tooltip-container tooltip-top" data-tooltip="Top Tooltip">
  顶部显示
</div>

<div class="tooltip-container tooltip-bottom" data-tooltip="Bottom Tooltip">
  下方显示
</div>

<div class="tooltip-container tooltip-left" data-tooltip="Left Tooltip">
  左侧显示
</div>

<div class="tooltip-container tooltip-right" data-tooltip="Right Tooltip">
  右侧显示
</div>

</body>
</html>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

19.4.2 -19.4.4 新增、修改、删除数据

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 需要北风数据库的请留言自己的信箱。 19.4.2 新增数据 数据库数据的新增、修改和删除不同于查询&#xff0c;查询需要返回一个DbD…

haproxy详解笔记

一、概述 HAProxy&#xff08;High Availability Proxy&#xff09;是一款开源的高性能 TCP/HTTP 负载均衡器和代理服务器&#xff0c;用于将大量并发连接分发到多个服务器上&#xff0c;从而提高系统的可用性和负载能力。它支持多种负载均衡算法&#xff0c;能够根据服务器的…

【STM32】通过L496的HAL库Flash建立FatFS文件系统(CubeMX自动配置R0.12C版本)

【STM32】通过L496的HAL库Flash建立FatFS文件系统&#xff08;CubeMX自动配置R0.12C版本&#xff09; 文章目录 FlashFlash地址写Flash地址读 FatFS文件系统配置FatFS移植驱动函数时间戳函数 文件操作函数工作区缓存文件挂载和格式化测试文件读写测试其他文件操作函数 测试附录…

传感器篇(一)——深度相机

目录 一 概要 二 原理 三 对比 四 产品 五 结论 一 概要 深度相机是一种能够获取物体深度信息的设备&#xff0c;相较于普通相机只能记录物体的二维图像信息&#xff0c;深度相机可以感知物体与相机之间的距离&#xff0c;从而提供三维空间信息。在你正在阅读的报告中提到…

Qt 控件整理 —— 按钮类

一、PushButton 1. 介绍 在Qt中最常见的就是按钮&#xff0c;它的继承关系如下&#xff1a; 2. 常用属性 3. 例子 我们之前写过一个例子&#xff0c;根据上下左右的按钮去操控一个按钮&#xff0c;当时只是做了一些比较粗糙的去演示信号和槽是这么连接的&#xff0c;这次我们…

校园网绕过认证上网很简单

校园网绕过认证就是不用通过校园WiFi的WEB页面登录&#xff0c;这个WEB登录页面就是认证页面. 所谓绕过认证&#xff0c;就是不通过校园WiFi WEB登录页面直接上网&#xff0c;校园WiFi没有密码&#xff0c;直接就能连接上&#xff0c;我们连上这个WiFi的时候&#xff0c;它会给…

WPS或word接入智能AI

DeepSeek接入WPS 配置WPS &#xff08;1&#xff09;下载 OfficeAl助手插件: 插件下载地址:https://www.office-ai.cn/。 安装插件后&#xff0c;打开WPS&#xff0c;菜单栏会新增"OfficeAl助手”选项卡。 如果没有出现&#xff0c; 左上找到文件菜单 -> 选项 ,在…

vue3:template中v-for循环遍历这个centrerTopdata,我希望自循环前面三个就可以了怎么写?

问&#xff1a; template中v-for循环遍历这个centrerTopdata&#xff0c;我希望自循环前面三个就可以了怎么写&#xff1f; 回答&#xff1a; 问&#xff1a; <div v-for"(item, index) in centrerTopdata.slice(0, 3)" :key"index"> div cl…

Java练习(20)

ps:练习来自力扣 给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题&#xff0c;且该算法只使用常量额外空间。 class Solution {pu…

MySQL | MySQL安装教程

MySQL | MySQL安装教程(压缩包&#xff08;ZIP&#xff09;安装-详细版) &#x1fa84;个人博客&#xff1a;https://vite.xingji.fun MySQL概述 MySQL是一个关系型数据库管理系统&#xff0c;由瑞典MySQL AB公司开发&#xff0c;MySQL AB公司被Sun公司收购&#xff0c;Sun公…

【SpringBoot3.x+】slf4j-log4j12依赖引入打印日志报错的两种解决方法

最开始引入了1.7.5版本的slf4j-log4j依赖包&#xff0c;但是控制台不报错也不显示日志 在https://mvnrepository.com/找到最新的2.0.16版本之后出现报错&#xff1a; 进入提示的slf4j网站中可以找到从2.0.0版本开始&#xff0c;slf4j-log4j已经被slf4j-reload4j取代&#xff1…

算法学习笔记之贪心算法

导引&#xff08;硕鼠的交易&#xff09; 硕鼠准备了M磅猫粮与看守仓库的猫交易奶酪。 仓库有N个房间&#xff0c;第i个房间有 J[i] 磅奶酪并需要 F[i] 磅猫粮交换&#xff0c;硕鼠可以按比例来交换&#xff0c;不必交换所有的奶酪 计算硕鼠最多能得到多少磅奶酪。 输入M和…

DeepSeek R1 “顿悟时刻”(Aha Moment) 的重现与探索:基于 GRPO 的倒计时游戏训练

本文翻译整合转载于&#xff1a; Deepseek R1 是如何训练的Mini-R1&#xff1a;重现 Deepseek R1 的 “顿悟时刻” RL 教程 Deepseek R1 的发布震惊了整个行业。为什么&#xff1f;DeepSeek-R1 是一个开放模型&#xff0c;在复杂推理任务中可与 OpenAI 的 o1 相媲美&#xff0c…

【JavaScript爬虫记录】记录一下使用JavaScript爬取m4s流视频过程(内含ffmpeg合并)

前言 前段时间发现了一个很喜欢的视频,可惜网站不让下载,简单看了一下视频是被切片成m4s格式的流文件,初步想法是将所有的流文件下载下来然后使用ffmpeg合并成一个完整的mp4,于是写了一段脚本来实现一下,电脑没有配python环境,所以使用JavaScript实现,合并功能需要安装ffmpeg,…

【线性代数】1行列式

1. 行列式的概念 行列式的符号表示: 行列式的计算结果:一个数 计算模型1:二阶行列式 二阶行列式: 三阶行列式: n阶行列式: 🍎计算行列式 计算模型2:上三角形行列式 上三角形行列式特征:主对角线下皆为0。 上三角形行列式: 化上三角形通用方法:主对角线下,…

数据结构(考研)

线性表 顺序表 顺序表的静态分配 //线性表的元素类型为 ElemType//顺序表的静态分配 #define MaxSize10 typedef int ElemType; typedef struct{ElemType data[MaxSize];int length; }SqList;顺序表的动态分配 //顺序表的动态分配 #define InitSize 10 typedef struct{El…

安装WPS后,导致python调用Excel.Application异常,解决办法

在使用xlwings编辑excel文件时&#xff0c;默认调用的是“Excel.Application”&#xff0c;如果安装过wps&#xff0c;会导致该注册表为WPS&#xff0c;会导致xlwings执行异常 因为安装过WPS&#xff0c;导致与Excel不兼容的问题&#xff0c;想必大家都听说过。有些问题及时删…

vue3实战-----集成sass

vue3实战-----集成sass 1.安装2.使用3.全局样式文件中不能使用变量 1.安装 在使用scss之前需要安装sass和sass-loader两个插件。 2.使用 安装好之后就可以在组件中使用scss了。需要加上lang“scss”。 注意:scss中变量用$,less中变量用。 3.全局样式文件中不能使用变量 …

二分查找sql时间盲注,布尔盲注

目录 一&#xff1a;基础知识引导 数据库&#xff1a;information_schema里面记录着数据库的所有元信息 二&#xff0c;布尔盲注&#xff0c;时间盲注 &#xff08;1&#xff09;布尔盲注案例&#xff08;以sqli-labs第八关为例&#xff09;&#xff1a; &#xff08;2&am…

计算机网络-MPLS转发原理

在上一篇关于 MPLS 基础的文章中&#xff0c;我们了解了 MPLS 的基本概念、术语以及它在网络中的重要性。今天&#xff0c;我们将深入探讨 MPLS 转发的原理与流程&#xff0c;帮助大家更好地理解 MPLS 是如何在实际网络中工作的。 一、MPLS 转发概述 MPLS 转发的本质是将数据…