用HTML和CSS实现提示工具(tooltip)及HTML元素的定位

所谓提示工具,是指将鼠标移动到某个HTML元素(工具)时会显示一些提示内容(提示文本),而鼠标移出工具元素的范围时提示文本就消失了。考虑到提示文本元素应当在鼠标进入工具元素时显示,鼠标离开工具元素时隐藏,可以将提示文本元素定义在工具元素的内部,作为其子元素。这样,鼠标没有进入工具元素时,提示文本元素是工具元素的子元素,而当鼠标进入工具元素时,提示文本元素是工具元素伪类:hover的子元素。只需将作为工具元素的子元素的提示文本元素的visibility样式赋值为hidden,将作为工具元素伪类:hover的子元素的提示文本元素的visibility样式赋值为visible,即实现了提示文本元素随着鼠标进出工具元素而显示与隐藏。
另一个需要处理的问题就是确定提示文本元素的显示位置。提示文本元素不应该占据文档流中的位置,否则,如果鼠标没有进入工具元素的范围,提示文本元素的visibility样式为hidden,页面会出现空白区域,影响页面外观。因此,应该将提示文本元素的样式规定为absolute或fixed,将其移出正常文档流且不进行页面定位,同时将工具元素的position规定为relative,使其成为浏览器计算提示文本元素定位时的锚点。

HTML元素的position样式可用值以及含义如下:

  • static

该关键字指定元素使用正常的布局行为,即元素在文档常规流中当前的布局位置。此时 top, right, bottom, left 和 z-index 属性无效。

  • relative

该关键字下,元素先放置在未添加定位时的位置,再在不改变页面布局的前提下调整元素位置(因此会在此元素未添加定位时所在位置留下空白)。position:relative 对 table-*-group, table-row, table-column, table-cell, table-caption 元素无效。

  • absolute

元素会被移出正常文档流,并不为元素预留空间,通过指定元素相对于最近的非 static 定位祖先元素的偏移,来确定元素位置。由于此祖先元素最好在文档流中占据正常位置,其position实际上应该赋值为relative。absolute定位的元素可以设置外边距(margins),且不会与其他边距合并。它显示时可能会盖住页面中的其他元素。

  • fixed

元素会被移出正常文档流,并不为元素预留空间,而是通过指定元素相对于屏幕视口(viewport)的位置来指定元素位置。它与absolute定位的区别在于元素的位置在屏幕滚动时不会改变。它显示时可能会盖住页面中的其他元素。

  • sticky

元素根据正常文档流进行定位,然后相对它的最近滚动祖先和最近块级祖先,包括 table-related 元素,基于 top、right、bottom 和 left 的值进行偏移。偏移值不会影响任何其他元素的位置。它显示时可能会盖住页面中的其他元素。

基于以上分析,可以定义如下css作为提示工具使用的样式:

/*工具元素的样式,要点在于应当为relative定位*/
.tooltip {
    position: relative;
    display: inline-block;
    background-color: aqua;
}
/*作为工具元素的子元素的提示文本元素的样式,
要点在于css选择器使用“.tooltip .tooltiptext”,
规定visibility为hidden,将position规定为
absolute或fixed*/
.tooltip .tooltiptext {
    visibility: hidden;
    width: 150%;/*宽度赋值为百分比时,以父元素的宽度为计算基数*/
    background-color: gray;
    text-align: left;
    text-indent: 2em;
    font-family: Cambria, Aa虎头虎脑;
    border-radius: 0.5em;
    padding: 0.2em 0.1em;
    color: #ff0;
    top: 1.5em;/*距父元素顶部1.5个字符高,以免盖住父元素*/
    left: 1em;
    /* 定位 */
    position: absolute;
	//position: fixed;
    z-index: 1;
}
/*作为工具元素伪类hover的子元素的提示文本元素的样式,
要点在于css选择器使用“.tooltip:hover .tooltiptext”,
将visibility赋值为visible,实现鼠标进入工具元素范围
时显示提示文本元素*/
.tooltip:hover .tooltiptext {
    visibility: visible;
}

在HTML页面中只需定义如下一组元素,即可实现tooltip效果:

<div class="tooltip">工具元素 
	<span class="tooltiptext">这是工具元素的提示信息</span>
</div>

完整示例页面如下:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>tooltip</title>
<style>
.tooltip {
    position: relative;
    display: inline-block;
    background-color: aqua;
}
.tooltip .tooltiptext {
    visibility: hidden;
    width: 140%;
    background-color: gray;
    text-align: left;
    text-indent: 2em;
    font-family: Cambria, Aa虎头虎脑;
    border-radius: 0.5em;
    padding: 0.2em 0.1em;
    color: #ff0;
    top: 1.5em;
    left: 1em;
    /* 定位 */
    position: absolute;
    z-index: 1;
}
.tooltip:hover .tooltiptext {
    visibility: visible;
}
</style>
</head>

<body>
<div class="tooltip">工具元素 
	<span class="tooltiptext">这是工具元素的提示信息</span>
</div>
<span>相邻元素</span><br>
<div>下方的元素</div>
</body>
</html>

鼠标进入工具元素区域时的效果如下图:

最后,将所有css伪类选择器搬运过来:

伪类选择器示例示例说明
:checkedinput:checked选择所有选中的表单元素
:disabledinput:disabled选择所有禁用的表单元素
:emptyp:empty选择所有没有子元素的p元素
:enabledinput:enabled选择所有启用的表单元素
:first-of-typep:first-of-type选择的每个 p 元素是其父元素的第一个 p 元素
:in-rangeinput:in-range选择元素指定范围内的值
:invalidinput:invalid选择所有无效的元素
:last-childp:last-child选择所有p元素的最后一个子元素
:last-of-typep:last-of-type选择每个p元素是其母元素的最后一个p元素
:not(selector):not(p)选择所有p以外的元素
:nth-child(n)p:nth-child(2)选择所有 p 元素的父元素的第二个子元素
:nth-last-child(n)p:nth-last-child(2)选择所有p元素倒数的第二个子元素
:nth-last-of-type(n)p:nth-last-of-type(2)选择所有p元素倒数的第二个为p的子元素
:nth-of-type(n)p:nth-of-type(2)选择所有p元素第二个为p的子元素
:only-of-typep:only-of-type选择所有仅有一个子元素为p的元素
:only-childp:only-child选择所有仅有一个子元素的p元素
:optionalinput:optional选择没有"required"的元素属性
:out-of-rangeinput:out-of-range选择指定范围以外的值的元素属性
:read-onlyinput:read-only选择只读属性的元素属性
:read-writeinput:read-write选择没有只读属性的元素属性
:requiredinput:required选择有"required"属性指定的元素属性
:rootroot选择文档的根元素
:target#news:target选择当前活动#news元素(点击URL包含锚的名字)
:validinput:valid选择所有有效值的属性
:linka:link选择所有未访问链接
:visiteda:visited选择所有访问过的链接
:activea:active选择正在活动链接
:hovera:hover把鼠标放在链接上的状态
:focusinput:focus选择元素输入后具有焦点
:first-letterp:first-letter选择每个<p> 元素的第一个字母
:first-linep:first-line选择每个<p> 元素的第一行
:first-childp:first-child选择器匹配属于任意元素的第一个子元素的 <p> 元素
:beforep:before在每个<p>元素之前插入内容
:afterp:after在每个<p>元素之后插入内容
:lang(language)p:lang(it)为<p>元素的lang属性选择一个开始值

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JDK之使用keytool安装cer证书

可针对https请求缺失证书解决报错&#xff1a; PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 解决办法&#xff1a; 先通过浏览器下载证书&#xff0c;再使用JDK自带…

互联网末法时代的一些思考

这篇文章也是临时起意&#xff0c;很长一段时间没写个人思考类的文章&#xff0c;主要原因也是时间完全不够用。随着年龄的增长&#xff0c;看待问题的视角也逐渐发生变化&#xff0c;例如从关注现象到关注动机&#xff0c;从关注结果到关注起因&#xff0c;2021年的时代我曾经…

时间序列问题解题(基于经验模型,使用机器学习模型)(Datawhale AI 夏令营)

示例题目&#xff1a;2024 iFLYTEK A.I.开发者大赛-讯飞开放平台 (xfyun.cn) 一&#xff0c;时间序列问题概述 1、时间序列问题定义 时间序列问题是一类重要的统计和数据分析问题&#xff0c;它涉及对按时间顺序排列的数据点进行分析、建模和预测。时间序列数据是由一系列随时…

【Apache Doris】周FAQ集锦:第 14 期

【Apache Doris】周FAQ集锦&#xff1a;第 14 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目&#xff01; 在这个栏目中&#xff0c;每周将筛选社区反馈的热门问题和话题&#xff0c;重点回答并进行深入探讨。旨在为广大用户…

支持CF高帧率的免费虚拟机系统

分享一个支持CF高帧率的免费虚拟机系统&#xff0c;这个是某UP主分享的&#xff0c;帧率也是能到两百帧吧&#xff0c;内存这些我开的是6h6g的&#xff0c;具体还是得看你们自己的电脑配置&#xff01;文件较大&#xff0c;请先保存再下载&#xff0c;因为我也不知道哪天取消分…

Julia 初学者指南(一) | 安装、配置及编译器

唠唠闲话 Julia 是一种高性能的动态编程语言&#xff0c;特别适用于数值分析和计算科学领域。它拥有一个强大的类型系统和灵活的多重分派机制&#xff0c;这使得代码易于编写同时还能保持接近 C 语言的运行速度。此外&#xff0c;Julia 也能无缝调用 C 和 Fortran 库&#xff0…

有关电力电子技术的一些相关仿真和分析:⑤交-直-交全桥逆变+全波整流结构电路(MATLAB/Siumlink仿真)

全桥逆变+全波整流结构 参数:Vin=500V, Vo=200V, T=2:1:1, RL=10Ω, fs=100kHz, L=1mH, C=100uF (1)给定输入电压,输出电压和主电路参数,仿真研究电路工作原理,分析工作时序; (2)调节负载电阻,实现电流连续和断续,并仿真验证; (3)调节占空比,分析占空比与电…

公司想无偿裁员,同事赖着不走

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 这招好像也不错! 事情是这样的&#xff1a;某公司准备把成本高的员工都裁掉&#xff0c;主要包含研发部和程序员&#xff0c;总共18个人&#xff0c;准备裁掉10人&#xff0c;因为他们工资开的太高了&#xff0c;…

ROS-机械臂——从零构建机器人模型

URDF建模 URDF URDF&#xff0c;全称为 Unified Robot Description Format&#xff08;统一机器人描述格式&#xff09;&#xff0c;是一种用于描述机器人几何结构和运动学属性的标准文件格式。URDF 文件通常用于机器人模拟、路径规划、控制算法开发和可视化等领域&#xff0c…

信号和槽机制的轻量级实现,sigslot 库介绍及使用

Qt中的信号与槽机制很好用&#xff0c;然而只在Qt环境中。在现代 C 编程中&#xff0c;对象间的通信是一个核心问题。为了解决这个问题&#xff0c;许多库提供了信号和槽&#xff08;Signals and Slots&#xff09;机制。今天推荐分享一个轻量级的实现&#xff1a;sigslot 库。…

AWS CDN新增用户ip 地区 城市 响应头

1.需要自定义cdn缓存策略 这里的策略也是先复制之前的cdn策略哈 最后复制完了 全部新增这两条标头key CloudFront-Viewer-Country CloudFront-Viewer-City 2.然后新增cdn函数&#xff0c;应用你写的这个函数 function handler(event) {var request event.request;var respon…

全国农产品地理标志登记汇总表(截至2022年2月25日)

数据来源&#xff1a;自主整理 数据范围&#xff1a;省级层面 数据数量&#xff1a;3510条数据指标&#xff1a; 本数据展示了截至2022年2月25日的全国农产品地理标志登记汇总表&#xff0c;具体指标展示如下表&#xff1a; 序号 年份 产品名称 所在地域 证书持有人…

【每日刷题】Day81

【每日刷题】Day81 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 日期累加_牛客题霸_牛客网 (nowcoder.com) 2. 打印日期_牛客题霸_牛客网 (nowcoder.com) 3. 2956.…

分享两个性价比极高的SSR方案

最近总监提出我们公司运营的一个网站运营数据有点差&#xff0c;亟待提升该网站的SEO&#xff08;搜索引擎优化&#xff09;体验。不然自然流量着实有点少&#xff0c;全靠氪金买百度付费流量&#xff0c;成本太高&#xff0c;显然不太现实。但是当时技术选型的时候并未考虑到S…

【Linux】权限的管理和Linux上的一些工具

文章目录 权限管理chgrpchownumaskfile指令sudo指令 目录权限粘滞位Linux中的工具1.软件包管理器yum2.rzsz Linux开发工具vim 总结 权限管理 chgrp 功能&#xff1a;修改文件或目录的所属组 格式&#xff1a;chgrp [参数] 用户组名 文件名 常用选项&#xff1a;-R 递归修改文…

解析 Mira :基于 Web3,让先进的 AI 技术易于访问和使用

“Mira 平台正在以 Web3 的方式解决当前 AI 开发面临的复杂性问题&#xff0c;同时保护 AI 贡献者的权益&#xff0c;让他们可以自主拥有并货币化自己的模型、数据和应用&#xff0c;以使先进的 AI 技术更加易于访问和使用。” AI 代表着一种先进的生产力&#xff0c;它通过深…

UE4-初见虚幻引擎

一.创建自己的工程 1.启动 a.通过桌面双击图标来打开对应版本的虚幻引擎 b.通过EPIC启动器开启动虚幻引擎 2.选择或新建项目 ps:高版本虚幻编辑器可以打开低版本的虚幻项目&#xff0c;但是高版本虚幻的项目不可以由低版本的虚幻编辑器打开。 3. 选择要打开的项目 4.选择模版 选…

mindspore打卡第24天之LSTM+CRF序列标注

LSTMCRF序列标注 概述 序列标注指给定输入序列&#xff0c;给序列中每个Token进行标注标签的过程。序列标注问题通常用于从文本中进行信息抽取&#xff0c;包括分词(Word Segmentation)、词性标注(Position Tagging)、命名实体识别(Named Entity Recognition, NER)等。以命名实…

Host碰撞实验

目录 Host碰撞原理 Host碰撞判断技巧 Host碰撞检测方法 Host碰撞实验步骤 从攻击者的视角来进行资产的梳理&#xff0c;采用全端口扫描子域名收集的方式&#xff0c;识别所有的企业资产暴露面。但即使是这样&#xff0c;往往会因为配置错误或是未及时回收等原因&#xff0c…

C++ std::lock_guard和 std::unique_lock

二者都是 C 标准库中用于管理互斥锁&#xff08;mutex&#xff09;的 RAII&#xff08;Resource Acquisition Is Initialization&#xff09;机制的类。这些类可以确保互斥锁在构造时被获取&#xff0c;在析构时被释放&#xff0c;从而避免死锁和资源泄漏问题。不过&#xff0c…