Read full tutorial How to Make Magic, Animated Tooltips With CSS on Tuts+. By Jase
Created
January 25, 2017 14:16
-
-
Save anonymous/590a22c66a1e287c84f1612f86ab2ae0 to your computer and use it in GitHub Desktop.
CSS Tooltip Magic
This file contains 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
<main> | |
<div> | |
<span tooltip="Arriba!">Up</span> | |
</div> | |
<div> | |
<span tooltip="Izquierda" flow="left">Left</span> | |
<span tooltip="Derecha" flow="right">Right</span> | |
</div> | |
<div> | |
<span tooltip="Abajo" flow="down">Down</span> | |
</div> | |
</main> | |
<aside> | |
<div><a href="http://webdesign.tutsplus.com/tutorials/css-tooltip-magic--cms-28082" target="_parent">Read the tutorial on Tuts+</a></div> | |
</aside> |
This file contains 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
/* START TOOLTIP STYLES */ | |
[tooltip] { | |
position: relative; /* opinion 1 */ | |
} | |
/* Applies to all tooltips */ | |
[tooltip]::before, | |
[tooltip]::after { | |
text-transform: none; /* opinion 2 */ | |
font-size: .9em; /* opinion 3 */ | |
line-height: 1; | |
user-select: none; | |
pointer-events: none; | |
position: absolute; | |
display: none; | |
opacity: 0; | |
} | |
[tooltip]::before { | |
content: ''; | |
border: 5px solid transparent; /* opinion 4 */ | |
z-index: 1001; /* absurdity 1 */ | |
} | |
[tooltip]::after { | |
content: attr(tooltip); /* magic! */ | |
/* most of the rest of this is opinion */ | |
font-family: Helvetica, sans-serif; | |
text-align: center; | |
/* | |
Let the content set the size of the tooltips | |
but this will also keep them from being obnoxious | |
*/ | |
min-width: 3em; | |
max-width: 21em; | |
white-space: nowrap; | |
overflow: hidden; | |
text-overflow: ellipsis; | |
padding: 1ch 1.5ch; | |
border-radius: .3ch; | |
box-shadow: 0 1em 2em -.5em rgba(0, 0, 0, 0.35); | |
background: #333; | |
color: #fff; | |
z-index: 1000; /* absurdity 2 */ | |
} | |
/* Make the tooltips respond to hover */ | |
[tooltip]:hover::before, | |
[tooltip]:hover::after { | |
display: block; | |
} | |
/* don't show empty tooltips */ | |
[tooltip='']::before, | |
[tooltip='']::after { | |
display: none !important; | |
} | |
/* FLOW: UP */ | |
[tooltip]:not([flow])::before, | |
[tooltip][flow^="up"]::before { | |
bottom: 100%; | |
border-bottom-width: 0; | |
border-top-color: #333; | |
} | |
[tooltip]:not([flow])::after, | |
[tooltip][flow^="up"]::after { | |
bottom: calc(100% + 5px); | |
} | |
[tooltip]:not([flow])::before, | |
[tooltip]:not([flow])::after, | |
[tooltip][flow^="up"]::before, | |
[tooltip][flow^="up"]::after { | |
left: 50%; | |
transform: translate(-50%, -.5em); | |
} | |
/* FLOW: DOWN */ | |
[tooltip][flow^="down"]::before { | |
top: 100%; | |
border-top-width: 0; | |
border-bottom-color: #333; | |
} | |
[tooltip][flow^="down"]::after { | |
top: calc(100% + 5px); | |
} | |
[tooltip][flow^="down"]::before, | |
[tooltip][flow^="down"]::after { | |
left: 50%; | |
transform: translate(-50%, .5em); | |
} | |
/* FLOW: LEFT */ | |
[tooltip][flow^="left"]::before { | |
top: 50%; | |
border-right-width: 0; | |
border-left-color: #333; | |
left: calc(0em - 5px); | |
transform: translate(-.5em, -50%); | |
} | |
[tooltip][flow^="left"]::after { | |
top: 50%; | |
right: calc(100% + 5px); | |
transform: translate(-.5em, -50%); | |
} | |
/* FLOW: RIGHT */ | |
[tooltip][flow^="right"]::before { | |
top: 50%; | |
border-left-width: 0; | |
border-right-color: #333; | |
right: calc(0em - 5px); | |
transform: translate(.5em, -50%); | |
} | |
[tooltip][flow^="right"]::after { | |
top: 50%; | |
left: calc(100% + 5px); | |
transform: translate(.5em, -50%); | |
} | |
/* KEYFRAMES */ | |
@keyframes tooltips-vert { | |
to { | |
opacity: .9; | |
transform: translate(-50%, 0); | |
} | |
} | |
@keyframes tooltips-horz { | |
to { | |
opacity: .9; | |
transform: translate(0, -50%); | |
} | |
} | |
/* FX All The Things */ | |
[tooltip]:not([flow]):hover::before, | |
[tooltip]:not([flow]):hover::after, | |
[tooltip][flow^="up"]:hover::before, | |
[tooltip][flow^="up"]:hover::after, | |
[tooltip][flow^="down"]:hover::before, | |
[tooltip][flow^="down"]:hover::after { | |
animation: tooltips-vert 300ms ease-out forwards; | |
} | |
[tooltip][flow^="left"]:hover::before, | |
[tooltip][flow^="left"]:hover::after, | |
[tooltip][flow^="right"]:hover::before, | |
[tooltip][flow^="right"]:hover::after { | |
animation: tooltips-horz 300ms ease-out forwards; | |
} | |
/* UNRELATED to tooltips */ | |
body { | |
margin: 0; | |
min-height: 100vh; | |
display: flex; | |
flex-direction: column; | |
font-family: sans-serif; | |
background: #ededed; | |
} | |
main { | |
flex: 1 1 100vh; | |
display: flex; | |
flex-direction: column; | |
align-items: center; | |
justify-content: center; | |
} | |
aside { | |
flex: none; | |
display: flex; | |
align-items: center; | |
justify-content: center; | |
background: #49b293; | |
color: #fff; | |
padding: 1em; | |
} | |
main div { | |
text-align: center; | |
color: #353539; | |
} | |
main span { | |
padding: .5em 1em; | |
margin: .5em; | |
display: inline-block; | |
background: #dedede; | |
} | |
aside a { | |
color: inherit; | |
text-decoration: none; | |
font-weight: bold; | |
display: inline-block; | |
padding: .4em 1em; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment