pico/scss/components/_tooltip.scss

216 lines
5.3 KiB
SCSS
Raw Normal View History

2022-10-23 10:47:50 +07:00
@use "sass:map";
2022-10-22 13:11:51 +07:00
@use "../settings" as *;
2022-10-22 11:44:10 +07:00
2022-10-23 10:47:50 +07:00
@if map.get($modules, "components/tooltip") {
/**
* Tooltip ([data-tooltip])
*/
2019-11-27 15:31:49 +07:00
2024-01-25 01:42:54 +07:00
#{$parent-selector} [data-tooltip] {
2022-10-23 10:47:50 +07:00
position: relative;
2022-10-23 10:47:50 +07:00
&:not(a, button, input) {
border-bottom: 1px dotted;
text-decoration: none;
cursor: help;
}
2022-09-11 14:59:43 +07:00
2022-10-23 10:47:50 +07:00
&[data-placement="top"]::before,
&[data-placement="top"]::after,
&::before,
&::after {
2022-10-23 10:47:50 +07:00
display: block;
z-index: 99;
position: absolute;
bottom: 100%;
left: 50%;
padding: 0.25rem 0.5rem;
overflow: hidden;
transform: translate(-50%, -0.25rem);
2023-12-28 13:21:52 +07:00
border-radius: var(#{$css-var-prefix}border-radius);
background: var(#{$css-var-prefix}tooltip-background-color);
2022-10-23 10:47:50 +07:00
content: attr(data-tooltip);
2023-12-28 13:21:52 +07:00
color: var(#{$css-var-prefix}tooltip-color);
2022-10-23 10:47:50 +07:00
font-style: normal;
2023-12-28 13:21:52 +07:00
font-weight: var(#{$css-var-prefix}font-weight);
2022-10-23 10:47:50 +07:00
font-size: 0.875rem;
text-decoration: none;
text-overflow: ellipsis;
white-space: nowrap;
opacity: 0;
pointer-events: none;
}
2022-09-11 14:59:43 +07:00
2022-10-23 10:47:50 +07:00
// Caret
&[data-placement="top"]::after,
&::after {
2022-10-23 10:47:50 +07:00
padding: 0;
transform: translate(-50%, 0rem);
border-top: 0.3rem solid;
border-right: 0.3rem solid transparent;
border-left: 0.3rem solid transparent;
border-radius: 0;
background-color: transparent;
content: "";
2023-12-28 13:21:52 +07:00
color: var(#{$css-var-prefix}tooltip-background-color);
}
2022-10-15 23:22:12 +07:00
2022-10-23 10:47:50 +07:00
&[data-placement="bottom"] {
&::before,
&::after {
top: 100%;
bottom: auto;
transform: translate(-50%, 0.25rem);
}
2022-09-11 14:59:43 +07:00
2022-10-23 10:47:50 +07:00
&:after {
transform: translate(-50%, -0.3rem);
border: 0.3rem solid transparent;
border-bottom: 0.3rem solid;
}
}
2022-10-15 23:22:12 +07:00
2022-10-23 10:47:50 +07:00
&[data-placement="left"] {
&::before,
&::after {
top: 50%;
right: 100%;
bottom: auto;
left: auto;
transform: translate(-0.25rem, -50%);
}
2022-10-23 10:47:50 +07:00
&:after {
transform: translate(0.3rem, -50%);
border: 0.3rem solid transparent;
border-left: 0.3rem solid;
}
2021-11-08 00:12:34 +07:00
}
2022-10-23 10:47:50 +07:00
&[data-placement="right"] {
&::before,
&::after {
top: 50%;
right: auto;
bottom: auto;
left: 100%;
transform: translate(0.25rem, -50%);
}
2022-10-23 10:47:50 +07:00
&:after {
transform: translate(-0.3rem, -50%);
border: 0.3rem solid transparent;
border-right: 0.3rem solid;
}
}
// Display
&:focus,
&:hover {
&::before,
&::after {
opacity: 1;
}
2022-10-23 10:47:50 +07:00
}
2022-10-15 23:22:12 +07:00
2022-10-23 10:47:50 +07:00
@if $enable-transitions {
// Animations, excluding touch devices
@media (hover: hover) and (pointer: fine) {
2023-03-25 19:41:13 +07:00
// Default (top)
&:focus,
&:hover {
&::before,
&::after {
2023-12-28 13:21:52 +07:00
#{$css-var-prefix}tooltip-slide-to: translate(-50%, -0.25rem);
2023-03-28 21:28:51 +07:00
transform: translate(-50%, 0.75rem);
2022-10-15 23:22:12 +07:00
animation-duration: 0.2s;
2023-03-28 21:28:51 +07:00
animation-fill-mode: forwards;
animation-name: tooltip-slide;
opacity: 0;
}
2022-10-15 23:22:12 +07:00
&::after {
2023-12-28 13:21:52 +07:00
#{$css-var-prefix}tooltip-caret-slide-to: translate(-50%, 0rem);
2023-03-28 21:28:51 +07:00
transform: translate(-50%, -0.25rem);
animation-name: tooltip-caret-slide;
}
}
2022-10-15 23:22:12 +07:00
2023-03-25 19:41:13 +07:00
// Bottom
2022-10-23 10:47:50 +07:00
&[data-placement="bottom"] {
&:focus,
&:hover {
&::before,
&::after {
2023-12-28 13:21:52 +07:00
#{$css-var-prefix}tooltip-slide-to: translate(-50%, 0.25rem);
2023-03-28 21:28:51 +07:00
transform: translate(-50%, -0.75rem);
animation-name: tooltip-slide;
2022-10-23 10:47:50 +07:00
}
2022-10-15 23:22:12 +07:00
2022-10-23 10:47:50 +07:00
&::after {
2023-12-28 13:21:52 +07:00
#{$css-var-prefix}tooltip-caret-slide-to: translate(-50%, -0.3rem);
2023-03-28 21:28:51 +07:00
transform: translate(-50%, -0.5rem);
animation-name: tooltip-caret-slide;
2022-10-23 10:47:50 +07:00
}
}
}
2022-10-15 23:22:12 +07:00
2023-03-25 19:41:13 +07:00
// Left
2022-10-23 10:47:50 +07:00
&[data-placement="left"] {
&:focus,
&:hover {
&::before,
&::after {
2023-12-28 13:21:52 +07:00
#{$css-var-prefix}tooltip-slide-to: translate(-0.25rem, -50%);
2023-03-28 21:28:51 +07:00
transform: translate(0.75rem, -50%);
animation-name: tooltip-slide;
2022-10-23 10:47:50 +07:00
}
&::after {
2023-12-28 13:21:52 +07:00
#{$css-var-prefix}tooltip-caret-slide-to: translate(0.3rem, -50%);
2023-03-28 21:28:51 +07:00
transform: translate(0.05rem, -50%);
animation-name: tooltip-caret-slide;
2022-10-23 10:47:50 +07:00
}
}
2022-10-23 10:47:50 +07:00
}
2022-10-15 23:22:12 +07:00
2023-03-25 19:41:13 +07:00
// Right
2022-10-23 10:47:50 +07:00
&[data-placement="right"] {
&:focus,
&:hover {
&::before,
&::after {
2023-12-28 13:21:52 +07:00
#{$css-var-prefix}tooltip-slide-to: translate(0.25rem, -50%);
2023-03-28 21:28:51 +07:00
transform: translate(-0.75rem, -50%);
animation-name: tooltip-slide;
2022-10-23 10:47:50 +07:00
}
&::after {
2023-12-28 13:21:52 +07:00
#{$css-var-prefix}tooltip-caret-slide-to: translate(-0.3rem, -50%);
2023-03-28 21:28:51 +07:00
transform: translate(-0.05rem, -50%);
animation-name: tooltip-caret-slide;
2022-10-23 10:47:50 +07:00
}
}
}
}
2023-03-28 21:28:51 +07:00
@keyframes tooltip-slide {
2022-10-23 10:47:50 +07:00
to {
2023-12-28 13:21:52 +07:00
transform: var(#{$css-var-prefix}tooltip-slide-to);
2022-10-23 10:47:50 +07:00
opacity: 1;
}
2022-09-11 14:59:43 +07:00
}
2022-10-15 23:22:12 +07:00
2023-03-28 21:28:51 +07:00
@keyframes tooltip-caret-slide {
2022-10-23 10:47:50 +07:00
50% {
opacity: 0;
}
to {
2023-12-28 13:21:52 +07:00
transform: var(#{$css-var-prefix}tooltip-caret-slide-to);
2022-10-23 10:47:50 +07:00
opacity: 1;
}
2022-09-11 14:59:43 +07:00
}
}
}
2022-10-15 23:22:12 +07:00
}