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

不用JS实现鼠标悬停提示框,以及Emotion里:hover使用踩坑

不写onMouseEnter/onMouseLeave或者onMouseOver/onMouseOut,实现鼠标悬停提示框。Enter和Over的区别是,一个事件不冒泡,一个事件冒泡。

示例代码如下:

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
        .container {
            display: flex;
            flex-direction: column;
            justify-content: center;
            align-items: center;
            width: 300px;
            margin: 50px auto;
        }

        .content {
            width: 250px;
            height: 28px;
        }   

        .showTooltip {
            visibility: hidden; /* 默认情况下隐藏 */
            display: flex;
            justify-content: center;
            align-items: center;
            color: black;
            font-weight: bold;
            margin-bottom: 10px;
            border-radius: 3px;
            box-shadow: 0px 2px 5px gray;   
            cursor: pointer;
            padding: 10px;
        }

        .container:hover .showTooltip {
            visibility: visible; /* 鼠标悬停时显示 */
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="showTooltip">这是Tooltip提示!</div>
        <div class="content">鼠标hover在上面时,显示提示</div>
    </div>
</body>
</html>

效果:

接下来说说在emotion库里使用:hover伪类的踩坑:

使用emotion我们会这么写:

const styles = {
  container: css({
      display: "flex",
      flexDirection: "column",
      justifyContent: "center",
      alignItems: "center",
      width: "300px",
      margin: "50px auto",
      "&:hover .showTooltip": {
        visibility: "visible",
      },
  })    
}

然后在页面上使用, 以react为例:

    <div className={styles.container}>
        <div className={styles.showTooltip}>这是Tooltip提示!</div>
        <div className={styles.content}>鼠标hover在上面时,显示提示</div>
    </div>

这时,我们会发现:hover 无法控制showTooltip的样式了,如果单独使用:hover是有效果的

"&:hover": {
  visibility: "visible",
},

说明问题出在showTooltip的类名上,因为我们用浏览器参看html的dom时会发现,所有的css类名都被转换成了类似"css-1d78smd"的名字,所以我们定义的&:hover .showTooltip就会因为找不到showTooltip这个类名而失效。

解决方法是使用cx函数,用我们定义的css类名做一个拼接:

<div className={`${cx(styles.showTooltip,"showTooltip")}`}>这是Tooltip提示!</div>

这样,最后生成的html里的class属性,就是"css-1d78smd showTooltip"。

问题解决!


http://www.kler.cn/a/383035.html

相关文章:

  • GamePlay UE网络同步
  • linux-19 根文件系统(一)
  • springBoot Maven 剔除无用的jar引用
  • 写给Pythoner的前端进阶指南(五):事件驱动模型
  • 牛客网 SQL36查找后排序
  • WPF+MVVM案例实战与特效(四十五)- 打造优雅交互:ListBox 的高级定制与行为触发(侧边菜单交互面板)
  • python识别ocr 图片和pdf文件
  • 【LeetCode】每日一题 2024_11_6 长度为 K 的子数组的能量值 I(模拟、一次遍历)
  • 数智化实践案例 | 高质数据、领先平台、报告加速,赋能决策
  • 个人域名备案实操教程
  • go实现并发安全hashtable 拉链法
  • 实现自动化数据抓取:使用Node.js操控鼠标点击与位置坐标
  • MySQL 5.x和8.0有什么区别?
  • 十、快速入门go语言之方法
  • linux tar 打包为多个文件
  • 第J9周:Inception v3算法实战与解析(pytorch版)
  • MySQL的sql练习,适合初学者
  • 共同探索未来科技新境界 冠捷科技集团及腾讯云AI智能战略合作签约会
  • 开源的 API 学习平台「GitHub 热点速览」
  • 全面解析:网络协议及其应用
  • asp.net文件防盗链
  • 理解spring中的AOP
  • git 提交代码流程
  • 递归 != 递龟
  • 和合共赢 丨 广州探迹科技有限公司与泰迪智能科技战略合作签约仪式圆满结束
  • Redis常见面试题(二)