Есть ли способ сделать так, чтобы ползунок слидера выступал за пределы, не позволяя его тени выйти за пределы?

Вопрос или проблема

Я работаю над настройкой ползунков для сайта, который я создаю. Единственный способ, который я знаю, чтобы добавить другой цвет для обеих сторон ползунка, это добавить тень к бегунку и затем скрыть переполнение. Однако я хотел сделать бегунок больше, чем полоса, но я не могу этого сделать, не отключив переполнение, что позволит тени выйти за пределы коробки.

Я пытался отключить переполнение только для бегунка и включить переполнение только для тени, но ни один из вариантов не сработал. Ниже приведен мой код.

HTML:

<div class="slider">
    <input type="range" class="customRange" id="rangeInput1" name="rangeInput1" min="0" max="100" value="50"
    oninput="amount1.value=rangeInput1.value">
    <output id="amount1" name="amount1" for="rangeInput1">50</output>

CSS:

.customRange {
  -webkit-appearance: none;
  background-color: #F998F6;
  height: 20px;
  overflow: hidden;
  width: 400px;
  border-radius: 50px;
}

.customRange::-webkit-slider-thumb {
  -webkit-appearance: none;
  background: #92008D;
  border-radius: 50%;
  box-shadow: -210px 0 0 200px #DD00D6;
  cursor: pointer;
  height: 20px;
  width: 20px;
  border: 0;
}

Возможно, существует другой способ добавить два разных цвета для разных сторон, потому что тогда я мог бы включить переполнение, но у меня просто нет идей.

Вы можете сделать это с помощью небольшого JavaScript. Для этого вам нужно удалить метод тени, а также использовать градиенты, чтобы заполнить разные части полосы прокрутки. Вы можете добавить градиент в ваш CSS следующим образом:

<style>
        .customRange {
        -webkit-appearance: none;
        width: 400px;
        height: 20px;
        border-radius: 50px;
        background: linear-gradient(to right, #DD00D6 50%, #F998F6 50%); 
        outline: none;
        transition: background 0.3s;
        }

        .customRange::-webkit-slider-thumb {
        -webkit-appearance: none;
        background-color: #92008D;
        border-radius: 50%;
        height: 30px; 
        width: 30px;
        cursor: pointer;
        position: relative;
        top: 50%;
        transform: translateY(-50%);
        }

        .customRange::-webkit-slider-runnable-track {
        -webkit-appearance: none;
        height: 20px;
        background: transparent;
        }

        .customRange::-moz-range-track {
        background: transparent;
        }

        .customRange::-ms-track {
        background: transparent;
        border-color: transparent;
        color: transparent;
        }

        .customRange:active {
        background: linear-gradient(to right, #DD00D6 var(--value), #F998F6 var(--value));
        }

    </style>

и после добавления этих стилей вам нужно добавить функцию JScript, которая изменяет градиент фона по мере перемещения ползунка.

<script>
        const rangeInput = document.getElementById("rangeInput1");
        const updateBackground = () => {
        const value = rangeInput.value;
        rangeInput.style.background = `linear-gradient(to right, #DD00D6 ${value}%, #F998F6 ${value}%)`;
        };

        rangeInput.addEventListener('input', updateBackground);
    </script>

Таким образом, вы можете изменить размер бегунка, не имея дело с переполнением.

.

Ответ или решение

Чтобы создать настраиваемый ползунок с увеличенным размером его "thumb" (ползунок), который при этом не будет перекрывать тени, необходимо использовать градиентный фон вместо теней. Это решение позволяет избежать проблем с переполнением и одновременно добиться желаемого визуального эффекта. Рассмотрим данный подход более подробно.

Шаг 1: Основная разметка HTML

Ваша HTML-разметка выглядит правильно. Вы создаете элемент input типа "range" и output для отображения значения:

<div class="slider">
    <input type="range" class="customRange" id="rangeInput1" name="rangeInput1" min="0" max="100" value="50" oninput="amount1.value=rangeInput1.value">
    <output id="amount1" name="amount1" for="rangeInput1">50</output>
</div>

Шаг 2: Стилизация CSS

Измените ваш CSS-код, чтобы использовать градиенты и адаптировать размеры ползунка. Вот пример, который можно использовать:

.customRange {
  -webkit-appearance: none; /* Убираем стандартный вид */
  width: 400px;
  height: 20px;
  border-radius: 50px;
  background: linear-gradient(to right, #DD00D6 50%, #F998F6 50%); 
  outline: none;
  transition: background 0.3s;
}

.customRange::-webkit-slider-thumb {
  -webkit-appearance: none; /* Убираем стандартный вид */
  background-color: #92008D;
  border-radius: 50%; /* Для создания округлой формы */
  height: 30px; /* Увеличение высоты ползунка */
  width: 30px; /* Увеличение ширины ползунка */
  cursor: pointer;
  position: relative; /* Позиционирование относительно текущего положения */
  top: 50%;
  transform: translateY(-50%); /* Центрируем вертикально */
}

.customRange::-webkit-slider-runnable-track {
  -webkit-appearance: none; /* Убираем стандартный вид */
  height: 20px; 
  background: transparent; /* Делаем трек прозрачным, чтобы видеть градиент */
}

.customRange:active {
  background: linear-gradient(to right, #DD00D6 var(--value), #F998F6 var(--value)); /* Динамическое изменение градиента */
}

Шаг 3: Скрипт на JavaScript

Теперь необходимо добавить JavaScript-код для динамического обновления фона ползунка в зависимости от его значения. Это позволит обновлять градиент фона при изменении значения:

const rangeInput = document.getElementById("rangeInput1");
const updateBackground = () => {
  const value = rangeInput.value;
  rangeInput.style.background = `linear-gradient(to right, #DD00D6 ${value}%, #F998F6 ${value}%)`;
};

// Инициализация фона сразу
updateBackground();

// Добавляем обработчик события на изменение значения ползунка
rangeInput.addEventListener('input', updateBackground);

Заключение

Таким образом, вместо использования тени, мы применяем линейный градиент, который позволяет визуально разделять разные стороны ползунка. Увеличение размерности "thumb" больше ширины трека не пойдет вразрез с выходом за пределы, поскольку градиент сам по себе изменяет цвет в зависимости от текущего положения ползунка.

Этот подход не только решает проблему с переполнением, но и делает интерфейс более привлекательным и современным. Вы можете экспериментировать с цветами, размерами и другими стилями, чтобы добиться желаемого эффекта для вашего сайта.

Оцените материал
Добавить комментарий

Капча загружается...