很久没写文章了,今天来一篇有意思的:使用纯css实现一个提示层(tooltip)声明:本文是受到另外一篇文章启发,感谢做者的无私分享,感受颇有趣,就整理了下。css
伪类::before,::after,:hover
,定位position:relative|absolute
,透明度opacity:0|1
,变换transform
等.html
经过伪类before,after
(绝对定位)指示箭头和内容。 再根据left,top,transform
改变位置或角度来组成恰当的tooltip。经过attr的值来设置tooltip内容.ide
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style> [tooltip]{ position: relative; display:inline-block; margin: 20px; border: 1px solid #ccc; padding: 4px 6px; } [tooltip]::before { content: ""; position: absolute; border-width: 4px 6px 0 6px; border-style: solid; border-color: transparent; border-top-color: black; z-index: 99; opacity:0; top:-5px; left:50%; transform: translateX(-50%); } [tooltip]::after { content: attr(tooltip); position: absolute; background: black; text-align: center; color: #fff; border-radius: 5px; padding:4px 2px; min-width: 80px; pointer-events: none; z-index:99; opacity:0; left:50%; top:-5px; transform: translateX(-50%) translateY(-100%); } [tooltip]:hover::after,[tooltip]:hover::before{ opacity: 1; } /* 右侧 */ [tooltip][position='right']::before{ top: 50%; left:100%; margin-left: -3px; transform: translateY(-50%) rotate(90deg); } [tooltip][position='right']::after{ top: 50%; left: 100%; margin-left: 5px; transform: translateY(-50%); } /* 左侧 */ [tooltip][position='left']::before{ top: 50%; left:0; margin-left: -9px; transform: translateY(-50%) rotate(-90deg); } [tooltip][position='left']::after{ top: 50%; left: 0; margin-left: -5px; transform: translateY(-50%) translateX(-100%); } /* 底侧 */ [tooltip][position='bottom']::before{ top: 100%; left:50%; margin-top: 1px; transform: translatex(-50%) rotate(180deg); } [tooltip][position='bottom']::after{ top: 100%; left: 50%; margin-top: 5px; transform: translatex(-50%) ; } </style>
</head>
<body>
<div style="margin:60px;">
<div tooltip="love you">hover</div>
<br>
<div tooltip="love you" position="left">hover left</div>
<br>
<div tooltip="love you" position="right">hover right</div>
<br>
<div tooltip="love you" position="bottom">hover bottom</div>
</div>
</body>
</html>
复制代码
定位默认是之内容框为起点的,因为本文例子对tooltip元素加了边框border:1px solid #ccc
,计算距离时应该处理这一个px.ui
变换transform
中旋转角度时rotate
时,是绕该元素的中心旋转的,注意别计算错了。translateX,translateY
的值为百分数时,至关于自身长度的百分比.spa
怎么样?本文颇有趣吧?3d