Reszponzív Űrlap Készítése Bootstrap és CSS Grid Segítségével

Az űrlapok a weboldalak egyik legfontosabb interakciós elemei. Egy jól megtervezett, reszponzív űrlap nemcsak esztétikus, de használható is minden eszközön. Ebben a cikkben lépésről lépésre megmutatjuk, hogyan készíthetsz egy modern, reszponzív űrlapot Bootstrap 5 és CSS Grid segítségével, valamint hogyan alkalmazhatod a Bootstrap beépített form validációs lehetőségeit.

1. lépés: Projekt struktúra

Hozz létre egy egyszerű projektet az alábbi struktúrával:

Projekt mappa  ├── index.html            # A  HTML fájl └── js                    # Egyéni js (opcionális)     └── script.js         # Egyéni js fájl (opcionális) └── css                   # Egyéni stílusokhoz (opcionális)     └── style.css         # Egyéni CSS fájl (opcionális)

2. lépés: Alap HTML űrlap Bootstrap osztályokkal

Az űrlap elemeihez használd a Bootstrap form-osztályait, hogy alapból szép és reszponzív legyen:

<!DOCTYPE html> <html lang="hu">  <head>     <meta charset="UTF-8" />     <meta name="viewport" content="width=device-width, initial-scale=1" />     <title>Űrlap Validáció</title>     <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" />     <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css" />      <link rel="stylesheet" href="css/style.css" /> </head>  <body class="p-4">     <div class="container">         <h1 class="mb-4">Regisztrációs űrlap</h1>         <form class="needs-validation" novalidate>              <!-- Szövegmező -->             <div class="mb-3">                 <label for="name" class="form-label">Név</label>                 <input type="text" class="form-control" id="name" required />                 <div class="invalid-feedback">Kérjük, add meg a neved!</div>             </div>              <!-- Email -->             <div class="mb-3">                 <label for="email" class="form-label">Email cím</label>                 <input type="email" class="form-control" id="email" required />                 <div class="invalid-feedback">Kérjük, érvényes email címet adj meg!</div>             </div>              <!-- Jelszó -->             <div class="mb-3">                 <label for="password" class="form-label">Jelszó</label>                 <input type="password" class="form-control" id="password" required minlength="6" />                 <div class="invalid-feedback">Legalább 6 karakter szükséges.</div>             </div>              <!-- Jelszó megerősítése -->             <div class="mb-3">                 <label for="confirmPassword" class="form-label">Jelszó megerősítése</label>                 <input type="password" class="form-control" id="confirmPassword" required />                 <div class="invalid-feedback" id="confirmPasswordFeedback">A jelszavak nem egyeznek!</div>             </div>              <!-- Telefonszám -->             <div class="mb-3">                 <label for="phone" class="form-label">Telefonszám</label>                 <input type="tel" class="form-control" id="phone" required />                 <div class="invalid-feedback">Kérjük, add meg a telefonszámod!</div>             </div>              <!-- TAJ-szám -->             <div class="mb-3">                 <label for="taj" class="form-label">TAJ-szám</label>                 <input type="text" class="form-control" id="taj" required />                 <div class="invalid-feedback">Kérjük, add meg a TAJ-számod (9 számjegy)!</div>             </div>              <!-- Bankszámlaszám -->             <div class="mb-3">                 <label for="bankszamla" class="form-label">Bankszámlaszám</label>                 <input type="text" class="form-control" id="bankszamla" required />                 <div class="invalid-feedback">Kérjük, add meg a teljes bankszámlaszámod!</div>             </div>              <!-- Dátum -->             <div class="mb-3">                 <label for="dob" class="form-label">Születési dátum</label>                 <input type="text" class="form-control" id="dob" required />                 <div class="invalid-feedback">Kérjük, válassz dátumot!</div>             </div>              <!-- Idő -->             <div class="mb-3">                 <label for="idopont" class="form-label">Időpont</label>                 <input type="text" class="form-control" id="idopont" required />                 <div class="invalid-feedback">Kérjük, válassz időpontot!</div>             </div>              <!-- Szám -->             <div class="mb-3">                 <label for="quantity" class="form-label">Darabszám</label>                 <input type="number" class="form-control" id="quantity" min="1" max="100" required />                 <div class="invalid-feedback">Kérjük, adj meg egy számot 1 és 100 között!</div>             </div>              <!-- Legördülő -->             <div class="mb-3">                 <label for="select" class="form-label">Válassz kategóriát</label>                 <select class="form-select" id="select" required>                     <option value="">-- Válassz --</option>                     <option value="1">Kategória 1</option>                     <option value="2">Kategória 2</option>                 </select>                 <div class="invalid-feedback">Kérjük, válassz kategóriát!</div>             </div>              <!-- Checkbox -->             <div class="mb-3 form-check">                 <input class="form-check-input" type="checkbox" id="terms" required />                 <label class="form-check-label" for="terms">Elfogadom a feltételeket</label>                 <div class="invalid-feedback">El kell fogadnod a feltételeket!</div>             </div>              <!-- Rádiógombok -->             <div class="mb-3">                 <label class="form-label">Nem</label>                 <div class="form-check">                     <input class="form-check-input" type="radio" name="gender" id="male" required />                     <label class="form-check-label" for="male">Férfi</label>                 </div>                 <div class="form-check">                     <input class="form-check-input" type="radio" name="gender" id="female" required />                     <label class="form-check-label" for="female"></label>                 </div>                 <div class="invalid-feedback d-block">Kérjük, válassz nemet!</div>             </div>              <!-- Szövegterület -->             <div class="mb-3">                 <label for="message" class="form-label">Üzenet</label>                 <textarea class="form-control" id="message" rows="3" required></textarea>                 <div class="invalid-feedback">Kérjük, írj üzenetet!</div>             </div>              <!-- Fájl -->             <div class="mb-3">                 <label for="fileUpload" class="form-label">Fájl feltöltése</label>                 <input class="form-control" type="file" id="fileUpload" required />                 <div class="invalid-feedback">Kérlek, válassz ki egy fájlt!</div>             </div>              <!-- Küldés -->             <button class="btn btn-primary" type="submit">Küldés</button>         </form>     </div>      <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>      <!-- Bootstrap JS -->     <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>      <!-- Flatpickr -->     <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css" />     <script src="https://cdn.jsdelivr.net/npm/flatpickr"></script>      <!-- Magyar lokalizáció -->     <script src="https://cdn.jsdelivr.net/npm/flatpickr/dist/l10n/hu.js"></script>      <!-- Inputmask (teljes működő build) -->     <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.inputmask/5.0.9/jquery.inputmask.min.js"></script>      <!-- Végül a saját script -->     <script src="js/script.js"></script>  </body>  </html>

3. lépés: CSS Grid az űrlap elrendezéséhez

A CSS Grid segítségével egyszerűen készíthetsz több oszlopos elrendezést nagyobb képernyőkre, miközben mobilon egy oszlopos marad:

form {   display: grid;   grid-template-columns: 1fr;   gap: 1rem; }  @media (min-width: 768px) {   form {     grid-template-columns: 1fr 1fr;   }    /* Az üzenet mező és a gomb teljes szélességűek legyenek */   form > div:nth-last-child(2),   form > button {     grid-column: 1 / -1;   } } 

4. lépés: Bootstrap form validáció használata

Bootstrap beépített validációs osztályait használhatod JavaScript segítségével, hogy a felhasználói hibákat azonnal jelezze az űrlap:

(() => {   'use strict';    const form = document.querySelector('.needs-validation');   if (!form) return;    const password = form.querySelector('#password');   const confirmPassword = form.querySelector('#confirmPassword');   const confirmFeedback = form.querySelector('#confirmPasswordFeedback');    form.addEventListener('submit', event => {     event.preventDefault(); // <- Mindig megakadályozza az elküldést     event.stopPropagation();      const isPasswordMatch = password.value === confirmPassword.value;      if (!form.checkValidity() || !isPasswordMatch) {       if (!isPasswordMatch) {         confirmPassword.classList.add('is-invalid');         confirmFeedback.style.display = 'block';       } else {         confirmPassword.classList.remove('is-invalid');         confirmFeedback.style.display = 'none';       }     } else {       confirmPassword.classList.remove('is-invalid');       confirmFeedback.style.display = 'none';        // 💡 Ide jöhet a saját logikád pl. AJAX küldés       console.log('Űrlap sikeresen validált!');     }      form.classList.add('was-validated');   }, false); })();  window.addEventListener("DOMContentLoaded", function () {   // Csak ha már minden betöltődött   if (typeof Inputmask !== "undefined") {     Inputmask({"mask": "+36 (99) 999-9999"}).mask("#phone");     Inputmask({"mask": "999999999"}).mask("#taj");     Inputmask({"mask": "99999999-99999999-99999999"}).mask("#bankszamla");   } else {     console.error("Inputmask nincs betöltve!");   }    if (typeof flatpickr !== "undefined") {     flatpickr("#dob", {       dateFormat: "Y-m-d",       maxDate: "today",       locale: "hu"     });      flatpickr("#idopont", {       enableTime: true,       noCalendar: true,       dateFormat: "H:i",       time_24hr: true,       locale: "hu"     });   } else {     console.error("Flatpickr nincs betöltve!");   } }); 

Összegzés

Egy reszponzív űrlap CSS Grid és Bootstrap kombinációjával könnyen elkészíthető, amely minden eszközön jól működik. A Bootstrap validációs osztályai pedig egyszerűvé teszik a felhasználói hibák kezelését és megjelenítését.

Letöltés