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>
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>
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>