← Back to course

Форми і Введення Даних

Форми і Введення Даних

З поверненням.

У попередньому уроці ти навчився створювати таблиці для структурованих даних.

Тепер переходимо до форм.

Форми — це місце, де користувачі нарешті відповідають твоєму сайту.

Вони можуть написати своє ім’я.

Надіслати повідомлення.

Обрати варіант.

Натиснути кнопку.

Коротко кажучи, форми перетворюють статичну сторінку на розмову.

А іноді — на хаос.

Але ввічливий хаос.

Що Ти Вивчиш

У цьому уроці ти дізнаєшся:

Що Таке Форма?

Форма збирає інформацію від користувача.

Приклади:

Форма зазвичай містить поля і кнопку.

Приклад:

<form>
  <label for="name">Ім’я</label>
  <input id="name" name="name" type="text">

  <button type="submit">Надіслати</button>
</form>

Це дуже маленька форма.

Але вона вже має структуру.

Як маленький офіс з одним столом і однією кнопкою.

Елемент form

Форма починається з form:

<form>
  ...
</form>

Усе всередині належить формі.

Inputs.

Labels.

Buttons.

Text areas.

Select menus.

Елемент form — це контейнер.

Він каже:

Ця група елементів працює разом, щоб зібрати інформацію.

Дуже офіційно.

Майже як документи.

Але з меншою кількістю печаток.

Текстові Поля

Текстове поле дозволяє користувачу ввести один рядок тексту.

Приклад:

<input type="text" name="username">

type="text" означає, що це звичайне текстове поле.

Використовуй його для:

Приклад:

<form>
  <label for="username">Username</label>
  <input id="username" name="username" type="text">
</form>

Користувач може писати всередині поля.

Сайт слухає.

Хоч раз.

Label

Label описує input.

Приклад:

<label for="email">Email</label>
<input id="email" name="email" type="email">

Атрибут for має відповідати id input.

Тут:

<label for="email">
<input id="email">

Обидва використовують email.

Це з’єднує label з input.

Чому це корисно?

Форма без label — як двері без таблички.

Можливо, працює.

Але ніхто не розуміє, що відбувається.

Атрибут name

Атрибут name дає input назву, коли форма надсилається.

Приклад:

<input type="text" name="firstName">

Без name поле може не надіслатися правильно.

Це важливо.

Приклад:

<input id="name" name="name" type="text">

id з’єднує input з label.

name ідентифікує дані.

Це не одне й те саме.

HTML любить деталі.

Іноді занадто.

Placeholder

Placeholder показує тимчасовий текст всередині input.

Приклад:

<input type="text" name="name" placeholder="Введи своє ім’я">

Він може допомогти користувачу зрозуміти, що писати.

Але не використовуй placeholder замість label.

Погано:

<input type="email" placeholder="Email">

Краще:

<label for="email">Email</label>
<input id="email" name="email" type="email" placeholder="you@example.com">

Placeholder зникає, коли користувач починає писати.

Label залишається.

Labels вірні.

Placeholders драматичні і зникають.

Email Input

Для email-адрес використовуй type="email":

<input type="email" name="email">

Приклад:

<label for="email">Email address</label>
<input id="email" name="email" type="email">

Браузер може перевірити, чи користувач ввів щось схоже на email.

Не ідеально.

Але корисно.

HTML дає маленьку допомогу.

Не чудо.

Маленьку допомогу.

Password Input

Для паролів використовуй type="password":

<input type="password" name="password">

Браузер приховує символи.

Приклад:

<label for="password">Password</label>
<input id="password" name="password" type="password">

Це корисно для login forms.

Не використовуй звичайні текстові поля для паролів.

Це не “просто”.

Це проблема в капелюсі.

Обов’язкові Поля

Можна зробити поле обов’язковим:

<input type="text" name="name" required>

Браузер не надішле форму, якщо поле порожнє.

Приклад:

<label for="name">Ім’я</label>
<input id="name" name="name" type="text" required>

Використовуй required для важливих полів.

Але не роби кожне поле обов’язковим.

Ніхто не любить форму, яка просить історію життя тільки для того, щоб надіслати “привіт”.

Textarea

Для довших повідомлень використовуй textarea.

Приклад:

<label for="message">Повідомлення</label>
<textarea id="message" name="message"></textarea>

Використовуй textarea для:

Приклад:

<textarea id="message" name="message" rows="5"></textarea>

Атрибут rows контролює видиму висоту.

Не емоційну глибину.

На жаль.

Select Menu

Select menu дозволяє користувачу вибрати один варіант.

Приклад:

<label for="course">Обери курс</label>
<select id="course" name="course">
  <option value="html">HTML</option>
  <option value="css">CSS</option>
  <option value="javascript">JavaScript</option>
</select>

select — це меню.

Кожен option — це один варіант.

value — це значення, яке надсилається разом з формою.

Це корисно, коли користувач має вибрати з фіксованого списку.

Дуже цивілізовано.

Без хаосу клавіатури.

Кнопки

Форма зазвичай має кнопку.

Приклад:

<button type="submit">Надіслати</button>

type="submit" означає, що кнопка надсилає форму.

Приклад:

<form>
  <label for="name">Ім’я</label>
  <input id="name" name="name" type="text">

  <button type="submit">Надіслати</button>
</form>

Також можна використати:

<button type="reset">Reset</button>

Але обережно.

Reset button може стерти все, що користувач ввів.

Це швидкий спосіб стати непопулярним.

action і method

Форми можуть мати action і method.

Приклад:

<form action="/contact" method="post">
  ...
</form>

action каже, куди йдуть дані форми.

method каже, як вони надсилаються.

Поширені методи:

Поки що ми фокусуємось на HTML-структурі.

Backend-обробка прийде пізніше.

HTML будує форму.

Сервер займається повідомленням.

Як рецепція і офіс.

Створи Контактну Форму

Створи файл:

touch form.html

Додай це:

<!DOCTYPE html>
<html lang="uk">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Контактна Форма</title>
</head>
<body>
  <h1>Зв’язатися зі мною</h1>

  <p>Використай цю форму, щоб надіслати просте повідомлення.</p>

  <form action="#" method="post">
    <label for="name">Ім’я</label>
    <input id="name" name="name" type="text" required>

    <label for="email">Email</label>
    <input id="email" name="email" type="email" required>

    <label for="topic">Тема</label>
    <select id="topic" name="topic">
      <option value="question">Питання</option>
      <option value="project">Проєкт</option>
      <option value="feedback">Відгук</option>
    </select>

    <label for="message">Повідомлення</label>
    <textarea id="message" name="message" rows="5" required></textarea>

    <button type="submit">Надіслати Повідомлення</button>
  </form>
</body>
</html>

Відкрий її в браузері.

Вона ще не надсилатиме справжній email.

Для цього потрібен backend або form service.

Але HTML-структура правильна.

Один крок за раз.

Не треба будувати Рим, Stripe і CRM за один післяобідній період.

Типові Помилки

Inputs без labels

Погано:

<input type="text" name="name">

Краще:

<label for="name">Ім’я</label>
<input id="name" name="name" type="text">

Labels важливі.

Використовуй їх.

Відсутній name

Погано:

<input id="email" type="email">

Краще:

<input id="email" name="email" type="email">

Без name дані можуть не надіслатися правильно.

Text input для всього

Не ідеально:

<input type="text" name="message">

Краще для довгих повідомлень:

<textarea name="message"></textarea>

Використовуй правильний елемент для задачі.

Не використовуй ложку, щоб рубати дерево.

Практика

Створи файл:

signup.html

Побудуй signup form з:

Без CSS.

Без JavaScript.

Тільки HTML.

Міні-Завдання

Створи feedback form.

Вона має містити:

Тримай форму простою.

Хороша форма питає те, що їй потрібно.

Погана форма питає твою душу, рецепт бабусі і поштовий індекс двічі.

Підсумок

Сьогодні ти дізнався, що:

Форми потужні.

Вони дозволяють користувачам взаємодіяти зі сторінкою.

Але будуй їх уважно.

Бо форми — це місце, де сайти перестають говорити і починають слухати.

Наступний Урок

У наступному уроці ми вивчимо semantic HTML.

Бо HTML — це не тільки теги.

Це значення.

А значення відділяє чисту сторінку від катастрофи під назвою div soup.