Các ví dụ và hướng dẫn sử dụng cho các kiểu điều khiển biểu mẫu, các tùy chọn bố cục và các thành phần tùy chỉnh để tạo nhiều loại biểu mẫu.
Tổng quan
Các điều khiển biểu mẫu của Bootstrap mở rộng trên các kiểu biểu mẫu Khởi động lại của chúng tôi với các lớp. Sử dụng các lớp này để chọn tham gia các màn hình tùy chỉnh của chúng để hiển thị nhất quán hơn trên các trình duyệt và thiết bị.
Đảm bảo sử dụng một typethuộc tính thích hợp trên tất cả các đầu vào (ví dụ: emailcho địa chỉ email hoặc numbercho thông tin số) để tận dụng các điều khiển đầu vào mới hơn như xác minh email, chọn số và hơn thế nữa.
Đây là một ví dụ nhanh để chứng minh các kiểu biểu mẫu của Bootstrap. Hãy tiếp tục đọc tài liệu về các lớp bắt buộc, bố cục biểu mẫu và hơn thế nữa.
Kiểm soát biểu mẫu
Các điều khiển dạng văn bản — như <input>s, <select>s và <textarea>s — được tạo kiểu với .form-controllớp. Bao gồm các kiểu dáng chung, trạng thái tiêu điểm, định cỡ và hơn thế nữa.
Hãy chắc chắn khám phá các biểu mẫu tùy chỉnh của chúng tôi để tạo kiểu mới hơn <select>.
Đối với đầu vào tệp, hãy hoán đổi .form-controlcho .form-control-file.
Định cỡ
Đặt chiều cao bằng cách sử dụng các lớp như .form-control-lgvà .form-control-sm.
Chỉ đọc
Thêm readonlythuộc tính boolean trên một đầu vào để ngăn việc sửa đổi giá trị của đầu vào. Đầu vào chỉ đọc có vẻ nhẹ hơn (giống như đầu vào bị vô hiệu hóa), nhưng vẫn giữ lại con trỏ tiêu chuẩn.
Chỉ đọc văn bản thuần túy
Nếu bạn muốn có <input readonly>các phần tử trong biểu mẫu của mình được tạo kiểu như văn bản thuần túy, hãy sử dụng .form-control-plaintextlớp để loại bỏ kiểu trường biểu mẫu mặc định và bảo toàn lề và phần đệm chính xác.
Đầu vào phạm vi
Đặt đầu vào dải ô có thể cuộn theo chiều ngang bằng cách sử dụng .form-control-range.
Hộp kiểm và đài
Hộp kiểm và radio mặc định được cải thiện với sự trợ giúp của .form-check, một lớp duy nhất cho cả hai loại đầu vào giúp cải thiện bố cục và hành vi của các phần tử HTML của chúng . Hộp kiểm dùng để chọn một hoặc một số tùy chọn trong danh sách, trong khi radio để chọn một tùy chọn trong số nhiều tùy chọn.
Hộp kiểm và radio bị vô hiệu hóa được hỗ trợ, nhưng để cung cấp not-allowedcon trỏ khi di chuột của cha mẹ <label>, bạn sẽ cần thêm disabledthuộc tính vào .form-check-input. Thuộc tính đã tắt sẽ áp dụng màu sáng hơn để giúp chỉ ra trạng thái của đầu vào.
Việc sử dụng hộp kiểm và radio được xây dựng để hỗ trợ xác thực biểu mẫu dựa trên HTML và cung cấp các nhãn ngắn gọn, dễ truy cập. Như vậy, các <input>s và <label>s của chúng ta là các phần tử anh chị em trái ngược với một <input>bên trong a <label>. Điều này hơi dài dòng hơn vì bạn phải chỉ định idvà forcác thuộc tính để liên quan đến <input>và <label>.
Mặc định (xếp chồng lên nhau)
Theo mặc định, bất kỳ số hộp kiểm và radio nào là anh em ngay lập tức sẽ được xếp chồng lên nhau theo chiều dọc và có khoảng cách thích hợp .form-check.
Nội tuyến
Nhóm các hộp kiểm hoặc đài trên cùng một hàng ngang bằng cách thêm .form-check-inlinevào bất kỳ .form-check.
Không có nhãn
Thêm .position-staticvào các đầu vào .form-checkkhông có bất kỳ văn bản nhãn nào. Hãy nhớ vẫn cung cấp một số dạng nhãn cho các công nghệ hỗ trợ (ví dụ: sử dụng aria-label).
Cách trình bày
Vì Bootstrap áp dụng display: blockvà width: 100%cho hầu hết tất cả các điều khiển biểu mẫu của chúng tôi, các biểu mẫu theo mặc định sẽ xếp theo chiều dọc. Các lớp bổ sung có thể được sử dụng để thay đổi bố cục này trên cơ sở mỗi biểu mẫu.
Nhóm hình thành
Lớp .form-grouplà cách dễ nhất để thêm một số cấu trúc vào biểu mẫu. Nó cung cấp một lớp linh hoạt khuyến khích nhóm các nhãn, điều khiển, văn bản trợ giúp tùy chọn và thông báo xác thực biểu mẫu phù hợp. Theo mặc định, nó chỉ áp dụng margin-bottom, nhưng nó chọn các kiểu bổ sung .form-inlinekhi cần thiết. Sử dụng nó với <fieldset>s, <div>s hoặc gần như bất kỳ phần tử nào khác.
Lưới biểu mẫu
Các biểu mẫu phức tạp hơn có thể được xây dựng bằng cách sử dụng các lớp lưới của chúng tôi. Sử dụng chúng cho các bố cục biểu mẫu yêu cầu nhiều cột, chiều rộng đa dạng và các tùy chọn căn chỉnh bổ sung.
Hàng biểu mẫu
Bạn cũng có thể hoán đổi .rowcho .form-row, một biến thể của hàng lưới tiêu chuẩn của chúng tôi ghi đè các rãnh cột mặc định để có bố cục chặt chẽ và nhỏ gọn hơn.
Các bố cục phức tạp hơn cũng có thể được tạo bằng hệ thống lưới.
Dạng ngang
Tạo biểu mẫu ngang với lưới bằng cách thêm .rowlớp để tạo nhóm và sử dụng các .col-*-*lớp để chỉ định chiều rộng của nhãn và điều khiển của bạn. Hãy chắc chắn thêm .col-form-labelvào các <label>s của bạn để chúng được căn giữa theo chiều dọc với các điều khiển biểu mẫu được liên kết của chúng.
Đôi khi, bạn có thể cần sử dụng các tiện ích lề hoặc đệm để tạo ra sự liên kết hoàn hảo mà bạn cần. Ví dụ: chúng tôi đã xóa padding-topnhãn đầu vào radio xếp chồng lên nhau của chúng tôi để căn chỉnh đường cơ sở văn bản tốt hơn.
Định cỡ nhãn dạng ngang
Đảm bảo sử dụng .col-form-label-smhoặc .col-form-label-lgcác <label>s hoặc <legend>s của bạn để tuân theo chính xác kích thước của .form-control-lgvà .form-control-sm.
Định cỡ cột
Như được hiển thị trong các ví dụ trước, hệ thống lưới của chúng tôi cho phép bạn đặt bất kỳ số .cols nào trong dấu .rowhoặc .form-row. Họ sẽ chia đều chiều rộng có sẵn giữa chúng. Bạn cũng có thể chọn một tập hợp con các cột của mình để chiếm nhiều hơn hoặc ít hơn không gian, trong khi các cột còn lại .colchia đều phần còn lại, với các lớp cột cụ thể như .col-7.
Tự động định cỡ
Ví dụ dưới đây sử dụng tiện ích flexbox để căn giữa nội dung theo chiều dọc và thay đổi .colđể .col-autocác cột của bạn chỉ chiếm nhiều dung lượng khi cần thiết. Nói một cách khác, các kích thước cột tự nó dựa trên nội dung.
Sau đó, bạn có thể kết hợp lại điều đó một lần nữa với các lớp cột theo kích thước cụ thể.
Sử dụng .form-inlinelớp để hiển thị một loạt các nhãn, điều khiển biểu mẫu và các nút trên một hàng ngang. Các điều khiển biểu mẫu trong biểu mẫu nội tuyến hơi khác so với trạng thái mặc định của chúng.
Các điều khiển là display: flex, thu gọn bất kỳ khoảng trắng HTML nào và cho phép bạn cung cấp khả năng kiểm soát căn chỉnh với các tiện ích giãn cách và flexbox .
Các điều khiển và nhóm đầu vào nhận được width: autođể ghi đè mặc định của Bootstrap width: 100%.
Các điều khiển chỉ xuất hiện nội tuyến trong các cửa sổ xem có chiều rộng ít nhất là 576px để tính đến các cửa sổ xem hẹp trên thiết bị di động.
Bạn có thể cần giải quyết thủ công chiều rộng và căn chỉnh của các điều khiển biểu mẫu riêng lẻ bằng các tiện ích giãn cách (như được hiển thị bên dưới). Cuối cùng, hãy đảm bảo luôn bao gồm một <label>điều khiển mỗi biểu mẫu, ngay cả khi bạn cần ẩn nó khỏi những khách truy cập không phải là trình đọc màn hình .sr-only.
Các điều khiển và lựa chọn biểu mẫu tùy chỉnh cũng được hỗ trợ.
Các lựa chọn thay thế cho các nhãn ẩn
Các công nghệ hỗ trợ như trình đọc màn hình sẽ gặp rắc rối với biểu mẫu của bạn nếu bạn không bao gồm nhãn cho mọi đầu vào. Đối với các biểu mẫu nội tuyến này, bạn có thể ẩn các nhãn bằng cách sử dụng .sr-onlylớp. Có nhiều phương pháp thay thế khác để cung cấp nhãn cho các công nghệ hỗ trợ, chẳng hạn như aria-labelhoặc aria-labelledbythuộc titletính. Nếu không có trong số này, các công nghệ hỗ trợ có thể sử dụng placeholderthuộc tính, nếu có, nhưng lưu ý rằng không nên sử dụng thuộc placeholdertính này để thay thế cho các phương pháp ghi nhãn khác.
Văn bản trợ giúp
Văn bản trợ giúp cấp khối trong biểu mẫu có thể được tạo bằng cách sử dụng .form-text(trước đây được gọi là .help-blocktrong phiên bản v3). Văn bản trợ giúp nội tuyến có thể được triển khai linh hoạt bằng cách sử dụng bất kỳ phần tử HTML nội tuyến nào và các lớp tiện ích như .text-muted.
Liên kết văn bản trợ giúp với các điều khiển biểu mẫu
Văn bản trợ giúp phải được liên kết rõ ràng với điều khiển biểu mẫu mà nó liên quan đến việc sử dụng aria-describedbythuộc tính. Điều này sẽ đảm bảo rằng các công nghệ hỗ trợ — chẳng hạn như trình đọc màn hình — sẽ thông báo văn bản trợ giúp này khi người dùng tập trung hoặc vào điều khiển.
Văn bản trợ giúp bên dưới đầu vào có thể được tạo kiểu với .form-text. Lớp này bao gồm display: blockvà thêm một số lề trên để dễ dàng giãn cách từ các đầu vào ở trên.
Mật khẩu của bạn phải dài 8-20 ký tự, chứa các chữ cái và số, đồng thời không được chứa dấu cách, ký tự đặc biệt hoặc biểu tượng cảm xúc.
Văn bản nội tuyến có thể sử dụng bất kỳ phần tử HTML nội dòng điển hình nào (có thể là a <small>, <span>hoặc thứ gì đó khác) mà không cần gì nhiều hơn một lớp tiện ích.
Biểu mẫu bị vô hiệu hóa
Thêm disabledthuộc tính boolean vào một đầu vào để ngăn các tương tác của người dùng và làm cho nó trông nhẹ hơn.
Thêm disabledthuộc tính vào a <fieldset>để tắt tất cả các điều khiển bên trong.
Báo trước với neo
Theo mặc định, các trình duyệt sẽ coi tất cả các điều khiển biểu mẫu gốc ( <input>và <select>các <button>phần tử) bên trong <fieldset disabled>là bị vô hiệu hóa, ngăn chặn cả tương tác bàn phím và chuột trên chúng. Tuy nhiên, nếu biểu mẫu của bạn cũng bao gồm <a ... class="btn btn-*">các phần tử, thì những phần tử này sẽ chỉ có kiểu là pointer-events: none. Như đã lưu ý trong phần về trạng thái bị vô hiệu hóa cho các nút (và cụ thể là trong phần phụ cho các phần tử neo), thuộc tính CSS này chưa được chuẩn hóa và không được hỗ trợ đầy đủ trong Internet Explorer 10 và sẽ không ngăn người dùng bàn phím có thể tập trung hoặc kích hoạt các liên kết này. Vì vậy, để an toàn, hãy sử dụng JavaScript tùy chỉnh để vô hiệu hóa các liên kết như vậy.
Khả năng tương thích trên nhiều trình duyệt
Mặc dù Bootstrap sẽ áp dụng các kiểu này trong tất cả các trình duyệt, nhưng Internet Explorer 11 trở xuống không hỗ trợ đầy đủ disabledthuộc tính trên a <fieldset>. Sử dụng JavaScript tùy chỉnh để vô hiệu hóa tập trường trong các trình duyệt này.
Thẩm định
Cung cấp phản hồi có giá trị, có thể hành động cho người dùng của bạn với xác thực biểu mẫu HTML5– có sẵn trong tất cả các trình duyệt được hỗ trợ của chúng tôi . Chọn từ phản hồi xác thực mặc định của trình duyệt hoặc triển khai các thông báo tùy chỉnh với các lớp và JavaScript khởi động được tích hợp sẵn của chúng tôi.
Hiện tại, chúng tôi khuyên bạn nên sử dụng các kiểu xác thực tùy chỉnh, vì thông báo xác thực mặc định của trình duyệt gốc không được hiển thị nhất quán với các công nghệ hỗ trợ trong tất cả các trình duyệt (đáng chú ý nhất là Chrome trên máy tính để bàn và thiết bị di động).
Làm thế nào nó hoạt động
Đây là cách xác thực biểu mẫu hoạt động với Bootstrap:
Xác thực biểu mẫu HTML được áp dụng thông qua hai lớp giả của CSS :invalidvà :valid. Nó áp dụng cho <input>, <select>và <textarea>các phần tử.
Bootstrap mở rộng phạm vi :invalidvà các :validkiểu cho lớp cha .was-validated, thường được áp dụng cho <form>. Nếu không, bất kỳ trường bắt buộc nào không có giá trị sẽ hiển thị là không hợp lệ khi tải trang. Bằng cách này, bạn có thể chọn thời điểm kích hoạt chúng (thường là sau khi thử gửi biểu mẫu).
Để đặt lại giao diện của biểu mẫu (ví dụ: trong trường hợp gửi biểu mẫu động bằng AJAX), hãy xóa .was-validatedlớp khỏi lớp <form>đó sau khi gửi.
Là một dự phòng .is-invalidvà .is-validcác lớp có thể được sử dụng thay vì các lớp giả để xác thực phía máy chủ . Họ không yêu cầu một .was-validatedlớp cha.
Do những hạn chế về cách hoạt động của CSS, chúng tôi (hiện tại) không thể áp dụng các kiểu cho một <label>điều khiển biểu mẫu trong DOM mà không có sự trợ giúp của JavaScript tùy chỉnh.
Tất cả các trình duyệt hiện đại đều hỗ trợ API xác thực ràng buộc , một loạt các phương pháp JavaScript để xác thực các điều khiển biểu mẫu.
Thông báo phản hồi có thể sử dụng các mặc định của trình duyệt (khác nhau đối với từng trình duyệt và không thể xóa thông qua CSS) hoặc các kiểu phản hồi tùy chỉnh của chúng tôi với HTML và CSS bổ sung.
Bạn có thể cung cấp thông báo hợp lệ tùy chỉnh bằng setCustomValidityJavaScript.
Với ý nghĩ đó, hãy xem xét các bản trình diễn sau cho các kiểu xác thực biểu mẫu tùy chỉnh của chúng tôi, các lớp phía máy chủ tùy chọn và mặc định của trình duyệt.
Phong cách tùy chỉnh
Đối với thông báo xác thực biểu mẫu Bootstrap tùy chỉnh, bạn sẽ cần thêm novalidatethuộc tính boolean vào của mình <form>. Thao tác này vô hiệu hóa chú giải công cụ phản hồi mặc định của trình duyệt, nhưng vẫn cung cấp quyền truy cập vào các API xác thực biểu mẫu trong JavaScript. Cố gắng gửi biểu mẫu dưới đây; JavaScript của chúng tôi sẽ chặn nút gửi và chuyển tiếp phản hồi cho bạn.
Khi cố gắng gửi, bạn sẽ thấy các kiểu :invalidvà :validkiểu được áp dụng cho các điều khiển biểu mẫu của mình.
Mặc định của trình duyệt
Không quan tâm đến thông báo phản hồi xác thực tùy chỉnh hoặc viết JavaScript để thay đổi hành vi của biểu mẫu? Tất cả tốt, bạn có thể sử dụng mặc định của trình duyệt. Hãy thử gửi biểu mẫu bên dưới. Tùy thuộc vào trình duyệt và hệ điều hành của bạn, bạn sẽ thấy một kiểu phản hồi hơi khác nhau.
Mặc dù không thể tạo kiểu cho các kiểu phản hồi này bằng CSS, nhưng bạn vẫn có thể tùy chỉnh văn bản phản hồi thông qua JavaScript.
Phía máy chủ
Chúng tôi khuyên bạn nên sử dụng xác thực phía máy khách, nhưng trong trường hợp bạn yêu cầu phía máy chủ, bạn có thể chỉ ra các trường biểu mẫu không hợp lệ và hợp lệ với .is-invalidvà .is-valid. Lưu ý rằng .invalid-feedbackcũng được hỗ trợ với các lớp này.
Các yếu tố được hỗ trợ
Các biểu mẫu mẫu của chúng tôi hiển thị các dạng văn bản gốc <input>ở trên, nhưng các kiểu xác thực biểu mẫu cũng có sẵn cho các điều khiển biểu mẫu tùy chỉnh của chúng tôi.
Chú giải công cụ
Nếu bố cục biểu mẫu của bạn cho phép, bạn có thể hoán đổi các .{valid|invalid}-feedbacklớp cho .{valid|invalid}-tooltipcác lớp để hiển thị phản hồi xác thực trong một chú giải công cụ được tạo kiểu. Đảm bảo có phụ huynh đi cùng position: relativeđể định vị chú giải công cụ. Trong ví dụ dưới đây, các lớp cột của chúng tôi đã có điều này, nhưng dự án của bạn có thể yêu cầu thiết lập thay thế.
Biểu mẫu tùy chỉnh
Để có nhiều tùy chỉnh hơn và tính nhất quán giữa các trình duyệt, hãy sử dụng các phần tử biểu mẫu hoàn toàn tùy chỉnh của chúng tôi để thay thế các mặc định của trình duyệt. Chúng được xây dựng dựa trên đánh dấu ngữ nghĩa và có thể truy cập được, vì vậy chúng là sự thay thế vững chắc cho bất kỳ điều khiển biểu mẫu mặc định nào.
Hộp kiểm và đài
Mỗi hộp kiểm và đài được bao bọc trong một hộp kiểm <div>với một anh chị em <span>để tạo điều khiển tùy chỉnh của chúng tôi và một <label>cho văn bản đi kèm. Về mặt cấu trúc, đây là cách tiếp cận giống như cách tiếp cận mặc định của chúng tôi .form-check.
Chúng tôi sử dụng bộ chọn anh chị em ( ~) cho tất cả các <input>trạng thái của chúng tôi — như :checked—để tạo kiểu đúng cho chỉ báo biểu mẫu tùy chỉnh của chúng tôi. Khi kết hợp với .custom-control-labellớp, chúng ta cũng có thể tạo kiểu văn bản cho từng mục dựa trên <input>trạng thái của '.
Chúng tôi ẩn mặc định <input>với opacityvà sử dụng .custom-control-labelđể tạo chỉ báo biểu mẫu tùy chỉnh mới ở vị trí của nó với ::beforevà ::after. Thật không may, chúng tôi không thể tạo một tùy chỉnh chỉ từ <input>vì CSS contentkhông hoạt động trên phần tử đó.
Ở các trạng thái đã chọn, chúng tôi sử dụng các biểu tượng SVG nhúng base64 từ Open Iconic . Điều này cung cấp cho chúng tôi khả năng kiểm soát tốt nhất để tạo kiểu và định vị trên các trình duyệt và thiết bị.
Hộp kiểm
Các hộp kiểm tùy chỉnh cũng có thể sử dụng :indeterminatelớp giả khi được đặt thủ công qua JavaScript (không có thuộc tính HTML khả dụng để chỉ định nó).
Nếu bạn đang sử dụng jQuery, một cái gì đó như thế này là đủ:
Rađiô
Nội tuyến
Vô hiệu hóa
Hộp kiểm tùy chỉnh và radio cũng có thể bị vô hiệu hóa. Thêm disabledthuộc tính boolean vào <input>và chỉ báo tùy chỉnh và mô tả nhãn sẽ được tạo kiểu tự động.
Chọn menu
<select>Menu tùy chỉnh chỉ cần một lớp tùy chỉnh, .custom-selectđể kích hoạt các kiểu tùy chỉnh. Các kiểu tùy chỉnh bị giới hạn ở giao diện <select>ban đầu và không thể sửa đổi <option>do các giới hạn của trình duyệt.
Bạn cũng có thể chọn từ các lựa chọn tùy chỉnh nhỏ và lớn để phù hợp với các đầu vào văn bản có kích thước tương tự của chúng tôi.
Thuộc multipletính này cũng được hỗ trợ:
Cũng như sizethuộc tính:
Phạm vi
Tạo <input type="range">điều khiển tùy chỉnh với .custom-range. Bản nhạc (nền) và ngón tay cái (giá trị) đều được tạo kiểu để xuất hiện giống nhau trên các trình duyệt. Vì chỉ IE và Firefox hỗ trợ "điền" theo dõi của họ từ bên trái hoặc bên phải của ngón tay cái như một phương tiện để chỉ ra tiến trình một cách trực quan, chúng tôi hiện không hỗ trợ nó.
Đầu vào phạm vi có các giá trị ngầm định cho minvà max- 0và 100, tương ứng. Bạn có thể chỉ định các giá trị mới cho những giá trị đó bằng cách sử dụng thuộc tính minvà max.
Theo mặc định, phạm vi nhập "snap" thành các giá trị số nguyên. Để thay đổi điều này, bạn có thể chỉ định một stepgiá trị. Trong ví dụ dưới đây, chúng tôi tăng gấp đôi số bước bằng cách sử dụng step="0.5".
Trình duyệt tệp
Đầu vào tệp là phần quan trọng nhất trong nhóm và yêu cầu thêm JavaScript nếu bạn muốn kết nối chúng với chức năng Chọn tệp… và văn bản tên tệp đã chọn.
Chúng tôi ẩn tệp mặc định <input>qua opacityvà thay vào đó tạo kiểu <label>. Nút được tạo và định vị bằng ::after. Cuối cùng, chúng tôi khai báo a widthvà heighton <input>để có khoảng cách thích hợp cho nội dung xung quanh.
Dịch hoặc tùy chỉnh các chuỗi
Lớp :lang()giả được sử dụng để cho phép dịch văn bản “Duyệt qua” sang các ngôn ngữ khác. Ghi đè hoặc thêm các mục nhập vào $custom-file-textbiến Sass bằng thẻ ngôn ngữ có liên quan và các chuỗi được bản địa hóa. Các chuỗi tiếng Anh có thể được tùy chỉnh theo cùng một cách. Ví dụ: đây là cách người ta có thể thêm bản dịch tiếng Tây Ban Nha (mã ngôn ngữ của tiếng Tây Ban Nha là es):
Đây là lang(es)hoạt động trên đầu vào tệp tùy chỉnh cho bản dịch tiếng Tây Ban Nha:
Bạn sẽ cần đặt chính xác ngôn ngữ cho tài liệu của mình (hoặc cây con của nó) để hiển thị đúng văn bản. Điều này có thể được thực hiện bằng cách sử dụng thuộc langtính trên <html>phần tử hoặc Content-Languagetiêu đề HTTP , trong số các phương pháp khác.