animated-number.css 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. [data-component="animated-number"] {
  2. display: inline-flex;
  3. align-items: baseline;
  4. vertical-align: baseline;
  5. line-height: inherit;
  6. font-variant-numeric: tabular-nums;
  7. [data-slot="animated-number-value"] {
  8. display: inline-flex;
  9. flex-direction: row-reverse;
  10. align-items: baseline;
  11. justify-content: flex-end;
  12. line-height: inherit;
  13. width: var(--animated-number-width, 1ch);
  14. overflow: hidden;
  15. transition: width var(--tool-motion-spring-ms, 560ms) var(--tool-motion-ease, cubic-bezier(0.22, 1, 0.36, 1));
  16. }
  17. [data-slot="animated-number-digit"] {
  18. display: inline-block;
  19. width: 1ch;
  20. height: 1em;
  21. line-height: 1em;
  22. overflow: hidden;
  23. vertical-align: baseline;
  24. -webkit-mask-image: linear-gradient(
  25. to bottom,
  26. transparent 0%,
  27. #000 var(--tool-motion-mask, 18%),
  28. #000 calc(100% - var(--tool-motion-mask, 18%)),
  29. transparent 100%
  30. );
  31. mask-image: linear-gradient(
  32. to bottom,
  33. transparent 0%,
  34. #000 var(--tool-motion-mask, 18%),
  35. #000 calc(100% - var(--tool-motion-mask, 18%)),
  36. transparent 100%
  37. );
  38. -webkit-mask-repeat: no-repeat;
  39. mask-repeat: no-repeat;
  40. }
  41. [data-slot="animated-number-strip"] {
  42. display: inline-flex;
  43. flex-direction: column;
  44. transform: translateY(calc(var(--animated-number-offset, 10) * -1em));
  45. transition-property: transform;
  46. transition-duration: var(--animated-number-duration, 560ms);
  47. transition-timing-function: var(--tool-motion-ease, cubic-bezier(0.22, 1, 0.36, 1));
  48. }
  49. [data-slot="animated-number-strip"][data-animating="false"] {
  50. transition-duration: 0ms;
  51. }
  52. [data-slot="animated-number-cell"] {
  53. display: inline-flex;
  54. align-items: center;
  55. justify-content: center;
  56. width: 1ch;
  57. height: 1em;
  58. line-height: 1em;
  59. }
  60. }
  61. @media (prefers-reduced-motion: reduce) {
  62. [data-component="animated-number"] [data-slot="animated-number-value"] {
  63. transition-duration: 0ms;
  64. }
  65. [data-component="animated-number"] [data-slot="animated-number-strip"] {
  66. transition-duration: 0ms;
  67. }
  68. }