Moderní tvorba webových aplikací

O webu

Stylování <input type=number>

Jak stylovat <input> pro zadávání čísel.

7 minut

Číselné inputy (<input type="number">) mají v prohlížečích vestavěné šipky pro zvyšování a snižování hodnoty. Tyto šipky se často nehodí do designu a je potřeba je odstranit nebo upravit.

Zobrazení v Chrome:

Input v Chrome

Zobrazení v Safari:

Input v Safari

V jiných prohlížečích a operačních systémech mohou vypadat jinak. Třeba v mobilech s iOS nejsou vůbec.

Bohužel tyto šipky nejdou spolehlivě a napříč prohlížeči stylovat.

Co s tím?

  1. Vykašlat se na to. Smířit se s tím, že vzhled a chování nebude konsistentní.
  2. Zrušit tyto šipky úplně.
  3. Vytvořit si vlastní ovládací tlačítka

Odstranění tlačítek

Pro kompletní odstranění šipek:

input[type=number]::-webkit-inner-spin-button, 
input[type=number]::-webkit-outer-spin-button { 
    appearance: none;
}
input[type=number] {
  -moz-appearance: textfield;
}

Tento kód funguje ve všech prohlížečích založených na WebKitu (Chrome, Safari, Edge). Druhá část je potom pro Firefox.

Vlastní stylování tlačítek

Protože výchozí tlačítka stylovat nejdou, jediné řešení je si vytvořit vlastní tlačítka a JavaScriptem jim dodat požadované chování.

Díky použití JS je chování plně pod kontrolou. Je potom k úvaze, jestli rovnou i neupravit logiku +/− tlačítek.

Výchozí šipky v prohlížečích zvětšují/zmenšují číslo dle atributu step. To se často vůbec nehodí, protože může být žádoucí umožnit skákat třeba o 1, ale zároveň umožnit zadat do pole 0,1step="1" tomu zabrání.

Praktické příklady

Kromě spinner tlačítek je možné políčko stylovat standardně jako jakýkoliv textový <input>.

Je tu ještě trochu záludnost s různou šířkou dle min/max atributů.

Minimalistický design

Moderní design s gradientem

Omezení a validace

Číselné inputy podporují několik atributů pro omezení hodnot:

<input type="number" min="0" max="100" step="1" value="50">
  • min – minimální hodnota
  • max – maximální hodnota
  • step – krok pro šipky (1 pro celá čísla, 0.1 pro desetinná)
  • value – výchozí hodnota

Stylování podle validace

CSS poskytuje pseudo-třídy :valid a :invalid pro stylování <input>ů podle toho, jestli jsou (ne)validní:

Zadejte číslo mimo rozsah 1–100 pro vidění invalidního stylu

Responsivní design

Pro mobilní zařízení je dobré dodržet, aby velikost textu byla alespoň 16 pixelů, což předejde tomu, aby se po kliknutí do políčka na mobilech zoomovala stránka.

Závěr

Stylovat tlačítka pro změnu stepu políčka prakticky nejde. Je třeba zvážit dle situace, jestli se vyplatí dělat vlastní JS řešení, smířit se s nekonsistencí nebo je úplně schovat.

Související články

Různá šířka <input type=number> s min/max

Proč má <input type=number> různou výchozí šířku v závislosti na min/max atributech.

3 minuty

Jak používat CSS stav :focus

Proč je důležité stylovat stav :focus. Jak toho automaticky docílit a jaké jsou s tím problémy.

12 minut

Before a after u <input>u

Funguje, nebo nefunguje použití :before a :after u <input>ů?

3 minuty

CSS selektory :valid a :invalid

CSS selektory :valid a :invalid umí rozpoznat správně nebo špatně vyplněné formulářové políčko.

3 minuty

Web jecas.cz píše Bohumil Jahoda, kontakt
Seznam všech článků
2013–2025