Как закрасить линию перед ползунком через css?

Ссылка скопирована
1 ответ

У меня есть type="range" ползунок на скриншоте показан он:

Как закрасить линию перед ползунком через css?

Как сделать, чтобы перед желтым ползунком линия закрашивалась в желтый, как в этом примере:

Как закрасить линию перед ползунком через css?

Пытался решить задачу через:

input[type=range]::-webkit-slider-thumb::before {     content: "";     position: absolute;     top: 50%;     left: 0;     width: 100%;     height: 2px;     background-color: #FBB03B; /* Здесь укажите желаемый цвет */     transform: translateY(-50%); }

input[type=range]::-webkit-slider-thumb::before { content: ""; position: absolute; top: 50%; left: 0; width: 100%; height: 2px; background-color: #FBB03B; /* Здесь укажите желаемый цвет */ transform: translateY(-50%); }

но не помогло, оставлю весь css код - https://codesandbox.io/s/icy-cache-4jwm4x?file=/sr...

Дополнительно:

На css такое ни сделать

  • Максим, Можно сделать. Я же показал пример
  • Даниил Секретов, выложи в песочницу свой код
  • Даниил Секретов, можно, в webkit только если не ошибаюсь, если же везде работает то извени ..
  • drtvader, Выложил https://codesandbox.io/s/icy-cache-4jwm4x?file=/sr...
  • https://css-tricks.com/sliding-nightmare-understan...
    https://nikitahl.com/style-range-input-css
  • Александр, Не помогло(
  • Даниил Секретов, там без JS'а работать не будет.
  • Даниил Секретов, градиентом через кастомные свойства css. (На js)
  • Песочница - https://codesandbox.io/s/competent-ioana-m99lhw?fi...

    import "./styles.css"; import React, { useState, useEffect, useRef } from 'react';  export default function App() {   const [value, setValue] = useState(1);   const rangeRef = useRef(null);    const handleChange = (e) => {     setValue(parseInt(e.target.value));   };    useEffect(() => {     const rangeElement = rangeRef.current;     const rangeWidth = (value / 20) * rangeElement.offsetWidth;      rangeElement.style.setProperty("--range-width", `${rangeWidth}px`);   }, [value]);    return (     <div className="App">       <input         type="range"         min="1"         max="20"         value={value}         onChange={handleChange}         ref={rangeRef}       />     </div>   ); }

    import "./styles.css"; import React, { useState, useEffect, useRef } from 'react'; export default function App() { const [value, setValue] = useState(1); const rangeRef = useRef(null); const handleChange = (e) => { setValue(parseInt(e.target.value)); }; useEffect(() => { const rangeElement = rangeRef.current; const rangeWidth = (value / 20) * rangeElement.offsetWidth; rangeElement.style.setProperty("--range-width", `${rangeWidth}px`); }, [value]); return ( <div className="App"> <input type="range" min="1" max="20" value={value} onChange={handleChange} ref={rangeRef} /> </div> ); }

    .App {   text-align: center; }  input[type="range"]::-webkit-slider-thumb {   -webkit-appearance: none;   border: none;   margin-top: -6px;   margin-left: -2px;   width: 35px;   height: 15px;    background: #fbb03b;   border-radius: 6px;    cursor: ew-resize; } input[type="range"]::before {   content: "";   position: absolute;   top: -1px;   left: -2px;   width: 0;   height: 3px;   background-color: red; /* Здесь можно изменить цвет */   transform: translateY(-50%);   transition: width 0.3s ease-in-out; /* Добавьте плавный переход */   z-index: -1; /* Добавить z-index: -1 */ }  input[type="range"]::before {   /* ... */   width: var(--range-width, 0); } input[type="range"] {   -webkit-appearance: none;   position: relative; /* Добавить position: relative */ }

    .App { text-align: center; } input[type="range"]::-webkit-slider-thumb { -webkit-appearance: none; border: none; margin-top: -6px; margin-left: -2px; width: 35px; height: 15px; background: #fbb03b; border-radius: 6px; cursor: ew-resize; } input[type="range"]::before { content: ""; position: absolute; top: -1px; left: -2px; width: 0; height: 3px; background-color: red; /* Здесь можно изменить цвет */ transform: translateY(-50%); transition: width 0.3s ease-in-out; /* Добавьте плавный переход */ z-index: -1; /* Добавить z-index: -1 */ } input[type="range"]::before { /* ... */ width: var(--range-width, 0); } input[type="range"] { -webkit-appearance: none; position: relative; /* Добавить position: relative */ }

    • В итоге надо что бы после ползунка линия серая была?

    Ответы:

    input[type=range]::-webkit-slider-thumb::before,  /* для остальных браузеров */ input[type=range]::-moz-range-progress /* для Firefox */ {  /**/ }

    input[type=range]::-webkit-slider-thumb::before, /* для остальных браузеров */ input[type=range]::-moz-range-progress /* для Firefox */ { /**/ }

    Такое же внимание уделите псевдоэлементам -webkit-slider-runnable-track и -webkit-slider-thumb, потому что FF тут умудрился выбиться из толпы.

    • Не помогло, и у меня не Firefox
    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Никита Орлов Ответ

    Чтобы закрасить линию перед ползунком через CSS, можно использовать псевдоэлемент ::before или ::after в сочетании с позиционированием и стилями. Вот пример решения для этой задачи:

    ```html

    ```

    ```css
    .slider {
    position: relative;
    }

    .range-slider {
    -webkit-appearance: none;
    width: 100%;
    height: 10px;
    background: #f1f1f1;
    outline: none;
    opacity: 0.7;
    -webkit-transition: .2s;
    transition: opacity .2s;
    }

    .range-slider::-webkit-slider-thumb {
    -webkit-appearance: none;
    appearance: none;
    width: 20px;
    height: 20px;
    background: #4CAF50;
    cursor: pointer;
    }

    .range-slider::-moz-range-thumb {
    width: 20px;
    height: 20px;
    background: #4CAF50;
    cursor: pointer;
    }

    .range-slider::before {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    width: 50%;
    height: 10px;
    background: #4CAF50;
    }
    ```

    В данном примере мы создаем слайдер с полосой перед ползунком, которая будет закрашена зеленым цветом. Псевдоэлемент ::before позволяет создать дополнительный элемент перед элементом .range-slider, который будет использоваться для закрашивания линии.

    Этот код можно доработать и настроить под ваши нужды, изменяя цвет, размер и позиционирование элементов. Надеюсь, это поможет вам решить вашу задачу по закрашиванию линии перед ползунком через CSS.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно