Bootstrap 4 formularze
Domyślne ustawienia Bootstrapa 4
Kontrolki formularzy automatycznie otrzymują pewne globalne style za pomocą Bootstrap:
Wszystkie elementy tekstowe <input>
, <textarea>
i
<select>
z klasą .form-control
mają szerokość 100%.
Bootstrap 4 Układy formularzy
Bootstrap udostępnia dwa rodzaje układów formularzy:
- Formularz piętrowy (o pełnej szerokości)
- Formularz wbudowany
Bootstrap 4 Ułożona forma
Poniższy przykład tworzy formularz piętrowy z dwoma polami wejściowymi, jednym polem wyboru i przyciskiem przesyłania.
Dodaj element opakowania z .form-group
, wokół każdej kontrolki formularza, aby zapewnić prawidłowe marginesy:
Przykład
<form action="/action_page.php">
<div class="form-group">
<label for="email">Email address:</label>
<input type="email" class="form-control"
placeholder="Enter email" id="email">
</div>
<div class="form-group">
<label for="pwd">Password:</label>
<input type="password" class="form-control"
placeholder="Enter password" id="pwd">
</div>
<div class="form-group form-check">
<label
class="form-check-label">
<input
class="form-check-input" type="checkbox"> Remember me
</label>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
Formularz inline Bootstrap
W formularzu śródliniowym wszystkie elementy są śródliniowe i wyrównane do lewej.
Uwaga: dotyczy to tylko formularzy w widocznych oknach o szerokości co najmniej 576 pikseli. Na ekranach mniejszych niż 576px będzie układać się poziomo.
Dodatkowa zasada dla formularza inline:
- Dodaj klasę
.form-inline
do<form>
elementu
Poniższy przykład tworzy formularz wbudowany z dwoma polami wejściowymi, jednym polem wyboru i jednym przyciskiem przesyłania:
Przykład
<form class="form-inline" action="/action_page.php">
<label for="email">Email address:</label>
<input type="email" class="form-control"
placeholder="Enter email" id="email">
<label for="pwd">Password:</label>
<input type="password" class="form-control"
placeholder="Enter password" id="pwd">
<div class="form-check">
<label
class="form-check-label">
<input
class="form-check-input" type="checkbox"> Remember me
</label>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
Formularz wbudowany z narzędziami
Powyższy formularz wbudowany jest "skompresowany" i będzie wyglądał znacznie lepiej z narzędziami do rozmieszczania Bootstrap. Poniższy przykład dodaje prawy margines ( .mr-sm-2
) do każdego wejścia na wszystkich urządzeniach (małych i większych). A dolna klasa marginesu ( .mb-2
) służy do stylizacji pola wejściowego, gdy się zepsuje (przechodzi z poziomu do pionu z powodu niewystarczającej ilości miejsca/szerokości):
Przykład
<form class="form-inline" action="/action_page.php">
<label for="email"
class="mr-sm-2">Email address:</label>
<input type="email" class="form-control
mb-2 mr-sm-2" placeholder="Enter email" id="email">
<label for="pwd"
class="mr-sm-2">Password:</label>
<input type="password" class="form-control
mb-2 mr-sm-2" placeholder="Enter password" id="pwd">
<div class="form-check mb-2 mr-sm-2">
<label
class="form-check-label">
<input
class="form-check-input" type="checkbox"> Remember me
</label>
</div>
<button type="submit" class="btn btn-primary
mb-2">Submit</button>
</form>
Więcej o spacingu i innych klasach „pomocników” dowiesz się z naszego rozdziału o narzędziach Bootstrap 4 .
Wiersz formularza/siatka
Możesz również użyć kolumn ( .col
), aby kontrolować szerokość i wyrównanie danych wejściowych formularza bez używania narzędzi do odstępów. Pamiętaj tylko, aby umieścić je w .row
pojemniku.
W poniższym przykładzie używamy dwóch kolumn, które pojawią się obok siebie. Dużo więcej o kolumnach i wierszach dowiesz się z rozdziału Bootstrap Grids .
Przykład
<form>
<div class="row">
<div class="col">
<input type="text" class="form-control" id="email" placeholder="Enter email"
name="email">
</div>
<div
class="col">
<input type="password"
class="form-control" placeholder="Enter password" name="pswd">
</div>
</div>
</form>
Jeśli chcesz mieć mniej marginesów siatki (zastąpić domyślne rynny kolumn), użyj .form-row
zamiast .row
:
Przykład
<form>
<div class="form-row">
<div class="col">
<input type="text" class="form-control" id="email" placeholder="Enter email"
name="email">
</div>
<div
class="col">
<input type="password"
class="form-control" placeholder="Enter password" name="pswd">
</div>
</div>
</form>
Walidacja formularza
Możesz użyć różnych klas walidacji, aby przekazać użytkownikom cenne informacje zwrotne. Dodaj albo .was-validated
lub .needs-validation
do <form>
elementu, w zależności od tego, czy chcesz przekazać informację zwrotną weryfikacyjną przed, czy po przesłaniu formularza. Pola wejściowe będą miały zielone (prawidłowe) lub czerwone (nieprawidłowe) obramowanie, aby wskazać, czego brakuje w formularzu. Możesz również dodać
wiadomość .valid-feedback
lub .invalid-feedback
wiadomość, aby wyraźnie powiedzieć użytkownikowi, czego brakuje lub co należy zrobić przed przesłaniem formularza.
Przykład
W tym przykładzie używamy .was-validated
do wskazania braków przed przesłaniem formularza:
<form action="/action_page.php" class="was-validated">
<div class="form-group">
<label
for="uname">Username:</label>
<input type="text"
class="form-control" id="uname" placeholder="Enter username" name="uname"
required>
<div class="valid-feedback">Valid.</div>
<div class="invalid-feedback">Please fill out this field.</div>
</div>
<div class="form-group">
<label
for="pwd">Password:</label>
<input type="password"
class="form-control" id="pwd" placeholder="Enter password" name="pswd"
required>
<div class="valid-feedback">Valid.</div>
<div class="invalid-feedback">Please fill out this field.</div>
</div>
<div class="form-group form-check">
<label class="form-check-label">
<input
class="form-check-input" type="checkbox" name="remember" required> I agree on
blabla.
<div
class="valid-feedback">Valid.</div>
<div
class="invalid-feedback">Check this checkbox to continue.</div>
</label>
</div>
<button type="submit" class="btn
btn-primary">Submit</button>
</form>
Przykład
W tym przykładzie używamy .needs-validation
, co doda efekt walidacji PO przesłaniu formularza (jeśli czegoś brakuje). Zauważ, że będziesz musiał również dodać trochę kodu jQuery, aby ten przykład działał poprawnie:
<form action="/action_page.php" class="needs-validation"
novalidate>
<div class="form-group">
<label
for="uname">Username:</label>
<input type="text"
class="form-control" id="uname" placeholder="Enter username" name="uname"
required>
<div class="valid-feedback">Valid.</div>
<div class="invalid-feedback">Please fill out this field.</div>
</div>
<div class="form-group">
<label
for="pwd">Password:</label>
<input type="password"
class="form-control" id="pwd" placeholder="Enter password" name="pswd"
required>
<div class="valid-feedback">Valid.</div>
<div class="invalid-feedback">Please fill out this field.</div>
</div>
<div class="form-group form-check">
<label class="form-check-label">
<input
class="form-check-input" type="checkbox" name="remember" required> I agree on
blabla.
<div
class="valid-feedback">Valid.</div>
<div
class="invalid-feedback">Check this checkbox to continue.</div>
</label>
</div>
<button type="submit" class="btn
btn-primary">Submit</button>
</form>
<script>
//
Disable form submissions if there are invalid fields
(function() {
'use strict';
window.addEventListener('load', function() {
// Get the
forms we want to add validation styles to
var forms =
document.getElementsByClassName('needs-validation');
//
Loop over them and prevent submission
var validation =
Array.prototype.filter.call(forms, function(form) {
form.addEventListener('submit', function(event) {
if (form.checkValidity() === false) {
event.preventDefault();
event.stopPropagation();
}
form.classList.add('was-validated');
},
false);
});
}, false);
})();
</script>