Last active
August 29, 2015 14:23
-
-
Save ilyador/405f0fb1a964edbd4bef to your computer and use it in GitHub Desktop.
CSS-only animated tooltips
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* Originally by Chris Bracco with a few cleanups and fixes http://cbracco.me/a-simple-css-tooltip/ */ | |
/* Base styles for the element that has a tooltip */ | |
[tooltip], | |
.tooltip { | |
position: relative; | |
cursor: pointer; | |
} | |
/* Base styles for the entire tooltip */ | |
[tooltip]::before, | |
[tooltip]::after, | |
.tooltip::before, | |
.tooltip::after { | |
position: absolute; | |
visibility: hidden; | |
opacity: 0; | |
transition: | |
opacity 0.2s ease-in-out, | |
visibility 0.2s ease-in-out, | |
transform 0.2s cubic-bezier(0.71, 1.7, 0.77, 1.24); | |
transform: translate3d(0, 0, 0); | |
pointer-events: none; | |
} | |
/* Show the entire tooltip on hover and focus */ | |
[tooltip]:hover::before, | |
[tooltip]:hover::after, | |
[tooltip]:focus::before, | |
[tooltip]:focus::after, | |
.tooltip:hover::before, | |
.tooltip:hover::after, | |
.tooltip:focus::before, | |
.tooltip:focus::after { | |
visibility: visible; | |
opacity: 1; | |
} | |
/* Base styles for the tooltip's directional arrow */ | |
.tooltip::before, | |
[tooltip]::before { | |
z-index: 1001; | |
border: 6px solid transparent; | |
background: transparent; | |
content: ""; | |
} | |
/* Base styles for the tooltip's content area */ | |
.tooltip::after, | |
[tooltip]::after { | |
z-index: 1000; | |
padding: 8px; | |
width: 160px; | |
background-color: #000; | |
background-color: hsla(0, 0%, 20%, 0.9); | |
color: #fff; | |
content: attr(tooltip); | |
font-size: 14px; | |
line-height: 1.2; | |
} | |
/* Directions */ | |
/* Top (default) */ | |
[tooltip]::before, | |
[tooltip]::after, | |
.tooltip::before, | |
.tooltip::after, | |
.tooltip-top::before, | |
.tooltip-top::after { | |
bottom: 100%; | |
left: 50%; | |
} | |
[tooltip]::before, | |
.tooltip::before, | |
.tooltip-top::before { | |
margin-left: -6px; | |
margin-bottom: -12px; | |
border-top-color: #000; | |
border-top-color: hsla(0, 0%, 20%, 0.9); | |
} | |
/* Horizontally align top/bottom tooltips */ | |
[tooltip]::after, | |
.tooltip::after, | |
.tooltip-top::after { | |
margin-left: -80px; | |
} | |
[tooltip]:hover::before, | |
[tooltip]:hover::after, | |
[tooltip]:focus::before, | |
[tooltip]:focus::after, | |
.tooltip:hover::before, | |
.tooltip:hover::after, | |
.tooltip:focus::before, | |
.tooltip:focus::after, | |
.tooltip-top:hover::before, | |
.tooltip-top:hover::after, | |
.tooltip-top:focus::before, | |
.tooltip-top:focus::after { | |
transform: translateY(-12px); | |
} | |
/* Left */ | |
.tooltip-left::before, | |
.tooltip-left::after { | |
right: 100%; | |
bottom: 50%; | |
left: auto; | |
} | |
.tooltip-left::before { | |
margin-left: 0; | |
margin-right: -12px; | |
margin-bottom: 0; | |
border-top-color: transparent; | |
border-left-color: #000; | |
border-left-color: hsla(0, 0%, 20%, 0.9); | |
} | |
.tooltip-left:hover::before, | |
.tooltip-left:hover::after, | |
.tooltip-left:focus::before, | |
.tooltip-left:focus::after { | |
transform: translateX(-12px); | |
} | |
/* Bottom */ | |
.tooltip-bottom::before, | |
.tooltip-bottom::after { | |
top: 100%; | |
bottom: auto; | |
left: 50%; | |
} | |
.tooltip-bottom::before { | |
margin-top: -12px; | |
margin-bottom: 0; | |
border-top-color: transparent; | |
border-bottom-color: #000; | |
border-bottom-color: hsla(0, 0%, 20%, 0.9); | |
} | |
.tooltip-bottom:hover::before, | |
.tooltip-bottom:hover::after, | |
.tooltip-bottom:focus::before, | |
.tooltip-bottom:focus::after { | |
transform: translateY(12px); | |
} | |
/* Right */ | |
.tooltip-right::before, | |
.tooltip-right::after { | |
bottom: 50%; | |
left: 100%; | |
} | |
.tooltip-right::before { | |
margin-bottom: 0; | |
margin-left: -12px; | |
border-top-color: transparent; | |
border-right-color: #000; | |
border-right-color: hsla(0, 0%, 20%, 0.9); | |
} | |
.tooltip-right:hover::before, | |
.tooltip-right:hover::after, | |
.tooltip-right:focus::before, | |
.tooltip-right:focus::after { | |
transform: translateX(12px); | |
} | |
/* Move directional arrows down a bit for left/right tooltips */ | |
.tooltip-left::before, | |
.tooltip-right::before { | |
top: 3px; | |
} | |
/* Vertically center tooltip content for left/right tooltips */ | |
.tooltip-left::after, | |
.tooltip-right::after { | |
margin-left: 0; | |
margin-bottom: -16px; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<p class="tooltip-bottom" tooltip="I’m the tooltip text.">Tooltip</p> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment