<input>
Pole formularza: tekst, e-mail, hasło, liczba, data, suwak, pole wyboru, plik i wiele innych.
- Wyświetlanie
- inline-block
- Znacznik zamykający
- Brak, element pusty
- Dozwolona zawartość
- Brak, element pusty
Przykład
#<style>
.fields { display: grid; grid-template-columns: repeat(auto-fill, minmax(210px, 1fr)); gap: 12px; }
.fields label { display: grid; gap: 4px; }
.fields .inline { display: flex; align-items: center; gap: 6px; }
.fields fieldset { border: 0; margin: 0; padding: 0; }
.fields legend { padding: 0; margin-bottom: 4px; }
</style>
<form class="fields">
<label>Imię <input type="text" name="name" placeholder="np. Ania"></label>
<label>E-mail <input type="email" name="email" placeholder="ania@example.com"></label>
<label>Hasło <input type="password" name="password"></label>
<label>Wiek <input type="number" name="age" min="7" max="99" value="16"></label>
<label>Minuty nauki dziennie <input type="range" name="minutes" min="10" max="120" step="10" value="30"></label>
<label>Start kursu <input type="date" name="start"></label>
<label>Kolor motywu <input type="color" name="accent" value="#8b5cf6"></label>
<label>Szukaj kursu <input type="search" name="q" placeholder="HTML, CSS…"></label>
<label>Zdjęcie profilowe <input type="file" name="avatar" accept="image/*"></label>
<label class="inline"><input type="checkbox" name="newsletter" checked> Chcę dostawać newsletter</label>
<fieldset>
<legend>Poziom</legend>
<label class="inline"><input type="radio" name="level" value="beginner" checked> Początkujący</label>
<label class="inline"><input type="radio" name="level" value="advanced"> Zaawansowany</label>
</fieldset>
</form>Definicja i zastosowanie
#Element <input> to najbardziej wszechstronny element formularzy. Jego wygląd i działanie zależą od atrybutu type: to samo <input> może być polem tekstowym, polem hasła, suwakiem, próbnikiem kolorów, polem wyboru albo przyciskiem do wgrywania plików. Jest elementem pustym, więc nie ma znacznika zamykającego.
Dobrze dobrany typ to realna wygoda. Na telefonie type="email" pokazuje klawiaturę ze znakiem @, type="tel" klawiaturę numeryczną, a type="date" natywny kalendarz. Przeglądarka sama sprawdza też format: pole e-mail nie przepuści adresu bez @, a pole liczbowe odrzuci wartość spoza zakresu min i max.
Każde pole potrzebuje etykiety <label>, bo tekst z atrybutu placeholder znika, gdy tylko zaczniesz pisać, i nie zastępuje etykiety. Aby wartość pola trafiła na serwer, pole musi mieć atrybut name.
Składnia
#<input type="text" name="nazwa">Atrybuty
#text | email | password | number | range | date | time | datetime-local | month | week | color | checkbox | radio | file | search | tel | url | hidden | submit | reset | button | image
Rodzaj pola, domyślnietext. Od typu zależą wygląd, klawiatura na telefonie i reguły walidacji. Polehiddenjest niewidoczne i przechowuje wartość wysyłaną razem z formularzem. Typ, którego przeglądarka nie obsługuje, zamienia się w zwykłe pole tekstowe. Dotyczy to na przykładmonthiweek, które nie działają we wszystkich przeglądarkach.tekst
Nazwa, pod którą wartość pola trafi na serwer, na przykłademail=ania@example.com. Pola beznamenie są wysyłane. Przyciski radiowe z tą samą nazwą tworzą grupę, w której można zaznaczyć tylko jedną opcję.tekst
Wartość początkowa pola. W polach tekstowych to tekst wpisany na starcie, w polach wyboru i przyciskach radiowych wartość wysyłana po zaznaczeniu, a w przyciskachsubmitibuttonnapis na przycisku.tekst
Podpowiedź widoczna w pustym polu, najlepiej przykładowy format danych. Znika, gdy użytkownik zacznie pisać, dlatego nigdy nie zastępuje etykiety<label>.atrybut logiczny
Pole musi zostać wypełnione (albo zaznaczone), zanim formularz się wyśle. Przy próbie wysłania pustego pola przeglądarka pokaże komunikat i ustawi w nim kursor. Pole spełniające reguły pasuje do selektora:valid, a błędne do:invalid.atrybut logiczny
Wyłącza pole: nie da się go kliknąć, wybrać klawiszem Tab ani edytować, a jego wartość nie zostanie wysłana z formularzem. Przeglądarka zwykle wyszarza takie pole.atrybut logiczny
Pole tylko do odczytu: można je zaznaczyć, skopiować z niego tekst i przejść do niego klawiszem Tab, ale nie da się zmienić wartości. W przeciwieństwie dodisabledwartość zostanie wysłana. Działa w polach tekstowych, liczbowych i z datami, ale nie w polach wyboru, przyciskach radiowych, suwakach ani polach koloru.atrybut logiczny
Zaznacza pole wyboru (checkbox) albo przycisk radiowy (radio) na starcie. W grupie przycisków radiowych o tej samej nazwiecheckedpowinien mieć najwyżej jeden.liczba, data lub godzina
Wyznaczają zakres i krok wartości w polachnumber,range,date,timei pokrewnych.step="50"pozwala wybierać tylko wartości co 50 (0, 50, 100 i tak dalej), astep="any"wyłącza ograniczenie kroku. Strzałki i suwak trzymają się tych granic, a wartość spoza zakresu nie przejdzie walidacji.liczba znaków
Najmniejsza i największa dozwolona liczba znaków w polu tekstowym.maxlengthpo prostu nie pozwala wpisać więcej, aminlengthjest sprawdzany przy wysyłaniu formularza. Puste pole bezrequiredprzechodzi tę walidację.wyrażenie regularne
Wzorzec, do którego musi pasować cała wartość pola, na przykład kod pocztowy w formacie00-000. Przeglądarka dopasowuje wzorzec do całego tekstu, więc nie musisz dopisywać^i$. Opis wymaganego formatu umieść przy polu albo w atrybucietitle, który część przeglądarek dołącza do komunikatu o błędzie.atrybut logiczny
Pozwala podać kilka wartości naraz: w polufilewybrać kilka plików, a w poluemailwpisać kilka adresów rozdzielonych przecinkami.typy MIME lub rozszerzenia plików
Podpowiada oknu wyboru plików, co pokazać, na przykładimage/*(dowolne obrazy),.pdfalboimage/png, image/jpeg. To tylko filtr w oknie dialogowym, który użytkownik może obejść, więc typ pliku i tak sprawdź na serwerze.id elementu `<datalist>`
Łączy pole z listą podpowiedzi<datalist>. Użytkownik widzi propozycje podczas pisania, ale nadal może wpisać własną wartość.on | off | nazwa danych, np. email, username, current-password, new-password, one-time-code
Mówi przeglądarce i menedżerowi haseł, jakie dane pasują do pola. Przycurrent-passwordmenedżer podpowie zapisane hasło, przynew-passwordzaproponuje wygenerowanie silnego, aone-time-codepozwala wkleić kod z SMS-a jednym dotknięciem. W formularzu logowania pole z loginem oznacz jakousername, nawet jeśli wpisuje się w nie e-mail.atrybut logiczny
Ustawia kursor w polu zaraz po wczytaniu strony. Używaj go oszczędnie, najwyżej raz na stronie i tylko tam, gdzie pole jest głównym celem wizyty, jak w wyszukiwarce. Nagły skok fokusu dezorientuje użytkowników czytników ekranu.
Element obsługuje też wszystkie atrybuty globalne, takie jak class, id, style czy hidden.
Atrybuty w praktyce
#type
text | email | password | number | range | date | time | datetime-local | month | week | color | checkbox | radio | file | search | tel | url | hidden | submit | reset | button | imageRodzaj pola, domyślnie text. Od typu zależą wygląd, klawiatura na telefonie i reguły walidacji. Pole hidden jest niewidoczne i przechowuje wartość wysyłaną razem z formularzem. Typ, którego przeglądarka nie obsługuje, zamienia się w zwykłe pole tekstowe. Dotyczy to na przykład month i week, które nie działają we wszystkich przeglądarkach.
<form>
<p><label>Telefon <input type="tel" name="phone" placeholder="600 100 200"></label></p>
<p><label>Strona WWW <input type="url" name="website" placeholder="https://"></label></p>
<p><label>Godzina lekcji <input type="time" name="time" value="18:30"></label></p>
<p><label>Termin oddania <input type="datetime-local" name="deadline"></label></p>
<p><label>Miesiąc startu <input type="month" name="month"></label></p>
<input type="hidden" name="course" value="html-101">
<p>
<input type="submit" value="Wyślij">
<input type="reset" value="Wyczyść">
<input type="button" value="Podgląd">
</p>
</form>name
tekstNazwa, pod którą wartość pola trafi na serwer, na przykład email=ania@example.com. Pola bez name nie są wysyłane. Przyciski radiowe z tą samą nazwą tworzą grupę, w której można zaznaczyć tylko jedną opcję.
<p>Jak chcesz się uczyć?</p>
<label><input type="radio" name="mode" value="video"> Wideo</label>
<label><input type="radio" name="mode" value="text"> Tekst</label>
<label><input type="radio" name="mode" value="practice"> Zadania</label>value
tekstWartość początkowa pola. W polach tekstowych to tekst wpisany na starcie, w polach wyboru i przyciskach radiowych wartość wysyłana po zaznaczeniu, a w przyciskach submit i button napis na przycisku.
<p><label>Nazwa użytkownika <input type="text" name="username" value="ania_koduje"></label></p>
<p><label><input type="checkbox" name="topics" value="css" checked> CSS</label></p>
<input type="submit" value="Zapisz zmiany">placeholder
tekstPodpowiedź widoczna w pustym polu, najlepiej przykładowy format danych. Znika, gdy użytkownik zacznie pisać, dlatego nigdy nie zastępuje etykiety <label>.
<label for="phone">Telefon</label>
<input type="tel" id="phone" name="phone" placeholder="np. 600 100 200">required
atrybut logicznyPole musi zostać wypełnione (albo zaznaczone), zanim formularz się wyśle. Przy próbie wysłania pustego pola przeglądarka pokaże komunikat i ustawi w nim kursor. Pole spełniające reguły pasuje do selektora :valid, a błędne do :invalid.
<form>
<label>E-mail <input type="email" name="email" required></label>
<button>Wyślij</button>
</form>disabled
atrybut logicznyWyłącza pole: nie da się go kliknąć, wybrać klawiszem Tab ani edytować, a jego wartość nie zostanie wysłana z formularzem. Przeglądarka zwykle wyszarza takie pole.
<p><label>Kod promocyjny <input type="text" name="promo" value="JESIEN2026" disabled></label></p>
<p><label><input type="checkbox" name="certificate" disabled> Certyfikat (po ukończeniu kursu)</label></p>readonly
atrybut logicznyPole tylko do odczytu: można je zaznaczyć, skopiować z niego tekst i przejść do niego klawiszem Tab, ale nie da się zmienić wartości. W przeciwieństwie do disabled wartość zostanie wysłana. Działa w polach tekstowych, liczbowych i z datami, ale nie w polach wyboru, przyciskach radiowych, suwakach ani polach koloru.
<label>Twój link polecający
<input type="url" name="referral" value="https://www.codeworlds.com/?ref=ania" size="34" readonly>
</label>checked
atrybut logicznyZaznacza pole wyboru (checkbox) albo przycisk radiowy (radio) na starcie. W grupie przycisków radiowych o tej samej nazwie checked powinien mieć najwyżej jeden.
<p><label><input type="checkbox" name="reminders" checked> Przypomnienia o nauce</label></p>
<p>
<label><input type="radio" name="plan" value="monthly"> Miesięczny</label>
<label><input type="radio" name="plan" value="yearly" checked> Roczny</label>
</p>min / max / step
liczba, data lub godzinaWyznaczają zakres i krok wartości w polach number, range, date, time i pokrewnych. step="50" pozwala wybierać tylko wartości co 50 (0, 50, 100 i tak dalej), a step="any" wyłącza ograniczenie kroku. Strzałki i suwak trzymają się tych granic, a wartość spoza zakresu nie przejdzie walidacji.
<p><label>Liczba uczestników <input type="number" name="seats" min="1" max="10" value="1"></label></p>
<p><label>Budżet w zł <input type="range" name="budget" min="0" max="500" step="50" value="150"></label></p>
<p><label>Termin <input type="date" name="date" min="2026-10-01" max="2026-12-31"></label></p>minlength / maxlength
liczba znakówNajmniejsza i największa dozwolona liczba znaków w polu tekstowym. maxlength po prostu nie pozwala wpisać więcej, a minlength jest sprawdzany przy wysyłaniu formularza. Puste pole bez required przechodzi tę walidację.
<form>
<label>Nazwa użytkownika
<input type="text" name="username" minlength="3" maxlength="16" required>
</label>
<button>Załóż konto</button>
</form>pattern
wyrażenie regularneWzorzec, do którego musi pasować cała wartość pola, na przykład kod pocztowy w formacie 00-000. Przeglądarka dopasowuje wzorzec do całego tekstu, więc nie musisz dopisywać ^ i $. Opis wymaganego formatu umieść przy polu albo w atrybucie title, który część przeglądarek dołącza do komunikatu o błędzie.
<form>
<label>Kod pocztowy
<input type="text" name="postal" pattern="[0-9]{2}-[0-9]{3}" placeholder="00-000" title="Dwie cyfry, kreska i trzy cyfry">
</label>
<button>Sprawdź</button>
</form>multiple
atrybut logicznyPozwala podać kilka wartości naraz: w polu file wybrać kilka plików, a w polu email wpisać kilka adresów rozdzielonych przecinkami.
<p><label>Zrzuty ekranu projektu <input type="file" name="screens" accept="image/*" multiple></label></p>
<p><label>Zaproś znajomych <input type="email" name="friends" size="34" placeholder="ola@example.com, kuba@example.com" multiple></label></p>accept
typy MIME lub rozszerzenia plikówPodpowiada oknu wyboru plików, co pokazać, na przykład image/* (dowolne obrazy), .pdf albo image/png, image/jpeg. To tylko filtr w oknie dialogowym, który użytkownik może obejść, więc typ pliku i tak sprawdź na serwerze.
<p><label>Avatar (PNG lub JPG) <input type="file" name="avatar" accept="image/png, image/jpeg"></label></p>
<p><label>CV w PDF <input type="file" name="cv" accept=".pdf,application/pdf"></label></p>list
id elementu `<datalist>`Łączy pole z listą podpowiedzi <datalist>. Użytkownik widzi propozycje podczas pisania, ale nadal może wpisać własną wartość.
<label>Ulubiony język
<input type="text" name="language" list="languages">
</label>
<datalist id="languages">
<option value="JavaScript">
<option value="Python">
<option value="TypeScript">
<option value="Go">
</datalist>autocomplete
on | off | nazwa danych, np. email, username, current-password, new-password, one-time-codeMówi przeglądarce i menedżerowi haseł, jakie dane pasują do pola. Przy current-password menedżer podpowie zapisane hasło, przy new-password zaproponuje wygenerowanie silnego, a one-time-code pozwala wkleić kod z SMS-a jednym dotknięciem. W formularzu logowania pole z loginem oznacz jako username, nawet jeśli wpisuje się w nie e-mail.
<form>
<p><label>E-mail <input type="email" name="email" autocomplete="username"></label></p>
<p><label>Hasło <input type="password" name="password" autocomplete="current-password"></label></p>
<p><label>Kod z SMS-a <input type="text" name="code" inputmode="numeric" autocomplete="one-time-code"></label></p>
</form>autofocus
atrybut logicznyUstawia kursor w polu zaraz po wczytaniu strony. Używaj go oszczędnie, najwyżej raz na stronie i tylko tam, gdzie pole jest głównym celem wizyty, jak w wyszukiwarce. Nagły skok fokusu dezorientuje użytkowników czytników ekranu.
<label>Szukaj lekcji <input type="search" name="q" autofocus></label>W podglądzie osadzonym w ramce przeglądarka może zignorować autofocus.
Obsługa przeglądarek
#Szeroko dostępne
Działa we wszystkich nowoczesnych przeglądarkach, także na telefonach. Możesz używać bez obaw.
- Chrome
- Edge
- Firefox
- Safari
Dobre praktyki
#- Łącz każde pole z etykietą: owiń je w
<label>albo nadaj poluidi wskaż je w<label for="…">. Kliknięcie etykiety ustawi wtedy kursor w polu. - Do numerów telefonu, kodów pocztowych i numerów kart nie używaj
type="number". Ten typ dodaje strzałki do zwiększania wartości i jest przeznaczony do liczb, na których się liczy, a nie do ciągów cyfr. Wybierztype="tel"albotype="text"zinputmode="numeric". - Walidacja w przeglądarce (
required,pattern,min) pomaga użytkownikowi, ale nie chroni serwera. Dane zawsze sprawdzaj także po stronie serwera.
Powiązane hasła
#- <label>Etykieta pola formularza. Kliknięcie etykiety przenosi kursor do pola.
- <form>Formularz, który zbiera dane od użytkownika i wysyła je pod wskazany adres.
- <button>Klikalny przycisk: wysyła formularz, czyści go albo uruchamia akcję na stronie.
- <datalist>Lista podpowiedzi dla pola `<input>`. Można wybrać propozycję albo wpisać własną wartość.
- <textarea>Wielowierszowe pole tekstowe na dłuższe wypowiedzi: wiadomości, opinie, opisy.
- <select>Rozwijana lista, z której użytkownik wybiera jedną lub kilka opcji.
Widzisz błąd albo brakuje przykładu? Napisz do nas.