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>
![](/img/remote/1460000046098397)
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>
![](/img/remote/1460000046098398)
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>
![](/img/remote/1460000046098399)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。