Как стилизовать стрелки для input[type=number]

12.10.2017

Добавим красивые стрелки для увеличения/уменьшения числа в инпуте, например, изменение количества товаров в корзине или что-то на подобие того.

Для начала уберем стандартные стрелки. «Кстати, красивые стрелки» — это я погорячился, суть задачи в том, чтобы просто сделать какие-то отдельные от инпута стрелки, а красивыми их уже сможет сделать каждый сам себе с учетом своего видения красивого.

CSS-стили для input[type=number]

/* Для Chrome */
input[type=number]::-webkit-inner-spin-button, 
input[type=number]::-webkit-outer-spin-button { 
    -webkit-appearance: none;
    -moz-appearance: none;
    appearance: none;
    margin: 0; 
}
/* Для Firefox */
input[type=number]{
  -moz-appearance: textfield;
}

Такой примитивный HTML-код (это упрощенный код из магазина на WooCommerce)

<div class="quantity-block">
  <button class="quantity-arrow-minus"> - </button>
  <input class="quantity-num" type="number" value="1" />
  <button class="quantity-arrow-plus"> + </button>
</div>

Такой примитивный JS-Скрипт с использованием jQuery:

Не забываем подключить jQuery

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

Скрипт:

$(function() {

  (function quantityProducts() {
    var $quantityArrowMinus = $(".quantity-arrow-minus");
    var $quantityArrowPlus = $(".quantity-arrow-plus");
    var $quantityNum = $(".quantity-num");

    $quantityArrowMinus.click(quantityMinus);
    $quantityArrowPlus.click(quantityPlus);

    function quantityMinus() {
      if ($quantityNum.val() > 1) {
        $quantityNum.val(+$quantityNum.val() - 1);
      }
    }

    function quantityPlus() {
      $quantityNum.val(+$quantityNum.val() + 1);
    }
  })();

});

Рабочий пример на CodePen:

See the Pen customize input[type=number] with js by Denis (@deniscreative) on CodePen.0

Полезная инфа:

Комментарии (3) к “Как стилизовать стрелки для input[type=number]”

  • Дмитрий

    Дружище! От души! Сделал по твоему шаблону ! Все работает! Только я так понял вот эта кракозября — find(".qty"); скорее всего поиск инпута ?))

    Ответить
    • Denis Creative

      Все верно, я упрощал код, и забыл добавить этот класс к инпуту, сейчас обновил код в статье, теперь у инпута класс .quantity-num, и этот же класс используется в скрипте.

      Ответить
    • Denis Creative

      Я поменял код в скрипте, так что аккуратно.

      Ответить

Оставить комментарий