Опанувати створення складних HTML5 форм для збору даних користувача. Застосувати вбудовану валідацію полів та стилізувати форму оформлення замовлення (Checkout) для інтернет-магазину.
checkout.html.<fieldset> та <legend>.<input> (text, email, tel, radio, checkbox, date).required, pattern, minlength).:valid, :invalid).Увага: Продовжуємо роботу над інтернет-магазином “TechShop”. Ми створюємо сторінку “Оформлення замовлення”, куди користувач потрапить після натискання на кнопку “Кошик”.
checkout.html у корені проєкту (поряд з index.html).index.html (включно зі стилями, <header> та <footer>).<main> — тут буде наша форма.<main> додайте заголовок <h2>Оформлення замовлення</h2>.<form action="#" method="POST" class="checkout-form">.Розбийте форму на логічні блоки за допомогою <fieldset>:
Блок 1: Особисті дані
<fieldset>
<legend>1. Особисті дані</legend>
<div class="form-group">
<label for="fullName">ПІБ:</label>
<input
type="text"
id="fullName"
name="fullName"
required
placeholder="Іванов Іван Іванович"
/>
</div>
<div class="form-group">
<label for="email">Email:</label>
<input type="email" id="email" name="email" required />
</div>
<div class="form-group">
<label for="phone">Телефон:</label>
<!-- Валідація на 10-12 цифр + код країни -->
<input
type="tel"
id="phone"
name="phone"
pattern="[\+]\d{2}\d{10}"
placeholder="+380991234567"
required
title="Формат: +380XXXXXXXXX"
/>
</div>
</fieldset>
Блок 2: Доставка
<fieldset>
<legend>2. Спосіб доставки</legend>
<div class="form-radio">
<input
type="radio"
id="deliveryNova"
name="delivery"
value="nova_poshta"
checked
/>
<label for="deliveryNova">Нова Пошта</label>
</div>
<div class="form-radio">
<input
type="radio"
id="deliveryCourier"
name="delivery"
value="courier"
/>
<label for="deliveryCourier">Кур'єр за адресою</label>
</div>
<div class="form-group">
<label for="city">Місто:</label>
<select id="city" name="city">
<option value="kyiv">Київ</option>
<option value="lviv">Львів</option>
<option value="odesa">Одеса</option>
</select>
</div>
</fieldset>
Блок 3: Коментар та згода
<textarea> для коментаря до замовлення.<input type="checkbox" required> з текстом “Я погоджуюсь з правилами магазину”.<button type="submit" class="btn btn-primary">Підтвердити замовлення</button>.style.css):
.checkout-form {
max-width: 600px;
margin: 2rem auto; /* Центрування на сторінці */
background: #fff;
padding: 2rem;
border-radius: 8px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
fieldset {
border: 1px solid #e5e7eb;
padding: 1rem;
margin-bottom: 1.5rem;
border-radius: 4px;
}
.form-group {
display: flex;
flex-direction: column;
margin-bottom: 1rem;
}
.form-group input,
.form-group select,
.form-group textarea {
padding: 0.5rem;
border: 1px solid #d1d5db;
border-radius: 4px;
font-family: inherit;
}
.form-group input:invalid:focus {
border-color: red;
outline: none;
}
.form-group input:valid {
border-color: green;
}
git add . та git commit -m "Create checkout form with HTML5 validation".main.У проєкті “TechShop” з’явилася друга повноцінна сторінка з семантичною, багатомодульною формою замовлення, яка візуально реагує на введення правильних/неправильних даних без жодного рядка JavaScript.
<fieldset> і давати заголовок через <legend>?radio та checkbox? Чому всі інпути типу radio в одній групі повинні мати однаковий атрибут name?required, а користувач натиснув Submit порожнім?for у тегу <label> і чому він повинен співпадати з атрибутом id інпута?:valid та :invalid? В який момент вони застосовуються до поля?