UNPKG

svelte-range-slider-pips

Version:

Multi-Thumb, Accessible, Beautiful Range Slider with Pips

378 lines (317 loc) 7.7 kB
/* * RangeSlider */ .rangeSlider { --slider: var(--range-slider, #d7dada); --handle-inactive: var(--range-handle-inactive, #99a2a2); --handle: var(--range-handle, #838de7); --handle-focus: var(--range-handle-focus, #4a40d4); --handle-border: var(--range-handle-border, var(--handle)); --range-inactive: var(--range-range-inactive, var(--handle-inactive)); --range: var(--range-range, var(--handle-focus)); --range-limit: var(--range-range-limit, #99a2a280); --float-inactive: var(--range-float-inactive, var(--handle-inactive)); --float: var(--range-float, var(--handle-focus)); --float-text: var(--range-float-text, white); } .rangeSlider { position: relative; border-radius: 100px; height: 0.5em; margin: 1em; transition: opacity 0.2s ease; user-select: none; } .rangeSlider * { user-select: none; } .rangeSlider.pips { margin-bottom: 1.8em; } .rangeSlider.pip-labels { margin-bottom: 2.8em; } .rangeSlider.vertical { display: inline-block; border-radius: 100px; width: 0.5em; min-height: 200px; } .rangeSlider.vertical.pips { margin-right: 1.8em; margin-bottom: 1em; } .rangeSlider.vertical.pip-labels { margin-right: 2.8em; margin-bottom: 1em; } .rangeSlider .rangeHandle { position: absolute; display: block; height: 1.4em; width: 1.4em; top: 0.25em; bottom: auto; transform: translateY(-50%) translateX(-50%); z-index: 2; } .rangeSlider.reversed .rangeHandle { transform: translateY(-50%) translateX(50%); } .rangeSlider.vertical .rangeHandle { left: 0.25em; top: auto; transform: translateY(50%) translateX(-50%); } .rangeSlider.vertical.reversed .rangeHandle { transform: translateY(-50%) translateX(-50%); } .rangeSlider .rangeNub, .rangeSlider .rangeHandle:before { position: absolute; left: 0; top: 0; display: block; border-radius: 10em; height: 100%; width: 100%; transition: box-shadow 0.2s ease; } .rangeSlider .rangeHandle:before { content: ''; left: 1px; top: 1px; bottom: 1px; right: 1px; height: auto; width: auto; box-shadow: 0 0 0 0px var(--handle-border); opacity: 0; } .rangeSlider.hoverable:not(.disabled) .rangeHandle:hover:before { box-shadow: 0 0 0 8px var(--handle-border); opacity: 0.2; } .rangeSlider.hoverable:not(.disabled) .rangeHandle.press:before, .rangeSlider.hoverable:not(.disabled) .rangeHandle.press:hover:before { box-shadow: 0 0 0 12px var(--handle-border); opacity: 0.4; } .rangeSlider.range:not(.min):not(.max) .rangeNub { border-radius: 10em 10em 10em 1.6em; } .rangeSlider.range .rangeHandle:nth-of-type(1) .rangeNub { transform: rotate(-135deg); } .rangeSlider.range .rangeHandle:nth-of-type(2) .rangeNub { transform: rotate(45deg); } .rangeSlider.range.reversed .rangeHandle:nth-of-type(1) .rangeNub { transform: rotate(45deg); } .rangeSlider.range.reversed .rangeHandle:nth-of-type(2) .rangeNub { transform: rotate(-135deg); } .rangeSlider.range.vertical .rangeHandle:nth-of-type(1) .rangeNub { transform: rotate(135deg); } .rangeSlider.range.vertical .rangeHandle:nth-of-type(2) .rangeNub { transform: rotate(-45deg); } .rangeSlider.range.vertical.reversed .rangeHandle:nth-of-type(1) .rangeNub { transform: rotate(-45deg); } .rangeSlider.range.vertical.reversed .rangeHandle:nth-of-type(2) .rangeNub { transform: rotate(135deg); } .rangeSlider .rangeFloat { display: block; position: absolute; left: 50%; top: -0.5em; transform: translate(-50%, -100%); font-size: 1em; text-align: center; opacity: 0; pointer-events: none; white-space: nowrap; transition: all 0.2s ease; font-size: 0.9em; padding: 0.2em 0.4em; border-radius: 0.2em; } .rangeSlider .rangeHandle.active .rangeFloat, .rangeSlider.hoverable .rangeHandle:hover .rangeFloat { opacity: 1; top: -0.2em; transform: translate(-50%, -100%); } .rangeSlider .rangeBar, .rangeSlider .rangeLimit { position: absolute; display: block; transition: background 0.2s ease; border-radius: 1em; height: 0.5em; top: 0; user-select: none; z-index: 1; } .rangeSlider.vertical .rangeBar, .rangeSlider.vertical .rangeLimit { width: 0.5em; height: auto; } .rangeSlider { background-color: #d7dada; background-color: var(--slider); } .rangeSlider .rangeBar { background-color: #99a2a2; background-color: var(--range-inactive); } .rangeSlider.focus .rangeBar { background-color: #838de7; background-color: var(--range); } .rangeSlider .rangeLimit { background-color: #99a2a280; background-color: var(--range-limit); } .rangeSlider .rangeNub { background-color: #99a2a2; background-color: var(--handle-inactive); } .rangeSlider.focus .rangeNub { background-color: #838de7; background-color: var(--handle); } .rangeSlider .rangeHandle.active .rangeNub { background-color: #4a40d4; background-color: var(--handle-focus); } .rangeSlider .rangeFloat { color: white; color: var(--float-text); background-color: #99a2a2; background-color: var(--float-inactive); } .rangeSlider.focus .rangeFloat { background-color: #4a40d4; background-color: var(--float); } .rangeSlider.disabled { opacity: 0.5; } .rangeSlider.disabled .rangeNub { background-color: #d7dada; background-color: var(--slider); } /** * RangePips */ .rangeSlider { --pip: var(--range-pip, lightslategray); --pip-text: var(--range-pip-text, var(--pip)); --pip-active: var(--range-pip-active, darkslategrey); --pip-active-text: var(--range-pip-active-text, var(--pip-active)); --pip-hover: var(--range-pip-hover, darkslategrey); --pip-hover-text: var(--range-pip-hover-text, var(--pip-hover)); --pip-in-range: var(--range-pip-in-range, var(--pip-active)); --pip-in-range-text: var(--range-pip-in-range-text, var(--pip-active-text)); } .rangePips { position: absolute; height: 1em; left: 0; right: 0; bottom: -1em; font-variant-numeric: tabular-nums; } .rangePips.vertical { height: auto; width: 1em; left: 100%; right: auto; top: 0; bottom: 0; } .rangePips .pip { height: 0.4em; position: absolute; top: 0.25em; width: 1px; white-space: nowrap; } .rangePips.vertical .pip { height: 1px; width: 0.4em; left: 0.25em; top: auto; bottom: auto; } .rangePips .pipVal { position: absolute; top: 0.4em; transform: translate(-50%, 25%); } .rangePips.vertical .pipVal { position: absolute; top: 0; left: 0.4em; transform: translate(25%, -50%); } .rangePips .pip { transition: all 0.15s ease; } .rangePips .pipVal { transition: all 0.15s ease, font-weight 0s linear; } .rangePips .pip { color: lightslategray; color: var(--pip-text); background-color: lightslategray; background-color: var(--pip); } .rangePips .pip.selected { color: darkslategrey; color: var(--pip-active-text); background-color: darkslategrey; background-color: var(--pip-active); } .rangePips.hoverable:not(.disabled) .pip:hover { color: darkslategrey; color: var(--pip-hover-text); background-color: darkslategrey; background-color: var(--pip-hover); } .rangePips .pip.in-range { color: darkslategrey; color: var(--pip-in-range-text); background-color: darkslategrey; background-color: var(--pip-in-range); } .rangePips .pip.selected { height: 0.75em; } .rangePips.vertical .pip.selected { height: 1px; width: 0.75em; } .rangePips .pip.selected .pipVal { font-weight: bold; top: 0.75em; } .rangePips.vertical .pip.selected .pipVal { top: 0; left: 0.75em; } .rangePips.hoverable:not(.disabled) .pip:not(.selected):hover { transition: none; } .rangePips.hoverable:not(.disabled) .pip:not(.selected):hover .pipVal { transition: none; font-weight: bold; }