Skip to main content
← πŸ“„ HTML & the platformΒ·Module A3 Β· Lesson 3
TaskBuild a product form: <input name='quantity' type='number' min='1' max='99' step='1'> and <input name='price' type='number' min='0' step='0.01'>.

<input type=number>: min, max, step

75 XP6 min
Theory

Numeric inputs in HTML

<input type="number" name="age" min="13" max="120" step="1" />
<input type="number" name="price" min="0" step="0.01" />
<input type="range" name="volume" min="0" max="100" step="5" value="50" />
  • type="number" β€” text-style input with up/down spinners. Decimal allowed with step="0.01" (or any fractional step).
  • type="range" β€” a slider. No text typing. Good for "set volume" / "pick a year between 1900-2026."

Pydantic parallel

class SignupForm(BaseModel):
    age: int = Field(ge=13, le=120)   # >= 13, <= 120
    price: Decimal = Field(ge=0)

Your HTML min="13" max="120" mirrors the Pydantic ge=13 le=120. Same validation, two layers: browser blocks bad input, backend re-validates. Never trust browser-only β€” XSS can submit anything.

Negative numbers

min="-100" works. step="any" allows arbitrary precision.

Why not type="text" + pattern="\d+"?

You could. But type="number" gives you:

  1. Number-pad keyboard on mobile (matters more than you think).
  2. Up/down arrow spinners on desktop.
  3. Native validation tooltip in the user's language.

type="text" would give you none of these.

πŸ”’

Sign up to start coding

Theory is open to everyone. The interactive editor, live preview, and check are unlocked with a 7-day free trial β€” card required, cancel anytime.

Sign up β€” free trial β†’

First 10 lessons in each track are free. No card needed for those.

← PreviousNext lesson β†’

Get one Python or web tip a day β€” by email

Short, hand-written, no spam. Unsubscribe in one click.