slider.tsx 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. import styled from '@emotion/styled';
  2. const Slider = styled('input')<{hasLabel: boolean}>`
  3. /* stylelint-disable-next-line property-no-vendor-prefix */
  4. -webkit-appearance: none;
  5. width: 100%;
  6. background: transparent;
  7. margin: ${p => p.theme.grid}px 0 ${p => p.theme.grid * (p.hasLabel ? 2 : 1)}px;
  8. &::-webkit-slider-runnable-track {
  9. width: 100%;
  10. height: 3px;
  11. cursor: pointer;
  12. background: ${p => p.theme.border};
  13. border-radius: 3px;
  14. border: 0;
  15. }
  16. &::-moz-range-track {
  17. width: 100%;
  18. height: 3px;
  19. cursor: pointer;
  20. background: ${p => p.theme.border};
  21. border-radius: 3px;
  22. border: 0;
  23. }
  24. &::-ms-track {
  25. width: 100%;
  26. height: 3px;
  27. cursor: pointer;
  28. background: ${p => p.theme.border};
  29. border-radius: 3px;
  30. border: 0;
  31. }
  32. &::-webkit-slider-thumb {
  33. box-shadow: 0 0 0 3px ${p => p.theme.background};
  34. height: 17px;
  35. width: 17px;
  36. border-radius: 50%;
  37. background: ${p => p.theme.active};
  38. cursor: pointer;
  39. /* stylelint-disable-next-line property-no-vendor-prefix */
  40. -webkit-appearance: none;
  41. margin-top: -7px;
  42. border: 0;
  43. transition: background 0.1s, box-shadow 0.1s;
  44. }
  45. &::-moz-range-thumb {
  46. box-shadow: 0 0 0 3px ${p => p.theme.background};
  47. height: 17px;
  48. width: 17px;
  49. border-radius: 50%;
  50. background: ${p => p.theme.active};
  51. cursor: pointer;
  52. /* stylelint-disable-next-line property-no-vendor-prefix */
  53. -webkit-appearance: none;
  54. margin-top: -7px;
  55. border: 0;
  56. transition: background 0.1s, box-shadow 0.1s;
  57. }
  58. &::-ms-thumb {
  59. box-shadow: 0 0 0 3px ${p => p.theme.background};
  60. height: 17px;
  61. width: 17px;
  62. border-radius: 50%;
  63. background: ${p => p.theme.active};
  64. cursor: pointer;
  65. /* stylelint-disable-next-line property-no-vendor-prefix */
  66. -webkit-appearance: none;
  67. margin-top: -7px;
  68. border: 0;
  69. transition: background 0.1s, box-shadow 0.1s;
  70. }
  71. &::-ms-fill-lower {
  72. background: ${p => p.theme.border};
  73. border: 0;
  74. border-radius: 50%;
  75. }
  76. &::-ms-fill-upper {
  77. background: ${p => p.theme.border};
  78. border: 0;
  79. border-radius: 50%;
  80. }
  81. &:focus {
  82. outline: none;
  83. &::-webkit-slider-runnable-track {
  84. background: ${p => p.theme.border};
  85. }
  86. &::-ms-fill-upper {
  87. background: ${p => p.theme.border};
  88. }
  89. &::-ms-fill-lower {
  90. background: ${p => p.theme.border};
  91. }
  92. }
  93. &[disabled] {
  94. &::-webkit-slider-thumb {
  95. background: ${p => p.theme.border};
  96. cursor: default;
  97. }
  98. &::-moz-range-thumb {
  99. background: ${p => p.theme.border};
  100. cursor: default;
  101. }
  102. &::-ms-thumb {
  103. background: ${p => p.theme.border};
  104. cursor: default;
  105. }
  106. &::-webkit-slider-runnable-track {
  107. cursor: default;
  108. }
  109. &::-moz-range-track {
  110. cursor: default;
  111. }
  112. &::-ms-track {
  113. cursor: default;
  114. }
  115. }
  116. &:not([disabled])::-webkit-slider-runnable-track:hover {
  117. background: ${p => p.theme.activeHover};
  118. }
  119. &:not([disabled])::-moz-range-thumb:hover {
  120. background: ${p => p.theme.activeHover};
  121. }
  122. &:not([disabled])::-ms-thumb:hover {
  123. background: ${p => p.theme.activeHover};
  124. }
  125. &:focus::-webkit-slider-thumb,
  126. &.focus-visible::-webkit-slider-thumb {
  127. box-shadow: ${p => p.theme.background} 0 0 0 3px, ${p => p.theme.focus} 0 0 0 6px;
  128. }
  129. &:focus::-moz-range-thumb,
  130. &.focus-visible::-moz-range-thumb {
  131. box-shadow: ${p => p.theme.background} 0 0 0 3px, ${p => p.theme.focus} 0 0 0 6px;
  132. }
  133. &:focus::-ms-thumb,
  134. &.focus-visible::-ms-thumb {
  135. box-shadow: ${p => p.theme.background} 0 0 0 3px, ${p => p.theme.focus} 0 0 0 6px;
  136. }
  137. `;
  138. export default Slider;