/** * Tooltip ([data-tooltip]) */ [data-tooltip] { position: relative; &:not(a, button, input) { border-bottom: 1px dotted; text-decoration: none; cursor: help; } &[data-placement="top"]::before, &[data-placement="top"]::after, &::before, &::after { display: block; z-index: 99; position: absolute; bottom: 100%; left: 50%; padding: .25rem .5rem; overflow: hidden; transform: translate(-50%, -.25rem); border-radius: var(--border-radius); background: var(--tooltip-background-color); content: attr(data-tooltip); color: var(--tooltip-color); font-style: normal; font-weight: var(--font-weight); font-size: .875rem; text-decoration: none; text-overflow: ellipsis; white-space: nowrap; opacity: 0; pointer-events: none; } // Caret &[data-placement="top"]::after, &::after { padding: 0; transform: translate(-50%, 0rem); border-top: .3rem solid; border-right: .3rem solid transparent; border-left: .3rem solid transparent; border-radius: 0; background-color: transparent; content: ""; color: var(--tooltip-background-color); } &[data-placement="bottom"] { &::before, &::after { top: 100%; bottom: auto; transform: translate(-50%, .25rem); } &:after{ transform: translate(-50%, -.3rem); border: .3rem solid transparent; border-bottom: .3rem solid; } } &[data-placement="left"] { &::before, &::after { top: 50%; right: 100%; bottom: auto; left: auto; transform: translate(-.25rem, -50%); } &:after{ transform: translate(.3rem, -50%); border: .3rem solid transparent; border-left: .3rem solid; } } &[data-placement="right"] { &::before, &::after { top: 50%; right: auto; bottom: auto; left: 100%; transform: translate(.25rem, -50%); } &:after{ transform: translate(-.3rem, -50%); border: .3rem solid transparent; border-right: .3rem solid; } } // Display &:focus, &:hover { &::before, &::after { opacity: 1; } } @if $enable-transitions { // Animations, excluding touch devices @media (hover: hover) and (pointer: fine) { &[data-placement="bottom"]:focus, &[data-placement="bottom"]:hover &:focus, &:hover { &::before, &::after { animation-duration: .2s; animation-name: tooltip-slide-top; } &::after { animation-name: tooltip-caret-slide-top; } } &[data-placement="bottom"] { &:focus, &:hover { &::before, &::after { animation-duration: .2s; animation-name: tooltip-slide-bottom; } &::after { animation-name: tooltip-caret-slide-bottom; } } } &[data-placement="left"] { &:focus, &:hover { &::before, &::after { animation-duration: .2s; animation-name: tooltip-slide-left; } &::after { animation-name: tooltip-caret-slide-left; } } } &[data-placement="right"] { &:focus, &:hover { &::before, &::after { animation-duration: .2s; animation-name: tooltip-slide-right; } &::after { animation-name: tooltip-caret-slide-right; } } } } @keyframes tooltip-slide-top { from { transform: translate(-50%, .75rem); opacity: 0; } to { transform: translate(-50%, -.25rem); opacity: 1; } } @keyframes tooltip-caret-slide-top { from { opacity: 0; } 50% { transform: translate(-50%, -.25rem); opacity: 0; } to { transform: translate(-50%, 0rem); opacity: 1; } } @keyframes tooltip-slide-bottom { from { transform: translate(-50%, -.75rem); opacity: 0; } to { transform: translate(-50%, .25rem); opacity: 1; } } @keyframes tooltip-caret-slide-bottom { from { opacity: 0; } 50% { transform: translate(-50%, -.5rem); opacity: 0; } to { transform: translate(-50%, -.3rem); opacity: 1; } } @keyframes tooltip-slide-left { from { transform: translate(.75rem, -50%); opacity: 0; } to { transform: translate(-.25rem, -50%); opacity: 1; } } @keyframes tooltip-caret-slide-left { from { opacity: 0; } 50% { transform: translate(.05rem, -50%); opacity: 0; } to { transform: translate(.3rem, -50%); opacity: 1; } } @keyframes tooltip-slide-right { from { transform: translate(-.75rem, -50%); opacity: 0; } to { transform: translate(.25rem, -50%); opacity: 1; } } @keyframes tooltip-caret-slide-right { from { opacity: 0; } 50% { transform: translate(-.05rem, -50%); opacity: 0; } to { transform: translate(-.3rem, -50%); opacity: 1; } } } }