不写一行JS!纯CSS如何读取HTML属性实现Tooltip

前言

日常开发中,Tooltip(提示框)是非常常见的。正常实现方式是依赖JavaScript监听hover事件,动态计算位置并插入DOM元素。

但你知道不?​​纯CSS其实也能"读取"HTML元素上的属性值,配合伪元素生成动态Tooltip,全程无需一行JavaScript代码!​

本文将带你使用纯css实现Tooltip。

1. 实现思路

通过HTML原生的data-*属性存储提示内容,利用CSS的attr()函数读取属性值,再结合伪元素::after中的content属性渲染提示框,从而实现一个轻量的动态Tooltip方案。

具体说明下:

1.1 自定义属性

HTML5为所有元素提供了data-*自定义属性(如data-tooltip)。特点是:

  • ​纯HTML原生支持​:无需JavaScript即可直接定义
  • ​语义化存储​ :通过属性名(如tooltip)明确标识存储的内容用途
  • ​CSS/JS均可访问​ :既可以被CSS的attr()函数读取,也能通过JavaScript的datasetAPI获取。

1.2 CSS的属性读取器:attr()函数

CSS的attr()函数是一个"能获取指定HTML属性的值,并在CSS规则中使用。

例如:

css 复制代码
div::after {
  content: attr(data-tooltip); /* 读取data-tooltip属性的值作为内容 */
}

目前attr()​最稳定且广泛支持的场景是配合伪元素(如::before/::after)的content属性​​,这是实现Tooltip的关键。

当然不用担心兼容性,基本全部支持:

2. 纯CSS实现

话不多说,直接上代码:

xml 复制代码
<!DOCTYPE html>
<html lang="zh">
<head>
  <meta charset="UTF-8" />
  <title>纯 CSS Tooltip</title>
  <style>
    .tooltip {
      position: relative;
      display: inline-block;
      margin: 20px;
      padding: 10px 15px;
      background: #28a745;
      color: white;
      border-radius: 4px;
      cursor: pointer;
    }

    .tooltip::after {
      content: attr(data-tooltip);
      position: absolute;
      bottom: 100%;
      left: 50%;
      transform: translateX(-50%);
      margin-bottom: 5px;
      padding: 5px 10px;
      background: #333;
      color: white;
      font-size: 12px;
      white-space: nowrap;
      border-radius: 4px;
      opacity: 0;
      visibility: hidden;
      transition: all 0.3s;
      z-index: 10;
    }

    .tooltip:hover::after {
      opacity: 1;
      visibility: visible;
    }
  </style>
</head>
<body>
  <div class="tooltip" data-tooltip="这是一个纯 CSS 提示">悬停我</div>
</body>
</html>

✅ 这种方式不依赖 JavaScript 或框架,适合简单的、静态的提示需求。

效果:

3. 总结

最后总结一下:纯CSS通过读取HTML的data-*属性(attr()函数)+ 伪元素渲染(::after),配合定位与动画,即可实现无需JS的动态Tooltip,兼容性完全不用担心。

如有错误,请指正O^O!

相关推荐
0思必得04 小时前
[Web自动化] Selenium处理动态网页
前端·爬虫·python·selenium·自动化
东东5165 小时前
智能社区管理系统的设计与实现ssm+vue
前端·javascript·vue.js·毕业设计·毕设
catino5 小时前
图片、文件的预览
前端·javascript
layman05287 小时前
webpack5 css-loader:从基础到原理
前端·css·webpack
半桔7 小时前
【前端小站】CSS 样式美学:从基础语法到界面精筑的实战宝典
前端·css·html
AI老李7 小时前
PostCSS完全指南:功能/配置/插件/SourceMap/AST/插件开发/自定义语法
前端·javascript·postcss
_OP_CHEN7 小时前
【前端开发之CSS】(一)初识 CSS:网页化妆术的终极指南,新手也能轻松拿捏页面美化!
前端·css·html·网页开发·样式表·界面美化
啊哈一半醒7 小时前
CSS 主流布局
前端·css·css布局·标准流 浮动 定位·flex grid 响应式布局
PHP武器库7 小时前
ULUI:不止于按钮和菜单,一个专注于“业务组件”的纯 CSS 框架
前端·css
电商API_180079052477 小时前
第三方淘宝商品详情 API 全维度调用指南:从技术对接到生产落地
java·大数据·前端·数据库·人工智能·网络爬虫