← Lekcje
CSS · lekcja 08

Stylizacja formularza

Wasz formularz kontaktowy wciąż wygląda jak surowy HTML - dziś dajemy mu wygląd

  1. Pole input jako pudełko: border, padding, width
  2. Stan :focus - inna ramka, gdy pole jest aktywne
  3. border-radius i background-color na przycisku
  4. :hover i cursor: pointer na przycisku
Rozgrzewka · 3 minuty

Trzy pytania z poprzedniej lekcji

  1. Jaka jest różnica między list-style-position: inside a outside?
  2. Które dwie właściwości musicie ustawić, żeby lista straciła i kropki, i wcięcie?
  3. Co zmienia border-collapse: collapse w wyglądzie tabeli?
Część 1 · pole input

Pole formularza to zwykłe pudełko

Pole input zachowuje się jak każdy inny element na stronie - ma border, padding, margin, można mu ustawić width. Domyślny wygląd narzuca przeglądarka i różni się między systemami, ale gdy dodacie własny border i padding, pole wygląda tak samo wszędzie.

przed stylizacją Jan Kowalski domyślna ramka przeglądarki, tekst tuż przy krawędzi po stylizacji Jan Kowalski padding border: 3px solid border 3px + padding 10px + border-radius 5px
MDN: „Elements that allow for text input such as <input type="text">... are quite easy to style and tend to behave just like other boxes on your page” · developer.mozilla.org/docs/Learn_web_development/Core/Styling_basics/Images_media_forms#styling_text_input_elements
Część 2 · pseudoklasa :focus

Pole w trakcie wpisywania

Pseudoklasa :focus pasuje do elementu, który właśnie ma fokus - jest gotowy do wpisywania, bo kliknęliście w niego myszą albo przeszliście do niego klawiszem Tab. Inna ramka przy :focus pokazuje Wam i użytkownikowi strony, w którym polu akurat piszecie.

pole bez fokusu jan@szkola.pl input:focus jan@szkola.pl ← kliknięte / Tab
MDN: „The :focus pseudo-class represents an element (such as a form input) that has received focus. It is generally triggered when the user clicks or taps on an element or selects it with the keyboard's Tab key” · uzupełnienie ze strony właściwości developer.mozilla.org/docs/Web/CSS/:focus
Część 3 · przycisk submit

Przycisk z innym tłem i zaokrągleniem

Przycisk wysyłający formularz (input type="submit") stylizujecie tak samo jak pole tekstowe. border-radius zaokrągla rogi, background-color zmienia tło - razem dają przycisk, który wygląda jak przycisk, nie jak szary prostokąt przeglądarki.

input[type="submit"] {
  border: 3px solid #333333;
  background-color: #999999;
  border-radius: 5px;
  padding: 10px 2em;
  color: white;
}
MDN, przykład kodu w sekcji „Styling text input elements” · developer.mozilla.org/docs/Learn_web_development/Core/Styling_basics/Images_media_forms#styling_text_input_elements
Część 4 · :hover i cursor: pointer

Przycisk reaguje na najechanie

Pseudoklasa :hover pasuje, gdy kursor myszy stoi nad elementem - łączycie ją z :focus, żeby przycisk wyglądał tak samo po najechaniu i po zaznaczeniu klawiaturą. cursor: pointer zamienia strzałkę na dłoń, jak przy zwykłym łączu - sygnał „to jest klikalne”.

zwykły Wyślij :hover Wyślij 👆 :focus Wyślij
input[type="submit"]:hover, input[type="submit"]:focus { background-color: #333333; cursor: pointer; }

Ciekawostka z MDN: pseudoklasa :hover bywa nieprzewidywalna na ekranach dotykowych - zależnie od przeglądarki może wcale nie zadziałać po dotknięciu ekranu, zadziałać tylko na chwilę albo zostać aktywna, dopóki nie dotkniecie czegoś innego.

MDN: reguła :hover/:focus, sekcja „Styling text input elements” · „cursor: pointer - indicates a link” (developer.mozilla.org/docs/Web/CSS/cursor) · ciekawostka: „The :hover pseudo-class is problematic on touchscreens... the :hover pseudo-class might never match, match only for a moment after touching an element, or continue to match even after the user has stopped touching” (developer.mozilla.org/en-US/docs/Web/CSS/:hover)
CSS · egzamin

Tak pytają na egzaminie

1. Zapis input[type=number] { background-color: Brown; } oznacza, że tło będzie brązowe dla

  1. wszystkich pól edycyjnych.
  2. wszystkich tekstów na stronie.
  3. pól edycyjnych, które są typu numerycznego.
  4. pól edycyjnych, gdy użytkownik wpisze do nich dowolną cyfrę.

2. Zapis input:focus { background-color: LightGreen; } - tak formatowane pole edycyjne będzie miało jasnozielone tło

  1. jeśli jest to pierwsze wystąpienie tego znacznika w dokumencie.
  2. gdy zostanie wskazane kursorem myszy bez kliknięcia.
  3. po kliknięciu myszą w celu zapisania w nim tekstu.
  4. w każdym przypadku.
CKE, EE.09, czerwiec 2026, zadanie 32 · CKE, EE.09, czerwiec 2021, zadanie 33
Ćwiczenie · przy komputerze · 20 minut

Ćwiczenie: stylizacja formularza

  1. W style.css ustaw dla pól input z contact.html: padding, border i border-radius.
  2. Dodaj regułę input:focus z inną ramką (np. innym kolorem border).
  3. Dla przycisku submit ustaw background-color i border-radius, dodaj input[type="submit"]:hover ze zmienionym tłem i cursor: pointer.
  4. Zapisz, F5, kliknij w pola i w przycisk, sprawdź działanie :focus i :hover.

Pamiętajcie: :focus i :hover to dwa różne stany - :focus trzyma się pola nawet po zabraniu myszy, dopóki nie klikniecie gdzie indziej.

Pytania kontrolne

Trzy pytania na koniec

  1. Która pseudoklasa pokazuje styl pola dopiero po kliknięciu w nie lub wybraniu klawiszem Tab?
  2. Które dwie właściwości najczęściej ustawiacie razem, żeby przycisk miał zaokrąglone rogi i inne tło?
  3. Co sygnalizuje użytkownikowi cursor: pointer na przycisku?

To tyle na dziś: stylizacja list, tabel i formularzy zamknięta. Na następnej lekcji zaczynamy kontrolę położenia elementów na stronie.

Z realnych wdrożeń

A jak to wygląda w produkcji?

Na lekcjiW produkcjiStatus
Każde pole input stylizowane osobno po typeWspólna klasa na wszystkich polach (np. .form-control) - jeden zestaw border/padding na cały formularznadal w użyciu
:focus pokazuje ramkę przy każdym kliknięciu i przy Tab:focus-visible - ramka fokusu pojawia się głównie przy nawigacji klawiaturą, nie przeszkadza po kliknięciu myszązastępowane
Kolor i zaokrąglenie przycisku wpisane wprost w reguleWartości z systemu projektowego jako zmienne CSS (--color-primary, --radius) używane w całej aplikacjirozbudowane
Błąd w polu widać dopiero po wysłaniu formularzaPseudoklasy :invalid/:valid z atrybutami required/pattern - kolor ramki zmienia się od razu, bez JavaScriptunadal w użyciu
MDN: „:focus-visible... the UA determines via heuristics that the focus should be made evident on the element” (developer.mozilla.org/docs/Web/CSS/:focus-visible)