很久沒寫文章了,今天來一篇有意思的:使用純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