| <!doctype html> |
| <html lang="en"> |
| <head> |
| <meta charset="utf-8"> |
| <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> |
| <meta name="description" content=""> |
| <meta name="author" content=""> |
| <link rel="icon" href="../../../../favicon.ico"> |
| |
| <title>Checkout example for Bootstrap</title> |
| |
| <!-- Bootstrap core CSS --> |
| <link href="../../../../dist/css/bootstrap.min.css" rel="stylesheet"> |
| |
| <!-- Custom styles for this template --> |
| <link href="form-validation.css" rel="stylesheet"> |
| </head> |
| |
| <body class="bg-light"> |
| |
| <div class="container"> |
| <div class="py-5 text-center"> |
| <img class="d-block mx-auto mb-4" src="https://getbootstrap.com/assets/brand/bootstrap-solid.svg" alt="" width="72" height="72"> |
| <h2>Checkout form</h2> |
| <p class="lead">Below is an example form built entirely with Bootstrap's form controls. Each required form group has a validation state that can be triggered by attempting to submit the form without completing it.</p> |
| </div> |
| |
| <div class="row"> |
| <div class="col-md-4 order-md-2 mb-4"> |
| <h4 class="d-flex justify-content-between align-items-center mb-3"> |
| <span class="text-muted">Your cart</span> |
| <span class="badge badge-secondary badge-pill">3</span> |
| </h4> |
| <ul class="list-group mb-3"> |
| <li class="list-group-item d-flex justify-content-between lh-condensed"> |
| <div> |
| <h6 class="my-0">Product name</h6> |
| <small class="text-muted">Brief description</small> |
| </div> |
| <span class="text-muted">$12</span> |
| </li> |
| <li class="list-group-item d-flex justify-content-between lh-condensed"> |
| <div> |
| <h6 class="my-0">Second product</h6> |
| <small class="text-muted">Brief description</small> |
| </div> |
| <span class="text-muted">$8</span> |
| </li> |
| <li class="list-group-item d-flex justify-content-between lh-condensed"> |
| <div> |
| <h6 class="my-0">Third item</h6> |
| <small class="text-muted">Brief description</small> |
| </div> |
| <span class="text-muted">$5</span> |
| </li> |
| <li class="list-group-item d-flex justify-content-between bg-light"> |
| <div class="text-success"> |
| <h6 class="my-0">Promo code</h6> |
| <small>EXAMPLECODE</small> |
| </div> |
| <span class="text-success">-$5</span> |
| </li> |
| <li class="list-group-item d-flex justify-content-between"> |
| <span>Total (USD)</span> |
| <strong>$20</strong> |
| </li> |
| </ul> |
| |
| <form class="card p-2"> |
| <div class="input-group"> |
| <input type="text" class="form-control" placeholder="Promo code"> |
| <div class="input-group-append"> |
| <button type="submit" class="btn btn-secondary">Redeem</button> |
| </div> |
| </div> |
| </form> |
| </div> |
| <div class="col-md-8 order-md-1"> |
| <h4 class="mb-3">Billing address</h4> |
| <form class="needs-validation" novalidate> |
| <div class="row"> |
| <div class="col-md-6 mb-3"> |
| <label for="firstName">First name</label> |
| <input type="text" class="form-control" id="firstName" placeholder="" value="" required> |
| <div class="invalid-feedback"> |
| Valid first name is required. |
| </div> |
| </div> |
| <div class="col-md-6 mb-3"> |
| <label for="lastName">Last name</label> |
| <input type="text" class="form-control" id="lastName" placeholder="" value="" required> |
| <div class="invalid-feedback"> |
| Valid last name is required. |
| </div> |
| </div> |
| </div> |
| |
| <div class="mb-3"> |
| <label for="username">Username</label> |
| <div class="input-group"> |
| <div class="input-group-prepend"> |
| <span class="input-group-text">@</span> |
| </div> |
| <input type="text" class="form-control" id="username" placeholder="Username" required> |
| <div class="invalid-feedback" style="width: 100%;"> |
| Your username is required. |
| </div> |
| </div> |
| </div> |
| |
| <div class="mb-3"> |
| <label for="email">Email <span class="text-muted">(Optional)</span></label> |
| <input type="email" class="form-control" id="email" placeholder="you@example.com"> |
| <div class="invalid-feedback"> |
| Please enter a valid email address for shipping updates. |
| </div> |
| </div> |
| |
| <div class="mb-3"> |
| <label for="address">Address</label> |
| <input type="text" class="form-control" id="address" placeholder="1234 Main St" required> |
| <div class="invalid-feedback"> |
| Please enter your shipping address. |
| </div> |
| </div> |
| |
| <div class="mb-3"> |
| <label for="address2">Address 2 <span class="text-muted">(Optional)</span></label> |
| <input type="text" class="form-control" id="address2" placeholder="Apartment or suite"> |
| </div> |
| |
| <div class="row"> |
| <div class="col-md-5 mb-3"> |
| <label for="country">Country</label> |
| <select class="custom-select d-block w-100" id="country" required> |
| <option value="">Choose...</option> |
| <option>United States</option> |
| </select> |
| <div class="invalid-feedback"> |
| Please select a valid country. |
| </div> |
| </div> |
| <div class="col-md-4 mb-3"> |
| <label for="state">State</label> |
| <select class="custom-select d-block w-100" id="state" required> |
| <option value="">Choose...</option> |
| <option>California</option> |
| </select> |
| <div class="invalid-feedback"> |
| Please provide a valid state. |
| </div> |
| </div> |
| <div class="col-md-3 mb-3"> |
| <label for="zip">Zip</label> |
| <input type="text" class="form-control" id="zip" placeholder="" required> |
| <div class="invalid-feedback"> |
| Zip code required. |
| </div> |
| </div> |
| </div> |
| <hr class="mb-4"> |
| <div class="custom-control custom-checkbox"> |
| <input type="checkbox" class="custom-control-input" id="same-address"> |
| <label class="custom-control-label" for="same-address">Shipping address is the same as my billing address</label> |
| </div> |
| <div class="custom-control custom-checkbox"> |
| <input type="checkbox" class="custom-control-input" id="save-info"> |
| <label class="custom-control-label" for="save-info">Save this information for next time</label> |
| </div> |
| <hr class="mb-4"> |
| |
| <h4 class="mb-3">Payment</h4> |
| |
| <div class="d-block my-3"> |
| <div class="custom-control custom-radio"> |
| <input id="credit" name="paymentMethod" type="radio" class="custom-control-input" checked required> |
| <label class="custom-control-label" for="credit">Credit card</label> |
| </div> |
| <div class="custom-control custom-radio"> |
| <input id="debit" name="paymentMethod" type="radio" class="custom-control-input" required> |
| <label class="custom-control-label" for="debit">Debit card</label> |
| </div> |
| <div class="custom-control custom-radio"> |
| <input id="paypal" name="paymentMethod" type="radio" class="custom-control-input" required> |
| <label class="custom-control-label" for="paypal">PayPal</label> |
| </div> |
| </div> |
| <div class="row"> |
| <div class="col-md-6 mb-3"> |
| <label for="cc-name">Name on card</label> |
| <input type="text" class="form-control" id="cc-name" placeholder="" required> |
| <small class="text-muted">Full name as displayed on card</small> |
| <div class="invalid-feedback"> |
| Name on card is required |
| </div> |
| </div> |
| <div class="col-md-6 mb-3"> |
| <label for="cc-number">Credit card number</label> |
| <input type="text" class="form-control" id="cc-number" placeholder="" required> |
| <div class="invalid-feedback"> |
| Credit card number is required |
| </div> |
| </div> |
| </div> |
| <div class="row"> |
| <div class="col-md-3 mb-3"> |
| <label for="cc-expiration">Expiration</label> |
| <input type="text" class="form-control" id="cc-expiration" placeholder="" required> |
| <div class="invalid-feedback"> |
| Expiration date required |
| </div> |
| </div> |
| <div class="col-md-3 mb-3"> |
| <label for="cc-cvv">CVV</label> |
| <input type="text" class="form-control" id="cc-cvv" placeholder="" required> |
| <div class="invalid-feedback"> |
| Security code required |
| </div> |
| </div> |
| </div> |
| <hr class="mb-4"> |
| <button class="btn btn-primary btn-lg btn-block" type="submit">Continue to checkout</button> |
| </form> |
| </div> |
| </div> |
| |
| <footer class="my-5 pt-5 text-muted text-center text-small"> |
| <p class="mb-1">© 2017-2018 Company Name</p> |
| <ul class="list-inline"> |
| <li class="list-inline-item"><a href="#">Privacy</a></li> |
| <li class="list-inline-item"><a href="#">Terms</a></li> |
| <li class="list-inline-item"><a href="#">Support</a></li> |
| </ul> |
| </footer> |
| </div> |
| |
| <!-- Bootstrap core JavaScript |
| ================================================== --> |
| <!-- Placed at the end of the document so the pages load faster --> |
| <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> |
| <script>window.jQuery || document.write('<script src="../../../../assets/js/vendor/jquery-slim.min.js"><\/script>')</script> |
| <script src="../../../../assets/js/vendor/popper.min.js"></script> |
| <script src="../../../../dist/js/bootstrap.min.js"></script> |
| <script src="../../../../assets/js/vendor/holder.min.js"></script> |
| <script> |
| // Example starter JavaScript for disabling form submissions if there are invalid fields |
| (function() { |
| 'use strict'; |
| |
| window.addEventListener('load', function() { |
| // Fetch all the forms we want to apply custom Bootstrap 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> |
| </body> |
| </html> |