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

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

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>

相关文章:

  • 二分查找sql时间盲注,布尔盲注
  • 【翻译+论文阅读】DeepSeek-R1评测:粉碎GPT-4和Claude 3.5的开源AI革命
  • Kubernetes 最佳实践:Top 10 常见 DevOps/SRE 面试问题及答案
  • RTD2775QT/RTD2795QT瑞昱显示器芯片方案
  • 21vue3实战-----git husky和git commit规范
  • 大语言模型多代理协作(MACNET)
  • 计算机视觉中图像的基础认知
  • 二级等保对机房的要求
  • 集成学习(二):从理论到实战(附代码)
  • DeepSeek-R1 蒸馏 Qwen 和 Llama 架构 企业级RAG知识库
  • 侯捷 C++ 课程学习笔记:C++ 内存管理机制的深度剖析与实践
  • 石英表与机械表的世纪之争(Quartz vs. Mechanical Watches):瑞士钟表业的危机与重生(中英双语)
  • Ubuntu+Laravel+MQ+Supervisor队列系统搭建流程
  • 从VGG到Transformer:深度神经网络层级演进对模型性能的深度解析与技术实践指南
  • DeepSeek 助力 Vue 开发:打造丝滑的进度条
  • 微信服务号推送消息
  • .NET Web-静态文件访问目录浏览
  • 读 DeepSeek-R1 论文笔记
  • Jenkins 配置 Git Repository 五
  • 【MySQL】通过shell脚本一键同步MySQL数据库结构和数据到指定库中
  • 四川甘孜炉霍县觉日寺管委会主任呷玛降泽被查
  • “中国神湖”加快放大资源规模!3亿美元换海外年产380万吨钾盐项目
  • “水运江苏”“航运浙江”,江浙两省为何都在发力内河航运?
  • 秦洪看盘|交易新逻辑,银行股成A股稳定器
  • 牧原股份子公司与养殖户种猪买卖纠纷案一审胜诉
  • 巫蛊:文化的历史暗流