@prefixClass: rc-slider; @disabledColor: #ccc; @border-radius-base: 6px; @primary-color: transparent; @tooltip-color: #fff; @tooltip-bg: tint(#666, 4%); @tooltip-arrow-width: 4px; @tooltip-distance: @tooltip-arrow-width+4; @tooltip-arrow-color: @tooltip-bg; @ease-out-quint : cubic-bezier(0.23, 1, 0.32, 1); @ease-in-quint : cubic-bezier(0.755, 0.05, 0.855, 0.06); .borderBox() { box-sizing: border-box; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); // remove tap highlight color for mobile safari * { box-sizing: border-box; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); // remove tap highlight color for mobile safari } } .@{prefixClass} { position: relative; height: 40px; padding: 15px 0; // width: 100%; margin: 8px; border-radius: @border-radius-base; touch-action: none; .borderBox(); &-rail { position: absolute; width: 100%; background-color: rgba(0, 0, 0, 0.3); height: 4px; border-radius: @border-radius-base; pointer-events: none; } &-track { position: absolute; left: 0; height: 4px; border-radius: @border-radius-base; background: linear-gradient(90deg, @green_secondary, @blue_secondary); } &-handle { position: absolute; margin-left: -7px; margin-top: -5px; width: 14px; height: 14px; cursor: pointer; cursor: -webkit-grab; cursor: grab; border-radius: 50%; border: solid 2px tint(@primary-color, 50%); background-color: #fff; touch-action: pan-x; &::after { content: ''; display: block; width: 40px; height: 50px; position: absolute; left: -15px; top: -16px; border-radius: 4px; background: black; opacity: 0.2; } &:focus { // border-color: tint(@primary-color, 20%); box-shadow: 0 0 0 4px tint(@primary-color, 50%); outline: none; } &-click-focused:focus { // border-color: tint(@primary-color, 50%); box-shadow: unset; } &:hover { border-color: tint(@primary-color, 20%); } &:active { border-color: tint(@primary-color, 20%); box-shadow: 0 0 5px tint(@primary-color, 20%); cursor: -webkit-grabbing; cursor: grabbing; } } &-mark { position: absolute; top: 18px; left: 0; width: 100%; font-size: 12px; pointer-events: none; } &-mark-text { position: absolute; display: inline-block; vertical-align: middle; text-align: center; cursor: pointer; color: rgba(255, 255, 255, 0.3); padding-top: 10px; } &-step { position: absolute; width: 100%; height: 4px; background: transparent; } &-dot { position: absolute; bottom: -2; margin-left: -0.5px; width: 1px; height: 12px; // border: 2px solid #e9e9e9; background-color: black; opacity: 0.2; cursor: pointer; border-radius: 50%; vertical-align: middle; &-active { // border-color: tint(@primary-color, 50%); background-color: white; opacity: 0.2; } } &-disabled { .@{prefixClass}-track { background-color: @disabledColor; } .@{prefixClass}-handle, .@{prefixClass}-dot { border-color: @disabledColor; box-shadow: none; background-color: #fff; cursor: not-allowed; opacity: 0; } .@{prefixClass}-mark-text, .@{prefixClass}-dot, .@{prefixClass}-track { cursor: not-allowed!important; opacity: 0; } } } .@{prefixClass}-vertical { width: 14px; height: 100%; padding: 0 5px; .@{prefixClass} { &-rail { height: 100%; width: 4px; } &-track { left: 5px; bottom: 0; width: 4px; } &-handle { margin-left: -5px; margin-bottom: -7px; touch-action: pan-y; position: relative; } &-mark { top: 0; left: 18px; height: 100%; } &-step { height: 100%; width: 4px; } &-dot { left: 2px; margin-bottom: -4px; &:first-child { margin-bottom: -4px; } &:last-child { margin-bottom: -4px; } } } } .motion-common() { animation-duration: .3s; animation-fill-mode: both; display: block !important; } .make-motion(@className, @keyframeName) { .@{className}-enter, .@{className}-appear { .motion-common(); animation-play-state: paused; } .@{className}-leave { .motion-common(); animation-play-state: paused; } .@{className}-enter.@{className}-enter-active, .@{className}-appear.@{className}-appear-active { animation-name: ~"@{keyframeName}In"; animation-play-state: running; } .@{className}-leave.@{className}-leave-active { animation-name: ~"@{keyframeName}Out"; animation-play-state: running; } } .zoom-motion(@className, @keyframeName) { .make-motion(@className, @keyframeName); .@{className}-enter, .@{className}-appear { transform: scale(0, 0); // need this by yiminghe animation-timing-function: @ease-out-quint; } .@{className}-leave { animation-timing-function: @ease-in-quint; } } .zoom-motion(rc-slider-tooltip-zoom-down, rcSliderTooltipZoomDown); @keyframes rcSliderTooltipZoomDownIn { 0% { opacity: 0; transform-origin: 50% 100%; transform: scale(0, 0); } 100% { transform-origin: 50% 100%; transform: scale(1, 1); } } @keyframes rcSliderTooltipZoomDownOut { 0% { transform-origin: 50% 100%; transform: scale(1, 1); } 100% { opacity: 0; transform-origin: 50% 100%; transform: scale(0, 0); } } .@{prefixClass}-tooltip { position: absolute; left: -9999px; top: -9999px; visibility: visible; .borderBox(); &-hidden { display: none; } &-placement-top { padding: @tooltip-arrow-width 0 @tooltip-distance 0; } &-inner { padding: 6px 2px; min-width: 24px; height: 24px; font-size: 12px; line-height: 1; color: @tooltip-color; text-align: center; text-decoration: none; background-color: @tooltip-bg; border-radius: @border-radius-base; box-shadow: 0 0 4px #d9d9d9; } &-arrow { position: absolute; width: 0; height: 0; border-color: transparent; border-style: solid; } &-placement-top &-arrow { bottom: @tooltip-distance - @tooltip-arrow-width; left: 50%; margin-left: -@tooltip-arrow-width; border-width: @tooltip-arrow-width @tooltip-arrow-width 0; border-top-color: @tooltip-arrow-color; } } .range-placeholder { height: 40px; padding: 15px 0; box-sizing: border-box; margin: 8px; &::after { content: ' '; display: block; width: 100%; background-color: rgba(0, 0, 0, 0.3); height: 4px; border-radius: 6px; pointer-events: none; } }