<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Как убрать стрелки у input type=number: простые CSS решения]]></title><description><![CDATA[<p dir="auto">Когда создаёшь форму с числовыми полями, стандартные стрелки увеличения и уменьшения значения в <code>input type="number"</code> часто выглядят неуместно. Они занимают место, нарушают дизайн и не всегда соответствуют стилю интерфейса. К счастью, избавиться от них проще, чем кажется.</p>
<p dir="auto">В этой статье разберёмся, как убрать эти стрелки с помощью CSS, какие подводные камни могут возникнуть и как реализовать собственные кнопки управления значением, если нужно.</p>
<h2>Быстрый способ: стандартный CSS</h2>
<p dir="auto">Проще всего просто скрыть стрелки через несколько строк CSS. Браузеры используют разные механизмы для отображения этих элементов, поэтому нужно учитывать особенности каждого. <strong>WebKit-браузеры</strong> (Chrome, Safari, Opera) показывают стрелки через псевдоэлементы, которые можно целить с помощью селекторов <code>::-webkit-outer-spin-button</code> и <code>::-webkit-inner-spin-button</code>. <strong>Firefox</strong> применяет свой подход, используя свойство <code>-moz-appearance</code>.</p>
<p dir="auto">Чтобы скрыть стрелки во всех браузерах одновременно, нужно комбинировать оба подхода. Это гарантирует, что независимо от того, какой браузер использует посетитель, результат будет одинаковым.</p>
<pre><code class="language-css">input[type="number"] {
  -moz-appearance: textfield;
  -webkit-appearance: textfield;
  appearance: textfield;
}

input[type="number"]::-webkit-outer-spin-button,
input[type="number"]::-webkit-inner-spin-button {
  -webkit-appearance: none;
  margin: 0;
}
</code></pre>
<p dir="auto">Этот код работает следующим образом:</p>
<ul>
<li><code>-moz-appearance: textfield</code> трансформирует поле в обычное текстовое поле для Firefox</li>
<li><code>-webkit-appearance: none</code> скрывает стрелки в WebKit-браузерах</li>
<li><code>margin: 0</code> убирает лишние отступы, которые могут остаться после удаления стрелок</li>
</ul>
<h2>Контроль видимости: когда стрелки видны только при фокусировке</h2>
<p dir="auto">По умолчанию браузеры поступают хитро: они скрывают стрелки, пока поле неактивно, и показывают их только при клике или табуляции на поле. Это сделано для сбережения места на экране, но иногда нужно сделать стрелки <strong>всегда видимыми</strong> или, наоборот, полностью скрыть возможность управления через них.</p>
<p dir="auto">Если хочешь, чтобы стрелки всегда были доступны пользователю, используй свойство <code>opacity</code>. Установи его в значение <code>1</code>, и стрелки станут постоянно видны:</p>
<pre><code class="language-css">input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
  opacity: 1;
}
</code></pre>
<p dir="auto">Это полезно, когда стрелки - важная часть интерфейса и должны быть всегда под рукой пользователя. Однако <strong>важный момент</strong>: с помощью CSS невозможно стилизировать сами стрелки (изменить цвет, размер, форму). Браузеры просто не предоставляют такого доступа. Если нужен полный контроль над внешним видом, придётся скрывать стандартные стрелки и создавать собственные кнопки.</p>
<h2>Собственные кнопки управления значением</h2>
<p dir="auto">Когда стандартные стрелки не подходят ни по стилю, ни по функциональности, лучший вариант - создать свои. HTML5 предоставляет методы <code>stepUp()</code> и <code>stepDown()</code>, которые программно изменяют значение поля. Их можно привязать к любым кнопкам.</p>
<p dir="auto">Сначала скрываем стандартные стрелки CSS, а затем создаём структуру с собственными кнопками:</p>
<pre><code class="language-html">&lt;div class="number-input"&gt;
  &lt;button class="number-minus" type="button"&gt;-&lt;/button&gt;
  &lt;input type="number" min="0" value="1" readonly&gt;
  &lt;button class="number-plus" type="button"&gt;+&lt;/button&gt;
&lt;/div&gt;
</code></pre>
<pre><code class="language-css">input[type="number"] {
  -moz-appearance: textfield;
  -webkit-appearance: textfield;
  appearance: textfield;
}

input[type="number"]::-webkit-outer-spin-button,
input[type="number"]::-webkit-inner-spin-button {
  -webkit-appearance: none;
  margin: 0;
}

.number-input {
  display: flex;
  align-items: center;
  gap: 10px;
}

.number-minus, .number-plus {
  padding: 5px 10px;
  cursor: pointer;
  border: 1px solid #ccc;
  background: #f5f5f5;
}
</code></pre>
<pre><code class="language-javascript">document.addEventListener('DOMContentLoaded', function() {
  var arrowUp = document.querySelector('.number-plus');
  var arrowDown = document.querySelector('.number-minus');
  var input = document.querySelector('input[type="number"]');

  arrowUp.addEventListener('click', function() {
    input.stepUp();
  });

  arrowDown.addEventListener('click', function() {
    input.stepDown();
  });
});
</code></pre>
<p dir="auto">Этот подход даёт <strong>полную свободу в дизайне</strong>. Ты можешь:</p>
<ul>
<li>Использовать иконки вместо текста</li>
<li>Применить любые стили (цвет, размер, шрифт)</li>
<li>Добавить анимации и эффекты при клике</li>
<li>Управлять шагом изменения через атрибут <code>step</code></li>
<li>Отключать кнопки при достижении минимума или максимума</li>
</ul>
<h2>Блокировка скролла и клавиш</h2>
<p dir="auto">Если убрал стрелки, но забудешь про скролл колёсика мыши и клавиши стрелок на клавиатуре, пользователь всё равно сможет менять значение. В некоторых случаях это нежелательно - например, если поле только для отображения информации. Вот как это блокировать:</p>
<pre><code class="language-javascript">var input = document.querySelector('input[type="number"]');

// Блокируем скролл
input.addEventListener('wheel', function(e) {
  e.preventDefault();
});

// Блокируем клавиши стрелок (38 - вверх, 40 - вниз)
input.addEventListener('keydown', function(e) {
  if (e.keyCode === 38 || e.keyCode === 40) {
    e.preventDefault();
  }
});

// Восстанавливаем скролл при клике мышью вне поля
document.addEventListener('wheel', function(e) {
  // Скролл работает везде кроме focused input
});
</code></pre>
<p dir="auto">Важно помнить: полная блокировка взаимодействия может вызвать раздражение у пользователей. <strong>Лучше всегда предоставлять альтернативные способы ввода</strong> - либо через кастомные кнопки, либо позволяя печатать значения прямо в поле.</p>
<h2>Сравнение подходов</h2>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Подход</th>
<th>Плюсы</th>
<th>Минусы</th>
<th>Когда использовать</th>
</tr>
</thead>
<tbody>
<tr>
<td>Скрытие стрелок CSS</td>
<td>Просто, кроссбраузерно, минимум кода</td>
<td>Нет контроля над стилем стрелок</td>
<td>Когда стрелки просто мешают дизайну</td>
</tr>
<tr>
<td>Собственные кнопки</td>
<td>Полный контроль над внешним видом и поведением</td>
<td>Нужен JavaScript, больше кода</td>
<td>Когда нужен кастомный дизайн или особая логика</td>
</tr>
<tr>
<td>Блокировка скролла</td>
<td>Защита от случайных изменений</td>
<td>Может затруднить доступность</td>
<td>Для критичных полей ввода</td>
</tr>
<tr>
<td>Скрытие + readonly</td>
<td>Полная защита значения</td>
<td>Пользователь не может ничего менять</td>
<td>Для поля, только для чтения</td>
</tr>
</tbody>
</table>
<h2>Особенности в разных браузерах</h2>
<p dir="auto">Хотя CSS решение работает в большинстве браузеров, есть несколько нюансов. <strong>Chrome, Edge и Opera</strong> хорошо поддерживают оба подхода - и скрытие стрелок, и кастомные кнопки. <strong>Safari</strong> обычно ведёт себя как Chrome, но иногда может игнорировать некоторые стили. <strong>Firefox</strong> требует именно свойства <code>-moz-appearance: textfield</code>, чтобы трансформировать поле. <strong>Internet Explorer 11</strong> вообще не поддерживает <code>input type="number"</code> в полной мере, поэтому там можно использовать graceful degradation.</p>
<p dir="auto">Если тестируешь в нескольких браузерах и видишь, что стрелки не скрываются, проверь:</p>
<ul>
<li>Правильность селектора (должно быть <code>input[type="number"]</code>, а не просто <code>input</code>)</li>
<li>Наличие обоих вариантов CSS (для Firefox и WebKit)</li>
<li>Что стили не переопределяются где-нибудь ещё в коде</li>
<li>Кэш браузера (иногда помогает очистка)</li>
</ul>
<h2>Итоговое решение для большинства случаев</h2>
<p dir="auto">Для быстрого внедрения в проект используй этот набор CSS и JavaScript. Он охватывает основные сценарии и работает предсказуемо:</p>
<pre><code class="language-css">/* Скрываем стрелки */
input[type="number"] {
  -moz-appearance: textfield;
}

input[type="number"]::-webkit-outer-spin-button,
input[type="number"]::-webkit-inner-spin-button {
  -webkit-appearance: none;
  margin: 0;
}

/* Опционально: убираем скролл */
input[type="number"] {
  margin: 0;
  padding: 8px;
  border: 1px solid #ddd;
  border-radius: 4px;
}
</code></pre>
<pre><code class="language-javascript">// Блокируем скролл (опционально)
document.querySelectorAll('input[type="number"]').forEach(input =&gt; {
  input.addEventListener('wheel', e =&gt; e.preventDefault());
});
</code></pre>
<p dir="auto">Этот код минималистичен, но эффективен. Если позже понадобится больший контроль - например, изменить цвета или добавить уникальное поведение - просто расширь его с учётом описанных выше методов. Помни, что доступность всегда важнее красивого дизайна, поэтому если убираешь стандартные элементы управления, предоставь альтернативные способы взаимодействия.</p>
<h2>Что стоит помнить при реализации</h2>
<p dir="auto">Убирая стрелки, легко забыть о важных деталях. Во-первых, <strong>всегда проверяй на мобильных устройствах</strong> - там поведение может быть другим. На мобилках часто появляется цифровая клавиатура вместо стрелок, и твои CSS решения это не изменят. Во-вторых, <strong>обрати внимание на доступность</strong> - если убираешь встроенные элементы управления, убедись, что пользователь с экранными читателями может понять, как вводить значение. В-третьих, <strong>не забывай про валидацию</strong> - <code>input type="number"</code> автоматически проверяет, что это число, но если добавляешь кастомные кнопки, проверь, что они тоже соблюдают ограничения <code>min</code> и <code>max</code>. Наконец, <strong>тестируй в разных браузерах и версиях</strong> - даже популярные браузеры иногда по-разному интерпретируют один и тот же CSS.</p>
]]></description><link>https://forum.exlends.ru/topic/800/kak-ubrat-strelki-u-input-type-number-prostye-css-resheniya</link><generator>RSS for Node</generator><lastBuildDate>Sat, 17 Oct 2026 03:12:20 GMT</lastBuildDate><atom:link href="https://forum.exlends.ru/topic/800.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 26 Feb 2026 16:44:58 GMT</pubDate><ttl>60</ttl></channel></rss>