純css實現tooltip提示層

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

相關文章
相關標籤/搜索