diff --git a/docs/pages/components/tooltip.md b/docs/pages/components/tooltip.md new file mode 100644 index 0000000..899c0e5 --- /dev/null +++ b/docs/pages/components/tooltip.md @@ -0,0 +1,51 @@ +--- +title: 'Components: Tooltip - Sloth.css' +description: Additional information for elements on hover or focus +tags: hover information details description top left right bottom neutral accent success alert +--- + +## Tooltip + +A tooltip provides additional information for an element on hover or focus. + +### Position + +Use the `data-tooltip` attribute on any element to attach a tooltip that appears above the element on hover or focus. Linebreaks can be used too. + +
+ +
+ +```html + +``` + +To change position, use the `tooltip-left`, `tooltip-bottom` or `tooltip-right` classes accordingly. + +
+ + + +
+ +```html + + + +``` + +### Colors + +Tooltips are neutral by default, but can have a different color using the `tooltip-accent`, `tooltip-success` or `tooltip-alert` classes. + +
+ + + +
+ +```html + + + +``` diff --git a/src/_components.css b/src/_components.css index b18dca9..4510454 100644 --- a/src/_components.css +++ b/src/_components.css @@ -13,4 +13,4 @@ /* @import 'components/_tab.css'; */ @import 'components/_tag.css'; @import 'components/_toast.css'; -/* @import 'components/_tooltip.css'; */ +@import 'components/_tooltip.css'; diff --git a/src/components/_tooltip.css b/src/components/_tooltip.css new file mode 100644 index 0000000..78a1f7b --- /dev/null +++ b/src/components/_tooltip.css @@ -0,0 +1,76 @@ +[data-tooltip] { + position: relative; + + &::after { + background-color: color-mix(in srgb, var(--color-text-base) 75%, transparent); + border-radius: var(--border-radius); + bottom: 100%; + color: var(--color-text-inverted); + content: attr(data-tooltip); + display: block; + left: 50%; + max-width: 12rem; + opacity: 0; + overflow: hidden; + padding: .5rem; + position: absolute; + text-overflow: ellipsis; + transform: translate(-50%, .25rem); + transition: var(--transition-transform), var(--transition-opacity); + white-space: pre; + z-index: 50; + } + &:focus::after, + &:hover::after { + opacity: 1; + transform: translate(-50%, -.25rem); + } + + &.tooltip-right { + &::after { + bottom: 50%; + left: 100%; + transform: translate(-.25rem, 50%); + } + &:focus::after, + &:hover::after { + transform: translate(.25rem, 50%); + } + } + &.tooltip-bottom { + &::after { + bottom: auto; + top: 100%; + transform: translate(-50%, -.25rem); + } + &:focus::after, + &:hover::after { + transform: translate(-50%, .25rem); + } + } + &.tooltip-left { + &::after { + bottom: 50%; + left: auto; + right: 100%; + transform: translate(.25rem, 50%); + } + &:focus::after, + &:hover::after { + transform: translate(-.25rem, 50%); + } + } + + &.tooltip-accent::after { + background-color: color-mix(in srgb, var(--color-accent) 50%, transparent); + color: var(--color-text-dark); + } + &.tooltip-success::after { + background-color: color-mix(in srgb, var(--color-success) 50%, transparent); + color: var(--color-text-dark); + } + &.tooltip-alert::after { + background-color: color-mix(in srgb, var(--color-alert) 50%, transparent); + color: var(--color-text-dark); + } +}